Git Product home page Git Product logo

ao486's Introduction

Description

The ao486 is an x86 compatible Verilog core implementing all features of a 486 SX. The core was modeled and tested based on the Bochs software x86 implementation. Together with the 486 core, the ao486 project also contains a SoC capable of booting the Linux kernel version 3.13 and Microsoft Windows 95.

Current status

  • 31 March 2014 - initial version 1.0.
  • 19 August 2014 - driver_sd update, ps2 fix.

Features

The ao486 processor model has the following features:

  • pipeline architecture with 4 main stages: decode, read, execute and write,
  • all 486 instructions are implemented, together with CPUID,
  • 16 kB instruction cache,
  • 16 kB write-back data cache,
  • TLB for 32 entries,
  • Altera Avalon interfaces for memory and io access.

The ao486 SoC consists of the following components:

  • ao486 processor,
  • IDE hard drive that redirects to a HDL SD card driver,
  • floppy controller that also redirects to the SD card driver,
  • 8259 PIC,
  • 8237 DMA,
  • Sound Blaster 2.0 with DSP and OPL2 (FM synthesis not fully working). Sound output redirected to a WM8731 audio codec,
  • 8254 PIT,
  • 8042 keyboard and mouse controller,
  • RTC
  • standard VGA.

All components are modeled as Altera Qsys components. Altera Qsys connects all parts together, and supplies the SDRAM controller.

The ao486 project is currently only running on the Terasic DE2-115 board.

Resource usage

The project is synthesised for the Altera Cyclone IV E EP4CE115F29C7 device. Resource utilization is as follows:

Unit Logic cells M9K memory blocks
ao486 processor 36517 47
floppy 1514 2
hdd 2071 17
nios2 1056 3
onchip for nios2 0 32
pc_dma 848 0
pic 388 0
pit 667 0
ps2 742 2
rtc 783 1
sound 37131 29
vga 2534 260

The fitter raport after compiling all components of the ao486 project is as follows:

Fitter Status : Successful - Sun Mar 30 21:00:13 2014
Quartus II 64-Bit Version : 13.1.0 Build 162 10/23/2013 SJ Web Edition
Revision Name : soc
Top-level Entity Name : soc
Family : Cyclone IV E
Device : EP4CE115F29C7
Timing Models : Final
Total logic elements : 91,256 / 114,480 ( 80 % )
    Total combinational functions : 86,811 / 114,480 ( 76 % )
    Dedicated logic registers : 26,746 / 114,480 ( 23 % )
Total registers : 26865
Total pins : 108 / 529 ( 20 % )
Total virtual pins : 0
Total memory bits : 2,993,408 / 3,981,312 ( 75 % )
Embedded Multiplier 9-bit elements : 44 / 532 ( 8 % )
Total PLLs : 1 / 4 ( 25 % )

The maximum frequency is 39 MHz. The project uses a 30 MHz clock.

CPU benchmarks

The package DosTests.zip from http://www.roylongbottom.org.uk/dhrystone%20results.htm was used to benchmark the ao486.

Test Result
Dhryston 1 Benchmark Non-Optimised 1.00 VAX MIPS
Dhryston 1 Benchmark Optimised 4.58 VAX MIPS
Dhryston 2 Benchmark Non-Optimised 1.01 VAX MIPS
Dhryston 2 Benchmark Optimised 3.84 VAX MIPS

Running software

The ao486 successfuly runs the following software:

  • Microsoft MS-DOS version 6.22,
  • Microsoft Windows for Workgroups 3.11,
  • Microsoft Windows 95,
  • Linux 3.13.1.

BIOS

The ao486 project uses the BIOS from the Bochs project (http://bochs.sourceforge.net, version 2.6.2). Some minor changes were required to support the hard drive.

The VGA BIOS is from the VGABIOS project (http://www.nongnu.org/vgabios, version 0.7a). No changes were required. The VGA model does not have VBE extensions, so the extensions were disabled.

NIOS2 controller

The ao486 SoC uses a Altera NIOS2 processor for managing all components and displaying the contents of the On Screen Display.

The OSD allows the user to insert and remove floppy disks.

License

All files in the following directories:

  • rtl,
  • ao486_tool,
  • sim

are licensed under the BSD license:

All files in the following directories:

  • bochs486,
  • bochsDevs

are taken from the Bochs Project and are licensed under the LGPL license.

The binary file sd/fd_1_44m/fdboot.img is taken from the FreeDOS project.

The binary file sd/bios/bochs_legacy is a compiled BIOS from the Bochs project.

The binary file sd/vgabios/vgabios-lgpl is a compiled VGA BIOS from the vgabios project.

Compiling

To compile the SoC, which contains the NIOS II microcontroller, Altera Quartus II software is required. The Verilog components of the SoC, in particular the ao486 processor, should be possible to compile in any Verilog compiler. Currently synthesis project files are prepared only for Altera Quartus II.

NOTE: In the current version some synthesis project files -- especially the paths in those files, could be broken.

ao486 processor

To compile the ao486 processor load the project file from syn/components/ao486/ao486.qpf.

SoC

To compile the ao486 SoC load the project file from syn/soc/soc.qpf.

Before compiling in Altera Quartus II, the Qsys system must be generated.

BIOS

To compile the BIOS do the following:

  • extract the bochs-2.6.2 source archive,
  • apply the patch from the directory bios/bochs-2.6.2 by running in the extracted directory: patch -p1 < (path to patch file)
  • run ./configure in bochs
  • run make in bochs
  • cd bios
  • make
  • the binary file BIOS-bochs-legacy works with ao486 SoC.

VGABIOS

To compile the VGABIOS do the following:

  • extract the vgabios-0.7a source archive,
  • apply the patch form the directory bios/vgabios-0.7a by running in the extracted directory: patch -p1 < (path to patch file)
  • run make in vgabios,
  • the binary file VGABIOS-lgpl-latest.bin works with ao486 SoC.

Running the SoC on Terasic DE2-115

  • compile the soc Altera Quartus II project in syn/soc/soc.qpf
  • compile the firmware for the NIOS II by:
    • opening the Nios II Software Build Tools for Eclipse,
    • creating a workspace in the directory syn/soc/firmware,
    • importing the two projects 'exe' and 'exe_bsp',
    • genrating BSP on the 'exe_bsp' project,
    • compiling the 'exe' project.
  • compile the BIOS and copy the binary to the directory sd/bios,
  • compile the VGABIOS and copy the binary to the directory sd/vgabios,
  • compile the ao486_tool by running 'ant jar' in the directory ao486_tool,
  • edit the files in the directory sd/hdd. They contain the position of the virtual hard disk located on the SD card. The start entry must be a multiplicity of 512. The values are in bytes from the begining of the SD card,
  • run 'java -cp ./dist/ao486_tool.jar ao486.SDGenerator' in the directory ao486_tool,
  • copy the file ao486_tool/sd.dat to the first sectors of the SD card by using 'dd if=sd.dat of=/dev/sdXXX'.
  • insert the SD card to the Terasic DE2-115 board,
  • program the FPGA using the SOF file,
  • load and run the firmware of the NIOS II controller,
  • select the BIOS file on the On Screen Display by using KEY0 for down, KEY1 for up and KEY2 for select,
  • select the VGABIOS file on the OSD,
  • select the hard drive on the OSD,
  • select the floppy on the OSD. Use the KEYs to select the floppy image. Use KEY3 to cancel.
  • after selecting the floppy or pressing cancel, ao486 boots,
  • to activate the OSD press KEY2.

ao486's People

Contributors

alfikpl 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ao486's Issues

missing define.v?

I'm trying to synthesize the core in Vivado. It pointed out the fact that in rtl/ao486/memory/avalon_mem.v, it's trying to include "defines.v", but a file name defines.v does not exist in that same directory. What's the correct solution? Does verilog/Vivado have the concept of include paths?

Sorry if the answer is obvious, I'm more of a VHDL user than a Verilog user.

How to study the ao486 project?

Hi , I am a newer to FPGA, I major in computer architecture. Recently,I want use the FPGA to prove my some work(focus on pipeline ,especially in decoder), and I find the amazing work - ao486 project. But I have no idea of how to study it, because It is so complex. Is anyone can give me some advise of how to study it.
think you very much

sd/hdd

could you perhaps add an example using freedos to the git or mail me one ?

i don't grasp the concept. The virtual harddrive would be a partiton ?
Does it have a MBR ? or should i just dd my old dos drive to the sd ?

thanks alot for help, i was using an old quartus version where the qsys was named differently ..

molekel

Only find fdboot.img

I have load bios and vgabios successfully. but when load the img file , I only find the fdboot.img, but I did not copy this file, no matter I copy freedos.img or not. It does not work. thanks
sudo dd if=bios_vgabios.dat of=/dev/sdc0 bs=102400 seek=0 sudo dd if=freedos1.1.img of=/dev/sdc0 bs=102400 seek=512

Support

Hi,

Would this run on a ALTERA Cyclone IV EP4CE6 FPGA Development Board Kit Altera EP4CE NIOSII ??

Regards

It doesn't boot

I used the BIOS file and other files in the folder 'sd' and all follow your guide. But after choosing floppy image, the screen went black and nothing happened. What the problem maybe? Thanks for your help.
    Best regards,
    Cangyuan Lee

part's wont build

There are some files in the projects that don't exist in git. The processor compiles. But the SoC doesn't.
Perhaps you can check it on a freshly installed machine ?

best wishes

Pin usage ?

According to Readme.md the pin usages is
Total pins : 108 / 529 ( 20 % )
However when I compile using Quartus II Lite 18.1 I get
Total pins : 207 / 529 (39 % )
I have been trying to recompile for a 10 LP dev board 10CL025YU256I7G
and 207 pins will not fit 108 would be fine.
Am curious why the IO bus has been given separate input and output from
the main bus.

Thank you for the excellent work
John Luke

Nios II / main.cpp

Hello alfikpl! I hava noticed that "memcpy(dst_ptr, sector_buf, current_size);" in main.cpp line 291! I also viewed the java source code SDGenerator.java. I found the address "dst_ptr" would equal 0xF0000(BIOS) and 0xC0000(VGABIOS) when Nios application was ran. 0xF0000 and 0xC0000 were writed to file sd.dat through SDGenerator.java! Nios II will copy Bios and VGABios from SD card to location that are pointed by 0xF0000 and 0xC0000. SDRAM's address map region is 0x0800_0000-0x0bff_ffff. They are not in SDRAM. So, how can the ao486 run Bios and VGABios? Can it find and run Bios and VGABios at address 0xF0000 and 0xC0000?
Best regards,
Jerry Zh.

Performance issues

Hi,

it's very amazing project!
I'm working on port of ao486 to DE10-nano (MiSTer project). It's almost finished and i can already run some benchmarks under DOS.
Currently the system clock of project is 90MHz (100MHz is unstable), and it uses DDR3 memory.

Benchmarks show very slow speed. For example Norton SysInfo shows 14 points while 386DX-33 is 35 points. This is confusing.. 90MHz with 32bit (64bit on DDR3 through bridge) and slower than 386DX-33?

Some benchmark shows that L1 cache is disabled. Is it implemented or simply disabled somewhere?
What is the main bottleneck in performance? Can you give an advise where it can be improved?

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.