基于FPGA的8位模型计算机设计与仿真
项目仓库地址:https://github.com/Kenny-ting/8-bit-model-machine
一、8位模型计算机设计
1.1 设计指标
本模型计算机具备以下功能、模块,以及参数指标:
- 模块:存储器模块、CPU模块、外设输入模块和输出模块;
- 总线:包括地址总线和数据总线,总线位宽为8位;
- 指令集:涵盖基本的汇编指令,如算术运算指令、逻辑运算指令、移位指令内存读写指令、数据转移指令和停机指令,共计6条;
- 存储器容量:14*8位;
- 芯片主时钟频率:50MHz,系统节拍器采用8分频;
- 输入按键数:无,操作指令固化在RAM中。
- 输入输出方式:使用存储器初始化文件,固化在内存和寄存器阵列中的数据,尽可能丰富数据来源和去向,以及基本的数据存取。按键输入和数码管显示输出。
1.2 设计思路
(1)模块化设计:自顶向下,逐层设计
(2)顶层设计与描述
当功能模块设计完成后,可由VHDL代码生成元件符号,根据模型机的结构,将各元器件用总线和控制线连接起来,连接的顺序由小及大、由内到外;每连完一个模块就测试一个模块,确保模块内部可以正常工作。
(3)仿真:仿真工具使用ModelSim,编写VHDL测试文件
二、模块设计
2.1 模型计算机组成
在设计整体结构时,依据的是各指令的数据通路。然后采用自顶向下,逐步分解细化的方法进行设计。先整体模块,后局部模块。
从整体上看,模型计算机主要分为:CPU模块、外设输入模块、外设输出模块、存储模块。模型计算机结构框图如图2.1所示,具体模块有:节拍发生器模块、指令寄存器模块IR、算术逻辑单元模块ALU、数据寄存器模块DR、程序计数器模块PC、地址寄存器模块MAR、操作控制器模块等。系统流程图如下:
2.2 模型计算机的指令系统设计
在模型计算机中,指令用于验证模型机能否正常工作。模型计算机可完成两个立即数相加,并将相加结果送入累加器。指令系统需要6条指令,为了方便描述,以“6+7”、“7-6”、“6&7”和“6×2”为例,具体如下:
LD A,6;A←6,把6送入累加器A,操作码是00111110;
ADD A,7;A←A+7,把A中6与7相加,结果送入累加器A,操作码是11000110;
LD A,7; A←7,把7送入累加器A,操作码是00111110;
SUB A,6; A←A-6,把A中7与6相减,结果送入累加器A,操作码是00110011;
LD A,6; A←6,把6送入累加器A,操作码是00111110;
AND A,7; A←A&6,把A中6与7相与,结果送入累加器A,操作码是01110001;
SRL; 将累加器A中结果左移一位,操作码是10110110
HALT;运算完毕,停机,操作码是01110110。
总线结构是单总线,数据总线位数8位、操作码和操作数合计为14×8位,存储器容量最少是14×8位;地址总线最少是4位。运算器是单累加器,实现加法、减法、逻辑与和移位(乘法)操作。
(1)本模型计算机指令“LD A,6”流程如下、“LD A, 7”相同:
T0:(PC)→MAR→ABUS,IMAR=0
T1:DBUS→DR,IDR=1
T2:(PC)+1→PC,IPC=1
(DR)→IR,IIR=0,LD=1
T3:(PC)→MAR→ABUS,IMAR=0
T4:DBUS→DR,IDR=1
T5:(PC)+1→PC,IPC=1
T6:dbus→A,IA=0
T7:空
(2)第二条指令 ADD A ,7 ;把 A 中 6 与立即数 7 相加
T0:(PC) → MAR→ABUS, IMAR=0
T1:DBUS → DR, IDR=1
T2:(PC)+1 → PC, IPC=1
(DR)→IR, IIR=0, ADD=1
T3:(PC) → MAR → ABUS, IMAR=0
T4:DBUS → DR, IDR = 1
T5:(PC) + 1 → PC, IPC = 1
A+0 → SR
T6:SR → dbus
dbus → A, IA=0, EDR=1
T7:空
(3)第三条指令 SUB A,7 ;把 A 中 7 与立即数 6 相减
T0:(PC) → MAR→ABUS, IMAR=0
T1:DBUS → DR, IDR=1
T2:(PC)+1 → PC, IPC=1
(DR)→IR, IIR=0, SUB=1
T3:(PC) → MAR → ABUS, IMAR=0
T4:DBUS → DR, IDR = 1
T5:(PC) + 1 → PC, IPC = 1
A+0 → SR
T6:SR → dbus
dbus → A, IA=0,EDR=1
T7:空
(4)第四条指令 AND A , 7 ;把 A 中 6 与立即数 7 相逻辑与
T0:(PC) → MAR→ABUS, IMAR=0
T1:DBUS → DR, IDR=1
T2:(PC)+1 → PC, IPC=1
(DR)→IR, IIR=0, AND=1
T3:(PC) → MAR → ABUS, IMAR=0
T4:DBUS → DR, IDR = 1
T5:(PC) + 1 → PC, IPC = 1
A+0 → SR
T6:SR → dbus
dbus → A, IA=0,EDR=1
T7:空
(5)第五条指令 SRL;把 A 中 每一位左移,最低位用‘0’补位
T0:(PC) → MAR→ABUS, IMAR=0
T1:DBUS → DR, IDR=1
T2:(PC)+1 → PC, IPC=1
(DR)→IR, IIR=0, SRL=1
T3:(PC) → MAR → ABUS, IMAR=0
T4:DBUS → DR, IDR = 1
T5:(PC) + 1 → PC, IPC = 1