继续单周期CPU设计(一)
整体设计方案:
1 课程主要目的
本课程是在前期《数字系统组成与设计》课程学习的基础上,通过实践课的方式,依照集成电路设计流程,完成一个简单独立硬件功能电路模块的设计,从而到达对《数字系统组成与设计》课程的深入理解和提高电路设计的实践能力。
2 课程的主要内容和任务
MIPS是典型的32位定长指令字RISC处理器,要求深入理解MIPS处理器的内部结构及工作原理。采用verilogHDL设计一个兼容MIPS指令格式,具有17条指令功能的单周期CPU硬件电路,并选用modelsim仿真工具(或其他环境)完成设计电路的仿真验证。在此基础上,进一步完成多周期CPU的设计及仿真。
3 单周期处理器设计
说明:单周期CPU指的是一条指令的执行在一个时钟周期内完成,然后开始下一条指令的执行,即一条指令用一个时钟周期完成。
单周期CPU的功能:能够实现一些指令功能操作。
设计原理:
CPU在处理指令时,一般需要经过以下几个步骤:
(1)取指令(IF):根据程序计数器PC中的指令地址,从存储器中取出一条指令,同时,PC根据指令字长度自动递增产生下一条指令所需要的指令地址,但遇到“地址转移”指令时,则控制器把“转移地址”送入PC,当然得到的“地址”需要做些变换才送入PC。
(2)指令译码(ID):对取指令操作中得到的指令进行分析并译码,确定这条指令需要完成的操作,从而产生相应的操作控制信号,用于驱动执行状态中的各种操作。
(3)指令执行(EXE):根据指令译码得到的操作控制信号,具体地执行指令动作,然后转移到结果写回状态。
(4)存储器访问(MEM):所有需要访问存储器的操作都将在这个步骤中执行,该步骤给出存储器的数据地址,把数据写入到存储器中数据地址所指定的存储单元或者从存储器中得到数据地址单元中的数据。
(5)结果写回(WB):指令执行的结果或者访问存储器中得到的数据写回相应的目的寄存器中。
单周期CPU,是在一个时钟周期内完成这五个阶段的处理。
3.1 总体设计方案
主要包括内容:
1)指令定义
2)总体结构设计(对各个子模块简单说明其功能)
总体模块框图如下:
如上图,此兼容MIPS指令格式,具有17条指令功能的单周期CPU硬件电路可分为七个模块:
1)PC模块:用于计算下一条指令地址;
2)指令存储器模块:用于存储指令;
3)数据存储器模块:用于存储数据;
4)寄存器堆模块:多个寄存器模块,可用于存取数据;
5)立即数扩展模块:判断是否进行扩展,并输出扩展后的值;
6)ALU计算模块:各种计算;
7)主控制模块:通过指令计算各种控制信号的值。
3)接口定义和接口时序等
顶层模块是整个CPU的控制模块,通过连接各个子模块来达到运行CPU的目的,整个模块设计如下:
顶层设计框图:
3.2子模块详细设计
3.2.1主控制模块
功能:通过判断当前执行的操作码(con_opCode)和运算结果标志(con_zero)来控制各个控制信号的输出,从而达到控制各指令的目的。
3.2.2 ALU运算单元 功能:模块ALU接收寄存器的数据和控制信号作为输入,将结果输出,具体设计如下:
3.2.3 PC模块
PC单元以时钟信号clk,重置标志reset,立即数pc_immediate以及pc_PCWre和pc_PCSrc两个控制信号为输入,输出当前PC地址,具体设计如下:
3.2.4 立即数扩展模块
扩展单元的设计比较简单,其功能就是将一个16位的立即数扩展到32位,具体模块设计如下:
3.2.5数据存储器
数据存储单元的功能是读取数据,根据数据通路图可以有如下模块设计:
3.2.6指令存储器
根据当前的PC地址得到对应的ins_op, ins_rs,
ins_rt, ins_rd, ins_immediate以及ins_target,具体设计如下:
内部实现:将需要测试的汇编指令程序转化为指令代码,为了书写的简便,将32位二进制指令代码转化为16进制,具体测试设计表见上表各类型测试指令。
3.2.7寄存器堆
寄存器文件单元的功能是接收instructionMemory中的rs,rt,rd作为输入,输出对应寄存器的数据,从而达到取寄存器里的数据目的。为了防止0号寄存器写入数据需要内部writeReg的时候多加一个判断条件,即writeReg不等于0时写入数据。具体设计如下:
3.3设计总体连接及仿真验证
设计总体连接图如图示: