这里写目录标题
1.设计目的
根据教学示例的CISC模型机设计一台8位RISC模型机。根据已有模型机结构设计各个模块和各模块之间的数据通路,实现简单RISC模型机。
2.设计过程
本次设计是设计并实现一个完整的8位RISC模型机,包括通过内部总线连接各个基本功能单元模块构成数据通路和用微指令设计的指令系统。
设计过程如下:
首先确定模型机结构(如图1),其次确定指令系统结构及功能,然后拟定指令流程和微命令序列,再设计出微程序,然后设计出各部件并分配时序,最后整体调试。
图1 8位RISC计算机结构
2.1指令集设计
2.1.1、指令格式:8位
表1 指令格式
指令 | 7-4位 | 3-2位 | 1-0位 |
---|---|---|---|
功能 | 操作码 | RS寄存器 | RD寄存器 |
2.1.2、指令集
表2 修正后的指令集
助记符 | OP码 | RS | RD | 说明 |
---|---|---|---|---|
IN | 0001 | XX | RD | 键盘输入“INPUT”->RD |
SUB | 0010 | RS | RD | RS-RD->RD |
STA | 0011 | RS | RD | RS->[RD] |
MOV | 0100 | RS | RD | RS->RD |
ADD | 0101 | RS | RD | RS+RD->RD |
OUT | 0110 | RS | XX | RS->BUS |
SLL | 0111 | XX | RD | RD<<1 ->RD左移 |
JMP | 1000 | RS | XX | RS->PC |
2.2 模块设计
2.2.1寄存器堆
-
寄存器堆设计
寄存器堆由4个8位寄存器组成,使用一个2-4译码器控制数据写入的目的寄存器,LD为数据写入使能端。两位选择信号SEL[1…0]选择输出数据的寄存器,如图2-2所示。
图2-2 寄存器堆设计(duidui.bdf)
图2-3 8位寄存器设计代码(reg8.vhd)
-
寄存器堆仿真
仿真思路:先往寄存器中写数据,然后将写入的数据读取出来验证结果。
- 0ns-4ns,总线上给数据15H作为待存入的数据,写入的寄存器为R1,(I[1]=0,I[0]=01),写使能端LD为1,将数据15H写入寄存器R1。
- 4ns-8ns,总线上给数据22H,写入的寄存器为R0(I[1]=0,I[0]=0),将寄存器R1的数据读出为15H,结果正确。
- 8ns-12ns,总线上给数据02H,写入的寄存器为R3(I[1]=0,I[0]=0),将寄存器R0的数据读出为22H,结果正确。
- 12ns-16ns,总线上给数据01H,写入的寄存器为R2(I[1]=0,I[0]=0),将寄存器R3的数据读出为02H,结果正确。
- 16ns-20ns,将寄存器R2的数据读出为01H,结果正确。
图2-4 寄存器堆仿真文件(duidui_test.vwf)
图2-5 寄存器堆仿真结果
2.2.2 运算器模块
1、运算器模块设计
运算器模块由两个8位寄存器和运算器ALU组成。ALU功能代码代码如图2-8所示。两个8位寄存器表示本模型机的运算器的两个数据寄存器A和B。
图2-6 运算器模块
ALU操作:异或、或、减、加、与、非和左移一位。
图2-7 ALU设计代码(ALU181.vhd)
2、ALU181仿真
图 2-8 运算器仿真(ALU_REG.bdf)
仿真思路:向两个寄存器中存入两个数据,给出不同的操作码,检验ALU运算结果是否正确。
0ns-10ns,输入数据A和B中分别给数据07H和05H,LDA=1,LDB=1,往DR0和DR1中数据写入07H和05H。
10ns-20ns,S[2…0]=000,ALU进行异或运算,得结果为02H,结果正确。
20ns-30ns,S[2…0]=001,ALU进行或运算,得结果为07H,结果正确。
30ns-40ns,S[2…0]=010,ALU进行减运算,得结果为02H,结果正确。
40ns-50ns,S[2…0]=011,ALU进行加法运算,得结果为0CH,结果正确。
50ns-60ns,S[2…0]=100,ALU进行与运算,得结果为05H,结果正确。
60ns-70ns,S[2…0]=101,ALU进行非运算,得结果为F8H,进位为1,结果正确。
70ns-80ns,S[2…0]=110,ALU对A进行左移运算,得结果为0EH,结果正确。
图2-9 ALU仿真文件(ALU.vwf)
图2-10 ALU仿真结果
2.2.3 存储器模块
2.2.4 其他模块
2.2.4 控制器模块
2.3整机调试
2.3.1测试程序设计
2.3.2 仿真结果
2.3.3 下载后执行结果
3.实验总结及心得体会
本次实验设计了一个简单的RISC 8位机,在设计过程中,微程序控制器部分设计和电路图连接上的小错误可能会难以定位问题所在。