プログラミング
ao486: 486 SXの全機能を実装したx86互換Verilogコア (2014年)
ao486: x86-compatible Verilog core implementing all features of a 486 SX (2014) (github.com)
要約
ao486は、Intel 486 SXプロセッサの全機能を実装したx86互換のVerilogハードウェア記述言語によるコアです。このプロジェクトは、Linuxカーネル3.13やWindows 95を起動できるSoC(System on Chip)も提供しており、2014年時点での開発状況やリソース使用量、ベンチマーク結果などが詳細に報告されています。
全文翻訳
ao486は、486 SXの全機能を実装したx86互換Verilogコアです。
コアはBochsソフトウェアのx86実装に基づいてモデル化され、テストされました。
486コアと共に、ao486プロジェクトはLinuxカーネルバージョン3.13およびMicrosoft Windows 95を起動できるSoCも含まれています。
現在の状況
2014年3月31日 - 初期バージョン1.0。
2014年8月19日 - driver_sdアップデート、ps2修正。
特徴
ao486プロセッサモデルは以下の特徴を持っています:
パイプラインアーキテクチャ(デコード、リード、実行、ライトの4つの主要ステージ)
全ての486命令を実装
CPUID命令を含む
16 kB命令キャッシュ
16 kBライトバックデータキャッシュ
32エントリのTLB
メモリおよびI/Oアクセス用のAltera Avalonインターフェース
ao486 SoCは以下のコンポーネントで構成されています:
ao486プロセッサ
HDL SDカードドライバにリダイレクトされるIDEハードドライブ
SDカードドライバにリダイレクトされるフロッピーコントローラ
8259 PIC
8237 DMA
DSPおよびOPL2(FM合成は完全には動作しない)を備えたSound Blaster 2.0
WM8731オーディオコーデックにリダイレクトされるサウンド出力
8254 PIT
8042キーボードおよびマウスコントローラ
RTC
標準VGA
全てのコンポーネントはAltera Qsysコンポーネントとしてモデル化されています。
Altera Qsysは全ての部品を接続し、SDRAMコントローラを提供します。
ao486プロジェクトは現在、Terasic DE2-115ボードでのみ実行されています。
リソース使用量
プロジェクトはAltera Cyclone IV E EP4CE115F29C7デバイス用に合成されています。
リソース使用率は以下の通りです:
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
コンパイル後のフィッターレポートは以下の通りです:
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 % )
最大周波数は39 MHzです。
プロジェクトは30 MHzのクロックを使用します。
CPUベンチマーク
ao486のベンチマークには、http://www.roylongbottom.org.uk/dhrystone%20results.htm からのDosTests.zipパッケージが使用されました。
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
ソフトウェアの実行
ao486は以下のソフトウェアを正常に実行します:
Microsoft MS-DOS version 6.22
Microsoft Windows for Workgroups 3.11
Microsoft Windows 95
Linux 3.13.1
BIOS
ao486プロジェクトはBochsプロジェクト(http://bochs.sourceforge.net, version 2.6.2)のBIOSを使用します。
ハードドライブをサポートするためにいくつかのマイナーな変更が必要でした。
VGA BIOSはVGABIOSプロジェクト(http://www.nongnu.org/vgabios, version 0.7a)のものです。
変更は必要ありませんでした。
VGAモデルにはVBE拡張機能がないため、拡張機能は無効化されました。
NIOS2コントローラ
ao486 SoCは、全てのコンポーネントの管理およびオンスクリーンディスプレイ(OSD)の内容表示のためにAltera NIOS2プロセッサを使用します。
OSDにより、ユーザーはフロッピーディスクの挿入および取り外しが可能です。
ライセンス
以下のディレクトリにある全てのファイル:rtl, ao486_tool, sim はBSDライセンスの下でライセンスされています。
以下のディレクトリにある全てのファイル:bochs486, bochsDevs はBochsプロジェクトから取得され、LGPLライセンスの下でライセンスされています。
バイナリファイル sd/fd_1_44m/fdboot.img はFreeDOSプロジェクトから取得されています。
バイナリファイル sd/bios/bochs_legacy はBochsプロジェクトからコンパイルされたBIOSです。
バイナリファイル sd/vgabios/vgabios-lgpl はvgabiosプロジェクトからコンパイルされたVGA BIOSです。
コンパイル
SoC(NIOS IIマイクロコントローラを含む)をコンパイルするには、Altera Quartus IIソフトウェアが必要です。
SoCのVerilogコンポーネント、特にao486プロセッサは、任意のVerilogコンパイラでコンパイルできるはずです。
現在、合成プロジェクトファイルはAltera Quartus II用にのみ準備されています。
注意:現在のバージョンでは、一部の合成プロジェクトファイル、特にそれらのファイル内のパスが壊れている可能性があります。
ao486プロセッサ
ao486プロセッサをコンパイルするには、syn/components/ao486/ao486.qpf からプロジェクトファイルをロードしてください。
SoC
ao486 SoCをコンパイルするには、syn/soc/soc.qpf からプロジェクトファイルをロードしてください。
Altera Quartus IIでコンパイルする前に、Qsysシステムを生成する必要があります。
BIOS
BIOSをコンパイルするには、以下を実行してください:
bochs-2.6.2ソースアーカイブを展開します。
展開したディレクトリで以下を実行して、bios/bochs-2.6.2ディレクトリからのパッチを適用します:
patch -p1 < (path to patch file)
bochsで ./configure を実行します。
bochsで make を実行します。
cd bios
BIOS-bochs-legacyというバイナリファイルがao486 SoCで動作します。
VGABIOS
VGABIOSをコンパイルするには、以下を実行してください:
vgabios-0.7aソースアーカイブを展開します。
展開したディレクトリで以下を実行して、bios/vgabios-0.7aディレクトリからのパッチを適用します:
patch -p1 < (path to patch file)
vgabiosで make を実行します。
vgabios-0.7aディレクトリにあるVGABIOS-lgpl-latest.binというバイナリファイルがao486 SoCで動作します。
Terasic DE2-115ボードでのSoCの実行
syn/soc/soc.qpf のAltera Quartus IIプロジェクトでSoCをコンパイルします。
以下の手順でNIOS IIのファームウェアをコンパイルします:
Nios II Software Build Tools for Eclipseを開きます。
syn/soc/firmwareディレクトリにワークスペースを作成します。
'exe'および'exe_bsp'プロジェクトをインポートします。
'exe_bsp'プロジェクトでBSPを生成します。
'exe'プロジェクトをコンパイルします。
BIOSをコンパイルし、バイナリをsd/biosディレクトリにコピーします。
VGABIOSをコンパイルし、バイナリをsd/vgabiosディレクトリにコピーします。
ao486_toolディレクトリで 'ant jar' を実行してao486_toolをコンパイルします。
sd/hddディレクトリ内のファイルを編集します。これらのファイルには、SDカード上の仮想ハードディスクの位置が含まれています。
開始エントリは512の倍数である必要があります。
値はSDカードの先頭からのバイト数です。
ao486_toolディレクトリで 'java -cp ./dist/ao486_tool.jar ao486.SDGenerator' を実行します。
'dd if=sd.dat of=/dev/sdXXX' を使用して、ファイル ao486_tool/sd.dat をSDカードの最初のセクタにコピーします。
SDカードをTerasic DE2-115ボードに挿入します。
SOFファイルを使用してFPGAをプログラムします。
NIOS IIコントローラのファームウェアをロードして実行します。
OSDでKEY0(下)、KEY1(上)、KEY2(選択)を使用してBIOSファイルを選択します。
OSDでVGABIOSファイルを選択します。
OSDでハードドライブを選択します。
OSDでフロッピーを選択します。KEYを使用してフロッピーイメージを選択します。KEY3でキャンセルします。
フロッピーを選択するか、キャンセルを押すと、ao486が起動します。
OSDをアクティブにするにはKEY2を押します。