ao486:x86兼容的Verilog核心,实现486 SX的全部功能(2014)

Hacker News Top 工具

摘要

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 处理器3651747
软盘15142
硬盘207117
nios210563
nios2 的片上内存032
pc_dma8480
pic3880
pit6670
ps27422
rtc7831
声音3713129
vga2534260

编译 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

Hacker News Top

本文详述了z386,一款基于原始Intel微码构建的开源FPGA 80386 CPU。它能引导DOS 6/7、运行保护模式程序,并玩经典游戏如Doom,既是一种教育性重构,也是一个可用的FPGA CPU。

用 x86_64 汇编写成的 Linux 桌面

Lobsters Hottest

一位开发者借助 Claude Code,用纯 x86_64 汇编重建了完整的 Linux 桌面栈——从 shell、终端、窗口管理器到各种工具,实现微秒级启动,并延长数小时续航。

80386 微码反汇编

Hacker News Top

一篇博客文章,详细介绍了成功反汇编和分析 Intel 80386 微码的过程,揭示了215条指令入口点以及其复杂的内部架构。