ao486: Een x86-compatibele Verilog-core

Huidige status

  • 31 maart 2014: Initiële versie 1.0.
  • 19 augustus 2014: Update van driver_sd en correctie voor PS/2.

Kenmerken

De ao486-processor

Het processormodel beschikt over de volgende eigenschappen:

  • Pipeline-architectuur met vier hoofdfasen: decode, read, execute en write.
  • Implementatie van alle 486-instructies, inclusief CPUID.
  • 16 kB instructiecache.
  • 16 kB write-back datacache.
  • TLB voor 32 vermeldingen.
  • Altera Avalon-interfaces voor geheugen- en I/O-toegang.

De ao486 SoC

De SoC bestaat uit de volgende componenten:

  • ao486-processor.
  • IDE-harde schijf die wordt omgeleid naar een HDL SD-kaartdriver.
  • Floppy-controller die eveneens wordt omgeleid naar de SD-kaartdriver.
  • 8259 PIC (Programmable Interrupt Controller).
  • 8237 DMA (Direct Memory Access).
  • Sound Blaster 2.0 met DSP en OPL2 (FM-synthese werkt niet volledig). De geluidsuitgang is omgeleid naar een WM8731 audio-codec.
  • 8254 PIT (Programmable Interval Timer).
  • 8042 toetsenbord- en muiscontroller.
  • RTC (Real-Time Clock).
  • Standaard VGA.

Alle componenten zijn gemodelleerd als Altera Qsys-componenten. Altera Qsys verbindt alle onderdelen met elkaar en levert de SDRAM-controller. Het ao486-project draait momenteel uitsluitend op het Terasic DE2-115 bord.

Resourcegebruik

Het project is gesynthetiseerd voor het Altera Cyclone IV E EP4CE115F29C7 apparaat. De benutting van resources is als volgt:

UnitLogische cellenM9K geheugenblokken
ao486 processor3651747
floppy15142
hdd207117
nios210563
onchip for nios2032
pc_dma8480
pic3880
pit6670
ps27422
rtc7831
sound3713129
vga2534260

Fitter-rapport (na compilatie van alle componenten)

  • Fitter Status: Successful - Sun Mar 30 21:00:13 2014
  • Quartus II Versie: 13.1.0 Build 162 (64-Bit, SJ Web Edition)
  • Revisienaam: soc
  • Top-level Entity: soc
  • Family: Cyclone IV E
  • Device: EP4CE115F29C7
  • Totaal aantal logische elementen: 91.256 / 114.480 (80%)
  • Combinatorische functies: 86.811 / 114.480 (76%)
  • Dedicated logische registers: 26.746 / 114.480 (23%)
  • Totaal aantal registers: 26.865
  • Totaal aantal pinnen: 108 / 529 (20%)
  • Totaal geheugenbits: 2.993.408 / 3.981.312 (75%)
  • Embedded Multiplier 9-bit elementen: 44 / 532 (8%)
  • Totaal aantal PLL's: 1 / 4 (25%)

De maximale frequentie is 39 MHz; het project maakt gebruik van een klok van 30 MHz.

CPU Benchmarks

Voor de benchmarks is het pakket DosTests.zip gebruikt.

TestResultaat
Dhrystone 1 Benchmark (niet-geoptimaliseerd)1,00 VAX MIPS
Dhrystone 1 Benchmark (geoptimaliseerd)4,58 VAX MIPS
Dhrystone 2 Benchmark (niet-geoptimaliseerd)1,01 VAX MIPS
Dhrystone 2 Benchmark (geoptimaliseerd)3,84 VAX MIPS

Ondersteunde software

De ao486 draait succesvol de volgende software:

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

BIOS en VGA BIOS

Het project maakt gebruik van de BIOS van het Bochs-project (versie 2.6.2), met enkele kleine wijzigingen voor ondersteuning van de harde schijf.

De VGA BIOS is afkomstig van het VGABIOS-project (versie 0.7a) en vereiste geen wijzigingen. Aangezien het VGA-model geen VBE-extensies heeft, zijn deze uitgeschakeld.

NIOS2-controller

De ao486 SoC maakt gebruik van een Altera NIOS2-processor voor het beheren van alle componenten en het weergeven van de inhoud van het On Screen Display (OSD). Via het OSD kan de gebruiker floppy-disks invoegen en verwijderen.

Licenties

  • Bestanden in de directoriën rtl, ao486_tool en sim vallen onder de BSD-licentie.
  • Bestanden in de directoriën bochs486 and bochsDevs zijn afkomstig van het Bochs Project en vallen onder de LGPL-licentie.
  • Het binaire bestand sd/fd144m/fdboot.img is afkomstig van het FreeDOS-project.
  • Het binaire bestand sd/bios/bochs_legacy is een gecompileerde BIOS van het Bochs-project.
  • Het binaire bestand sd/vgabios/vgabios-lgpl is een gecompileerde VGA BIOS van het vgabios-project.

Compileren

Om de SoC (inclusief de NIOS II microcontroller) te compileren, is Altera Quartus II software vereist. De Verilog-componenten van de SoC, waaronder de ao486-processor, kunnen in principe met elke Verilog-compiler worden gecompileerd, hoewel de synthese-projectbestanden momenteel alleen zijn voorbereid voor Altera Quartus II.

Let op: In de huidige versie kunnen sommige synthese-projectbestanden (met name de paden daarin) defect zijn.

ao486 processor

Laad het projectbestand vanuit syn/components/ao486/ao486.qpf.

SoC

Laad het projectbestand vanuit syn/soc/soc.qpf. Let op dat het Qsys-systeem gegenereerd moet worden voordat u in Altera Quartus II compileert.

BIOS

  1. Pak het bochs-2.6.2 bronarchief uit.
  2. Pas de patch uit de directory bios/bochs-2.6.2 toe door in de uitgepakte directory uit te voeren: patch -p1 < (pad naar patchbestand).
  3. Voer ./configure uit in Bochs.
  4. Voer make uit in Bochs.
  5. Ga naar de directory bios en voer make uit.

Het resulterende binaire bestand BIOS-bochs-legacy werkt met de ao486 SoC.

VGABIOS

  1. Pak het vgabios-0.7a bronarchief uit.
  2. Pas de patch uit de directory bios/vgabios-0.7a toe door in de uitgepakte directory uit te voeren: patch -p1 < (pad naar patchbestand).
  3. Voer make uit in vgabios.

Het binaire bestand VGABIOS-lgpl-latest.bin werkt met de ao486 SoC.

De SoC uitvoeren op Terasic DE2-115

  1. Compileer het Altera Quartus II project in syn/soc/soc.qpf.
  2. Compileer de firmware voor de NIOS II:
  • Open de Nios II Software Build Tools for Eclipse.
  • Maak een workspace aan in de directory syn/soc/firmware.
  • Importeer de projecten exe en exe_bsp.
  • Genereer de BSP (Board Support Package) voor het exe_bsp project.
  • Compileer het exe project.
  1. Compileer de BIOS en kopieer het binaire bestand naar de directory sd/bios.
  2. Compileer de VGABIOS en kopieer het binaire bestand naar de directory sd/vgabios.
  3. Compileer de ao486tool door ant jar uit te voeren in de directory ao486tool.
  4. Bewerk de bestanden in de directory sd/hdd. Deze bevatten de positie van de virtuele harde schijf op de SD-kaart. De startwaarde moet een veelvoud zijn van 512 (waarden in bytes vanaf het begin van de SD-kaart).
  5. Voer java -cp ./dist/ao486tool.jar ao486.SDGenerator uit in de directory ao486tool.
  6. Kopieer het bestand ao486_tool/sd.dat naar de eerste sectoren van de SD-kaart met: dd if=sd.dat of=/dev/sdXXX.
  7. Plaats de SD-kaart in het Terasic DE2-115 bord.
  8. Programmeer de FPGA met het SOF-bestand.
  9. Laad en start de firmware van de NIOS II-controller.
  10. Selecteer via het OSD het BIOS-bestand (KEY0 voor omlaag, KEY1 voor omhoog, KEY2 voor selecteren).
  11. Selecteer het VGABIOS-bestand op het OSD.
  12. Selecteer de harde schijf op het OSD.
  13. Selecteer de floppy op het OSD (gebruik de KEYs om het floppy-image te kiezen, KEY3 om te annuleren).
  14. Na selectie of annulering start de ao486 op.

Om het OSD opnieuw te activeren, drukt u op KEY2.