




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第 7 章多周期CPU及其Verilog HDL实现学习指南 把一条指令的执行分成若干个周期取指令周期IF指令译码周期ID指令执行周期EXE存储器访问周期MEM结果写回周期WB 多周期CPU的总体电路及Verilog HDL代码多周期CPU的总体电路多周期CPU的Verilog HDL代码 用有限状态机实现多周期CPU的控制部件多周期CPU的控制部件的状态转移图多周期CPU的控制部件的总体结构控制信号的产生控制部件的Verilog HDL代码 存储器及测试程序设计存储器设计测试程序代码多周期CPU测试结果 单周期CPU用一个时钟周期执行一条指令。而确定时钟周期的时间长度时要考虑执行时间最长的指
2、令,以此写出时钟频率。 因此不管每条指令的复杂程度如何,单周期CPU都花费相同的时间去执行每条指令,造成了时间上的浪费。 本章讨论多周期CPU的设计方法并给出Verilog HDL代码。 多周期CPU的思想是把一条指令的执行分成若干个小周期,根据每条指令的复杂程度,使用不同数量的小周期(周期)去执行。7.1 把一条指令的执行分成若干个周期 在实现的20条指令中,最复杂的指令就是lw rt,offset(rs)。 它需要5 个周期,其整个执行过程为:根据PC取指令,并把PC+”1”。对指令译码并读出rs寄存器的内容。计算存储器地址:由rs寄存器的内容与指令中的偏移量offset相加得到。使用计算
3、好的地址访问存储器,从中读出一个32位的数据。最后把该数据写入寄存器堆中的rt寄存器。 最简单的指令为j adderess,2个周期即可:根据PC取指令,并把PC+”1”。指令中的address左移2位与PC的高4位拼接起来,写入PC。 ALU计算类型的指令需要4个周期:根据PC取指令,并把PC+”1”。读出rs和rt寄存器的内容。由ALU完成对2个寄存器数据(或1个立即数)的计算。最后把结果写入寄存器堆 中的rd(或rt)寄存器。 转移类指令(如beq rs,rt,offset)需要3个周期:根据PC取指令,并把PC+”1”。读出rs和rt寄存器的数据并锁存,同时ALU计算转移地址并锁存。由
4、ALU比较2个寄存器数据,并决定是否把转移地址写入PC。 多周期CPU与单周期的时序比较如下图。 注意:多周期忽略了转移类指令的延迟转移特性。lwlwaddbeqjaddbeq5432 表 每条指令所用的周期数指令指令意义意义周期数周期数add rd,rs,rt 寄存器加4sub rd,rs,rt 寄存器减4and rd,rs,rt 寄存器与4or rd,rs,rt 寄存器或4xor rd,rs,rt 寄存器异或4sll rd,rt,sa左移4srl rd,rt,sa逻辑右移4sra rd,rt,sa算术右移47.1.1 取指令周期IF 取指令周期IF完成的工作取指令PC+“1” 电路如下图。
5、PCa doInstMem40123pcsourceControlUnitopfunc a alucALU zb alusrcbselpcIR010123alucwpcwirwerna qarnb wn d qbesextrsrtABRegfileimmA图 指令译码周期ID(不包括j,jal,jr) 多周期CPU设计的原则:在每个周期结束时把本周期的结果保存在某个地方以便下一个周期使用。如设置了一个带有写使能端的指令寄存器IR,这样,即使PC值改变了,只要IR(Instrument Register)的写使能端wir(Write IR)无效,IR中的指令就不会改变。 由于ALU在该周期无事可
6、做,所以可以完成PC+”1”的工作,不必再使用一个专门的加法器。由于不是每个周期PC都加”1”,所以也给PC加了一个写使能wpc。 在ALU前面还加了2个多路器,它们的选择信号分别为selpc(select PC)和alusrcb(ALU source B)。 该周期的控制信号的输出应该为:wir=1(写IR)wpc=1(写PC)selpc=1(选择PC)alusrcb=1(选择4)aluc=x000(ALU做加法)pcsource=0(选择PC+4)7.1.2 指令译码周期ID 除了j,jal和jr指令之外,其他指令在指令译码(Instrument Decode)周期完成下面三个工作:ARe
7、gisterFilers; /读数据BRegisterFilert; /读数据CPC+sign_extend(offset)2; /计算转移地址 电路如下图。图 指令译码周期ID(不包括j,jal,jr)PCa dMem40123pcsourceControlUnitopfunc a alucALU zb alusrcbselpcIR010123alucwpcwirwerna qarnb wn d qbesextrsrtABRegfileimmC 控制信号的输出应该为:wir=0(不写IR)wpc=0(不写PC)selpc=1(选择PC)alusrcb=3(选择左移2位后的offset)sex
8、t=1(符号位扩展)aluc=x000(ALU做加法)pcsource=x(任意,因为不写PC) 指令j,jal和jr在本周期完成最后的操作是无条件转移。具体如下:j: PCPC31:28,address,00;jal: RegisterFile31PC; PCPC31:28,address,00; jr: PC RegisterFilers; 电路如下图。图 指令译码周期ID(包括j,jal和jr)PCa doMem40123pcsourceControlUnitopfunc a alucALU zb alusrcbselpcIR010123alucwpcwirwerna qarnb wn
9、d qbaddrsextwreg7.1.3 指令执行周期EXE j,jal和jr在ID周期已经完成了它们的使命,而其他指令则进入执行(Execution)周期。 因不同类型的指令在执行时有不同的要求,所以要分很多种情况讨论。 条件转移指令beq和bne的执行情况beq: if(A=B) PCC;bne: if(A!=B) PCC; 注意:寄存器C的内容是ID周期计算出来的转移地址。在本周期结束操作。 电路如下图。PCa doMem40123pcsourceControlUnitopfunc a aluc zALUb alusrcbselpcIR010123alucwpcwirwerna qar
10、nb wn d qbaddrsextwreg图 转移指令和寄存器类型的算术逻辑运算指令执行周期EXEz 电路新加部分:判断是否相等由ALU完成。判断结束由z给出,控制部件使用它来产生wpc信号: 如果条件满足,修改PC,即wpc=beq z+ bne z#,pcsource=1(选择寄存器C的内容)。 寄存器类型的算术逻辑类型指令(add、sub、and、or和xor)所需电路与转移指令相同,只是控制信号不同。 这些指令完成的操作:add/sub/and/or/xor: CA op B; 立即数类型的指令(addi、andi、ori、xori、lw、sw和lui)所需的电路如下图。PCa do
11、Mem40123pcsourceControlUnitopfunc a aluc zALUb alusrcbselpcIR010123alucwpcwirwerna qarnb wn d qbaddrsextwreg图 立即数类型指令的执行周期EXEz 符号扩展后的立即数连接到ALU左边的4选1多路器的输入端。 这些指令完成的操作如下:addi: CA+sign_extend(immediate);andi/ori/xori: CA op zero_extend(immediate);lw/sw: CA+sign_extend(offset);lui: Cimmediate16; 由于imme
12、diate和offset都是16位立即数imm,执行这些指令时,控制信号alusrcb=2(选择立即数)。寄存器移位类型指令 移位指令(sll、srl和sra)所需电路如下图。PCa doMem40123pcsourceControlUnitopfunc a aluc zALUb alusrcbselpcIR010123alucwpcwirwerna qarnb wn d qbaddrsextwreg图 移位类型指令的执行周期EXEz01sashift 用了一个2选1多路器,选择信号为shift,为1时选择指令中的sa。 这些指令完成的操作如下:sll: CBsa;sra: Csigned(B
13、)sa; /$signed(B)sa 注意:指令中的sa只有5位,送往2选1多路器时要扩展成32位。实际使用的只有最低5位。 本周期结束时,lw和sw指令将进入存储器访问周期MEM;其他指令将进入结果写回周期WB。7.1.4 存储器访问周期MEM 只有lw和sw指令进入存储器访问周期MEM(Memory Access)。 在EXE周期已经计算出了存储地址,放在寄存器C中。 lw和sw指令完成的操作如下:lw: DRMemoryC; /从MEM读数sw: MemoryCB; /向MEM写数 这2条指令在存储器访问周期所需的电路如下图。PCa doMemdi 40123pcsourceContro
14、lUnitopfunc a aluc zALUb alusrcbselpcIR010123alucwpcwirwerna qarnb wn d qbaddrsextwreg图 存储器访问周期MEMz01sashiftDR01iordwmem 这里把指令存储器和数据存储器合二为一。 由于取指令时使用PC作为存储器地址,而读取存储器数据时使用ALU计算出的地址,所以在存储器的地址输入端使用了一个2选1多路器。 2选1多路器的选择信号为iord。执行lw或sw时,iord=1,选择寄存器中的地址。 还使用了一个新的寄存器:DR(Data Register)。从存储器中取出的数据存放在DR中。 执行s
15、w指令时,把寄存器B的内容写入存储器。由于B没有写使能端,即每个周期都更新B,所以要保证在EXE周期向B中写入的是所希望的数据,即:BRegisterrt。由于在ID周期结束时并没有向IR寄存器写入新的指令,所以在EXE周期向寄存器写入的仍然是Registerrt。 sw指令在本周期结束,lw指令将进入WB周期。 注意图中包含了除WB之外的所有电路。7.1.5 结果写回周期WB 结果写回周期WB(Write Back)是把ALU的计算结果或者从存储器取出的数据写入寄存器堆。目的寄存器有rd和rt之分:add/sub/and/or/xor/sll/srl/sra: RegisterFilerdC
16、;addi/andi/ori/xori/lui: RegisterFilertC;lw: RegisterFilertC; 结果写回周期WB的电路如下图。结果写回电路PCControlUnitopfuncIR01werna qarnb wn d qbjalrdrtRegfileCf01regrtwreg图 结果写回周期WB(忽略了其他部分的电路)01DRm2reg 控制信号m2reg选择DR或C;regrt选择rd或rt;jal=0;wreg=1。7.2 多周期CPU的总体电路及Verilog HDL代码 7.2.1 多周期CPU的总体电路 多周期CPU加上存储器的总体电路图如下图。 除了控制
17、部件,其他所有的部件都已经在设计单周期CPU时描述过了。PCa doMemdi 40123pcsourceControlUnitopfunc a aluc zALUb alusrcbselpcIR010123alucwpcwirwerna qarnb wn d qbaddrsextwreg图 多周期CPU+存储器的总体电路图z01sashiftDR01iordwmem0110rdregrtm2reg7.2.2 多周期CPU的Verilog HDL代码 模块mccomp是多周期CPU加上存储器的Verilog HDL代码。它调用了多周期CPU模块mccpu和存储器模块mcmem。 模块mccom
18、p代码如下:module module mccomp(clock,resetn,q,a,b,alu,adr,tom,fromm,pc,ir,mem_clk);mccomp(clock,resetn,q,a,b,alu,adr,tom,fromm,pc,ir,mem_clk); parameter width=32; input clock,resetn,mem_clk; parameter width=32; input clock,resetn,mem_clk; output width-1:0a,b,alu,adr,tom,fromm,pc,ir; output width-1:0a,b,
19、alu,adr,tom,fromm,pc,ir; output 2:0 q; wire wmem; output 2:0 q; wire wmem; mccpu mccpu mc_cpu(clock,resetn,fromm,pc,ir,a,b,alu,wmem,adr,tom,q);mc_cpu(clock,resetn,fromm,pc,ir,a,b,alu,wmem,adr,tom,q); mcmem memory(clock,fromm,tom,adr,wmem,mem_clk,mem_clk); mcmem memory(clock,fromm,tom,adr,wmem,mem_cl
20、k,mem_clk);endmoduleendmodule CPU模块mccpu中调用了控制部件mccu模块,其代码在下一节给出。 CPU模块mccpu代码见mccpu.v。7.3 用有限状态机实现多周期CPU的控制部件 可以用典型的时序电路图来实现多周期CPU的控制部件。重要工作是确定状态转移图(非唯一的)。 7.3.1 多周期CPU的控制部件的状态转移图 在此给出的只是一种可能的状态图如下图。sif000sid001sexe010swb000smem000startothersothersjjaljrbeqbnesw lwswlw图 多周期CPU控制部件的状态转移图 从图中可以看出:三条跳
21、转指令(j,jal和jr)用了2个周期。二条条件指令(beq和bne)用了3个周期。lw指令用了5个周期。其余指令均用了4个周期。 图中的每个状态代表一个周期,每个状态分别指定了一个唯一的3位二进制数,这个二进制数是每个状态的“身份证号码”。7.3.2 多周期CPU的控制部件的总体结构 多周期CPU控制部件的电路结构图如下图。图 多周期CPU控制部件的电路结构图输出函数wpcpcsource1:0wiriordwmemaluc3:0selpcshiftalusrcb1:0setxwregm2regregrtjal下一状态d2:0 q2:0clrn D触发器clrnclrop,funcz 上图是
22、一个典型的时序电路。D触发器保存当前状态,其余2个模块是组合电路,分别产生表示下一状态的3位二进制数和控制信号。7.3.3 下一状态 图中的“下一状态”模块是组合电路,用于产生下一状态的信息d2:0。 d2:0在上升沿处被存入D触发器,D触发器的输出q2:0是当前状态。 根据状态转移图,得到真值表如下表 下一状态函数的真值表当前状态当前状态输入输入下一状态下一状态状态q2:0op5:0状态d2:0sif000 xsid001sid001i_jsif000i_jalsif000i_jrsif000otherssexe010sexe010i_beqsif000i_bnesif000i_lwsmem011i_swsmem011othersswb100smem011i_lwswb100i_swsif000swb100 xsif000 由真值表,可以得到逻辑表达式如下:sif=q2#*q1#*q0#;sid=q2#*q1#*q0;sexe=q2#*q1* q0#;smem=q2#*q1*q0;swb=q2*q1#*q0#;d0=i_sif+i_sexe*(i_lw+i_sw);d1=sid*(i_j+i_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 花儿生肖测试题及答案
- 涪陵教师面试题及答案
- 普通遗传学 试题及答案
- 数学在生活中的应用试题及答案
- 施工工艺与安全管理关联试题及答案
- 供应链风险管理体系在资源优化配置领域的应用与案例分析报告
- 英语商业演示技巧与表达能力试题及答案
- 河南特岗招聘试题及答案
- 老年教育课程设置与教学模式创新:2025年发展趋势报告
- 家具设计中的用户参与设计考题及答案
- 幼儿园中班歌唱:《母鸡孵蛋》 课件
- GB/T 36447-2018多媒体教学环境设计要求
- GB/T 14832-2008标准弹性体材料与液压液体的相容性试验
- 电机检测报告
- 内镜下逆行阑尾炎治疗术
- SJG 82-2020 政府投资学校建筑室内装修材料空气污染控制标准-高清现行
- 《脂蛋白(a)与心血管疾病风险关系及临床管理的专家科学建议》(2021)要点汇总
- 2004年武汉房地产市场情况分析报告(共23页)
- 肿瘤化学治疗
- RMG88.62C2控制器报警显示及可能的故障原因 - 副本
- 学业水平考试复习高中语文文言文课本翻译
评论
0/150
提交评论