p3的实验要求是用logisim实现单周期CPU,而p4则要求用verilog语言实现。
主要模块:IFU(内置指令存储器IM和计算下一模块PC值的NPC)、Splitter(分割指令)Controller(将指令译码,输出各个模块需要的控制信号)、GRF(寄存器)、ALU(计算模块)、DM(数据存储器)、EXT(数据拓展模块)
设计思路:
我的设计思路是,先把要求写的指令分类,再看每一类指令具体会对哪些部件进行哪些操作。
以寄存器为例:对寄存器的操作有两类,一类是读数据,一类是写数据。读数据的话,就得看要读哪个寄存器的数据(即取数据的地址);写数据的话,就得找到对应写入的数据(需要控制信号)和写入数据的地址(控制信号)。
下面是具体模块的设计:
1.IFU
1).IM (RAM实现)
输入端口:pc
输出端口:istr
2).NPC(计算下一级pc)
输入端口:pc ,pcsrc(选择相应的pc)
输出端口:npc
整体IFU:
输入端口:pc
输出端口:istr
2.GRF
输入:A1,A2(读数据地址),A3(写入地址),we(写使能信号),result,regaddr(选择写入地址),regdata(选择写入数据),memdata
输出:out1,out2(输出数据)
3.ALU
输入端口:out1,out2(寄存器数据),ex_imm(拓展后的立即数),ALUsrc(选择要计算的端口2数据),ALUop(计算模块的操作码)
输出端口:result (ALU计算结果)
4.EXT(立即数拓展)
输入端口:imm ,EXTop(拓展方式)
输出端口:ex_imm
5.DM
输入端口:memaddr(数据存储器写入或读出地址),result (ALU计算结果),memwrite(数据存储器写入信号)
输出端口:memdata (DM读出结果)
6.Controller
输入信号:special,opcode (用splitter分割后)
输出信号:pcsrc,we,memwrite,regaddr,regdata,EXTop,ALUop,ALUsrc
总设计图纸: