ao486:x86兼容的Verilog核心,实现486 SX的全部功能(2014)
摘要
ao486是一个开源的Verilog核心,实现了完整的486 SX处理器和SoC,能够在FPGA上启动Linux和Windows 95,并记录了2014年的基准测试和资源占用情况。
查看缓存全文
缓存时间: 2026/08/08 11:17
alfikpl/ao486
来源:https://github.com/alfikpl/ao486
描述
ao486 是一个兼容 x86 的 Verilog 核,实现了 486 SX 的全部特性。该核基于 Bochs 软件 x86 实现进行建模和测试。除了 486 核之外,ao486 项目还包含一个 SoC,能够启动 Linux 内核 3.13 版本和 Microsoft Windows 95。
当前状态
- 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 的 Sound Blaster 2.0(FM 合成未完全工作)。声音输出重定向到 WM8731 音频编解码器,
- 8254 PIT,
- 8042 键盘和鼠标控制器,
- RTC,
- 标准 VGA。
所有组件均建模为 Altera Qsys 组件。Altera Qsys 将所有部件连接在一起,并提供 SDRAM 控制器。
ao486 项目目前仅在 Terasic DE2-115 开发板上运行。
资源使用
该项目针对 Altera Cyclone IV E EP4CE115F29C7 器件进行综合。资源使用如下:
| 单元 | 逻辑单元 | M9K 存储器块 |
|---|---|---|
| ao486 处理器 | 36517 | 47 |
| 软盘 | 1514 | 2 |
| 硬盘 | 2071 | 17 |
| nios2 | 1056 | 3 |
| nios2 的片上内存 | 0 | 32 |
| pc_dma | 848 | 0 |
| pic | 388 | 0 |
| pit | 667 | 0 |
| ps2 | 742 | 2 |
| rtc | 783 | 1 |
| 声音 | 37131 | 29 |
| vga | 2534 | 260 |
编译 ao486 项目所有组件后的 Fitter 报告如下:
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 基准测试
使用了来自 http://www.roylongbottom.org.uk/dhrystone%20results.htm 的 DosTests.zip 包对 ao486 进行基准测试。
| 测试 | 结果 |
|---|---|
| Dhryston 1 基准测试(未优化) | 1.00 VAX MIPS |
| Dhryston 1 基准测试(优化) | 4.58 VAX MIPS |
| Dhryston 2 基准测试(未优化) | 1.01 VAX MIPS |
| Dhryston 2 基准测试(优化) | 3.84 VAX MIPS |
运行软件
ao486 成功运行以下软件:
- Microsoft MS-DOS 6.22 版本,
- Microsoft Windows for Workgroups 3.11,
- Microsoft Windows 95,
- Linux 3.13.1。
BIOS
ao486 项目使用来自 Bochs 项目(http://bochs.sourceforge.net,版本 2.6.2)的 BIOS。为了支持硬盘,需要进行一些小的更改。
VGA BIOS 来自 VGABIOS 项目(http://www.nongnu.org/vgabios,版本 0.7a)。无需更改。VGA 模型没有 VBE 扩展,因此这些扩展被禁用。
NIOS2 控制器
ao486 SoC 使用 Altera NIOS2 处理器来管理所有组件并显示屏幕显示(OSD)的内容。
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。
编译
要编译包含 NIOS II 微控制器的 SoC,需要 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 < (补丁文件路径)
- 在 bochs 中运行 ./configure
- 在 bochs 中运行 make
- cd bios
- make
- 二进制文件 BIOS-bochs-legacy 可与 ao486 SoC 配合使用。
VGABIOS
要编译 VGABIOS,请执行以下操作:
- 解压 vgabios-0.7a 源代码归档文件,
- 在解压后的目录中运行以下命令,应用来自 bios/vgabios-0.7a 目录的补丁: patch -p1 < (补丁文件路径)
- 在 vgabios 中运行 make,
- 二进制文件 VGABIOS-lgpl-latest.bin 可与 ao486 SoC 配合使用。
在 Terasic DE2-115 上运行 SoC
- 在 syn/soc/soc.qpf 中编译 soc Altera Quartus II 项目,
- 通过以下方式为 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 启动,
- 按 KEY2 激活 OSD。
相似文章
z386:基于原始微码构建的开源80386
本文详述了z386,一款基于原始Intel微码构建的开源FPGA 80386 CPU。它能引导DOS 6/7、运行保护模式程序,并玩经典游戏如Doom,既是一种教育性重构,也是一个可用的FPGA CPU。
Os8088:适用于 IBM XT、286、386 的强大的类 Mac 操作系统
os8088 是一个面向 Intel 8086/8088 PC 的业余爱好者级 Macintosh System 1 风格 GUI 操作系统,完全用实模式汇编编写,具有抢占式多任务能力,仅占用 256K RAM。该项目已完成,源代码可供获取。
我设计了一个基于半字节的Verilog CPU,用于构建科学计算器
该项目使用FPGA在硬件中实现了一个功能齐全的科学计算器,包括自定义软CPU、微码固件和支持工具。它提供了一个基于Web的模拟器和开源的Verilog代码。
用 x86_64 汇编写成的 Linux 桌面
一位开发者借助 Claude Code,用纯 x86_64 汇编重建了完整的 Linux 桌面栈——从 shell、终端、窗口管理器到各种工具,实现微秒级启动,并延长数小时续航。
80386 微码反汇编
一篇博客文章,详细介绍了成功反汇编和分析 Intel 80386 微码的过程,揭示了215条指令入口点以及其复杂的内部架构。