Git Product home page Git Product logo

jamieiles / 80x86 Goto Github PK

View Code? Open in Web Editor NEW
370.0 26.0 52.0 1.44 MB

80186 compatible SystemVerilog CPU core and FPGA reference design

Home Page: https://www.jamieiles.com/80186/

License: GNU General Public License v3.0

Python 10.47% CMake 6.51% C 5.98% Assembly 0.88% Shell 0.81% SystemVerilog 20.50% Verilog 2.56% C++ 51.22% GAP 0.03% Dockerfile 0.29% Vim Script 0.07% Tcl 0.66%
fpga systemverilog x86 softcore 80186

80x86's Introduction

I am a software engineer from the UK, working at Qualcomm (and Nuvia pre-acquisition) where amongst other things I'm responsible for pre-silicon software enablement covering application processor firmware, operating systems and virtual platforms on our custom CPU designs.

Prior to Nuvia/Qualcomm, I was the engineering team lead for Ksplice at Oracle which provides rebootless OS updates for Linux systems. I have a keen interest in CPU architecture and all things low-level. I have designed three CPU's - a RISC-V RV32IMA core, a x86 compatible and another home-grown 32-bit RISC, all with SoC reference designs.

My RV32IMA RISC-V core is implemented in SystemVerilog and offers ~2.61 CoreMark/MHz. The core implements the privileged architecture with SSTC and Sscofpmf extensions and runs mainline Linux. I implemented a number unique tracing techniques to record and replay execution to generate ELF core-files for software debug. The core is a scalar design with parallel execution units and out of order completion, register rename and dynamic branch prediction. The system runs on a Spartan 7 FPGA and has been hardened with OpenLane for the SKY130A process.

I have created an 80186 compatible IP core from scratch which currently runs at 60MHz on a Cyclone V FPGA in ~1750 ALMs, implementing the full 80186 ISA, traps, faults + interrupts along with a JTAG TAP. The core has a comprehensive test suite using Verilator + Google Test, a C++ model to verify against, and a build system using CMake+Docker. A reference design includes an SDRAM controller, MCGA graphics, PS/2 keyboard+mouse controller, fixed disk emulation on an SD card, lightweight PIC+PIT implementations and a BIOS. The system can run a wide range of DOS based applications with good performance.

See the rest of my projects on GitHub and more information on my personal website.

80x86's People

Contributors

jamieiles avatar sftwninja avatar tkchia avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

80x86's Issues

Monkey island MCGA not working

Hi @jamieiles wonderfull project you have here!

I have an Altera-DE0-CV board here and i've been trying to get monkey island 1 running on it.
CGA mode works okay monkey c k i, however its very limited in colour palette.
When I enable MCGA mode monkey m k i, the game appears to stall at startup.

I am using the .sof file provided on your website (checksum: 02580D43) as well as your provided freedos disk image. Do I need to recompile from the latest source?

Are there any steps I am missing to get MCGA working?

Thanks!

Is there a chance to get GateMate FPGA supported?

Hi,

I would kindly ask if you know about GateMate FPGA's?

The Bulgarian board manufacturer sells Eval Boards for about 50€ and I have one and thinking about using that as a 8086 FPGA silicon.

Basically I got the blinking sample running and Cologne Chip has made a ILA open source for the chip. Not sure if I can use that on that Bulgarian Eval Board (FTDI missing).

Most looks promising as this board has a 4096 color VGA and a PS2 Keyboard to be used. What I like to add is a mouse port.

Thanks

Lothar

NEC V20 series, x87 FPUs

Is it possible to extend support for:

  • NEC V20 series
    • NEC x86 instructions
    • 286 real mode instructions
    • 8080 mode
    • PC/XT I/O and peripherals
    • additional I/O and peripherals
    • additional features
      • interrupt vector numbers compatible with Intel x86
      • 16MB addressing V33 type
      • 16MB addressing V55 type
      • separate address and data buses
        • Weitek 1067 FPU
        • 80287
      • PC/AT I/O and peripherals
    • NEC FPUs
      • x87 μPD72091 FPU
      • x87 μPD72191, D9008D FPU - FPOWER X^y = e^(y*logeX)
      • non-x87 FPU NEC 72291
  • 8087
  • 80187
  • Am9511/Intel 8231 APU (works with 8080/8086) - z88dk-ticks has an implementation here.
  • Am9512/Intel 8232 FPU (works with 8080/8086)

running the simulator

Hi Jamie, its a little unclear how to run the simulator after ./scripts/build

I get the following error when running ./_build/build/sim/simulator

./_build/build/sim/simulator: error while loading shared libraries: libsimdisplay.so: cannot open shared object file: No such file or directory

Is this related to running cmake? Could you please provide some command line examples to get it running?

Development workflow questions

Hey Jamieiles!

First off, thanks for publishing this project, it's super neat. I really like how you have it set up thru Docker and CMake. It really makes it feel much more akin to normal software development.

Can I ask what your workflow for working on this is like? I feel like I'm missing a few steps and it's making it a bit difficult to do work on it. So far, I've been running CMake, then attaching to the s80x86-dev docker image to do builds and stuff, but I feel like I'm missing a lot of power of the other scripts. I have read the documentation that it builds and digested it the best I can, but I'm just not groking the intermediate steps as much as I'd hoped.

I'm also happy to flesh out the documentation with the additional info if you wouldn't mind tossing it out there :)

Thanks!

Spartan 6

Hi Jamie, this is a very interesting project you have here. I’m thinking of porting the rtl to small xilinx spartan-6 based devices (lx9 and/or lx16) . I was wondering how altera/intel specific your code is and how you assess the amount of work it would take. Are there any specific requirements on the fpga like internal sram, fifos and such?

Unclear build system

I'm trying to build your project for my DE0-NANO. I've read the development guide several times, but I think I'm missing some critical piece of understanding.

./scripts/build appears to fetch & build; all CI tests pass, but I'm confused as to what build targets to invoke to create the quartus project, and how to build and execute the verilator sim environment. Hoping you could please provide some insight here.

Thanks in advance!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.