第5章单周期CPU及其Verilog HDL设计_第1页
第5章单周期CPU及其Verilog HDL设计_第2页
第5章单周期CPU及其Verilog HDL设计_第3页
第5章单周期CPU及其Verilog HDL设计_第4页
第5章单周期CPU及其Verilog HDL设计_第5页
已阅读5页,还剩99页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章单周期CPU及其VerilogHDL设计天道酬勤CPU的构成

(ControlUnit)ALUCPU

(Datapath)

...I/O接口c寄存器堆多路选择器计算机存储器控制部件数据路径单周期CPU

单周期(Single-Cycle)CPU执行一条指令用一个时钟周期(最简单的执行方式)Clock时钟上升沿(0到1的变化)下降沿c一个周期指令1在时钟上升沿保存指令的结果和下一条指令的地址指令2指令3指令45.1

执行指令所需的硬件电路—读取指令程序计数器的值作为地址从存储器中取指令—分析指令—按指令规定内容执行指令—检查有无中断请求若无,则转入下一条指令的执行过程形成下一条指令地址

指令的执行过程取指令执行指令指令例子:ADDR6,R1,R2;R6⇐R1+R2CPU和存储器

CPU PC ALU存储器指令寄存器控制部件地址例:lwr24,100(r15);r24<--memory[r15+100]从寄存器堆读出寄存器15中的数据

该数据与立即数100相加1.2.3.4.相加的结果作为存储器地址,从存储器中读出数据把该数据写入寄存器24,把PC+4写入PC字节地址

0:1:2:3:4:5:6:7:

5.PC+4?为什么?

PCPC+4指令1(32位指令2(32位))

88888888c

指令的执行过程根据程序计数器,从存储器取出指令MIPS指令格式

op6bits

rs5bits

rt5bits

Imm16bits

op6bits

rs5bits

rt5bits

rd5bitsfunct6bits

op6bits

addr26bitsIFormatRFormatJFormat

sa5bits3120262521161501110653120262521161503126250(rs,rt:RegisterNumbers,imm:Immediate)(rs,rt,rd:RegisterNumbers,sa:ShiftAmount)(addr:TargetAddress)c20MIPS指令addsubandorxorsllsrlsrajraddiandiorixorilwswbeqbneluijjalrd,rs,rtrd,rs,rtrd,rs,rtrd,rs,rtrd,rs,rtrd,rt,sard,rt,sard,rt,sarsrt,rs,immrt,rs,immrt,rs,immrt,rs,immrt,imm(rs)rt,imm(rs)rs,rt,immrs,rt,immrt,immaddraddr;;;;;;;;;;;;;;;;;;;;rd<--rs+rtrd<--rs-rtrd<--rs&rtrd<--rs|rtrd<--rsˆrtrd<--rt<<sard<--rt>>sa(logical)rd<--rt>>sa(arithmetic)PC<--rsrt<--rs+(sign)immrt<--rs&(zero)immrt<--rs|(zero)immrt<--rsˆ(zero)immrt<--memory[rs+(sign)imm]memory[rs+(sign)imm]<--rtif(rs==rt)PC<--PC+4+(sign)imm<<2if(rs!=rt)PC<--PC+4+(sign)imm<<2rt<--imm<<16PC<--(PC+4)[31..28],addr<<2$31<--PC+4;PC<--(PC+4)[31..28],addr<<2c20MIPS指令sa0000000000000000000000000sasasa00000func100000100010100100100101100110000000000010000011001000op000000000000000000000000000000000000000000000000000000op001000001100001101001110100011101011000100000101001111rsrsrsrsrsrs000000000000000rsrsrsrsrsrsrsrsrsrs00000rtrtrtrtrtrtrtrtrt00000rtrtrtrtrtrtrtrtrtrtrdrdrdrdrdrdrdrdrd00000immimmimmimmimmimmimmimmimmimm;;;;;;;;;;;;;;;;;;;;Rformatinstructionsaddrd,rs,rtsubrd,rs,rtandrd,rs,rtorrd,rs,rtxorrd,rs,rtsllrd,rt,sasrlrd,rt,sasrard,rt,sajrrsIformatinstructionsaddirt,rs,immandirt,rs,immorirt,rs,immxorirt,rs,immlwrt,imm(rs)swrt,imm(rs)beqrs,rt,immbners,rt,immluirt,immop000010000011addraddraddr;;;Jformatinstructionsjaddrjaladdrc取指部件(InstructionFetchUnit)每条指令都有的公共操作取指令:M[PC]更新PC:PC←PC+4转移(BranchandJump)时,PC内容再次被更新为“转移目标地址”32InstructionWordAddressInstructionMemoryPCClkNextAddressLogic顺序:先取指令,再改变PC的值(具体实现可以并行)

决不能先改变PC的值,再取指令下地址逻辑取指部件ado

Inst memclock

PCPC:存储器地址5.1.1与取指令有关的电路

PC+4 32位加法器

4c程序计数器指令存储器指令取指后,每条指令功能不同,在数据通路中信息流动过程也不同下面分别对每条指令进行数据通路设计5.1.2寄存器计算类型指令执行时所需电路addrd,rs,rt;rd<--rs+rt

rt

rt5-bit

rd

rd5-bit

funct100000 6-bit

op000000 6-bit

rs

rs5-bit

sa00000 5-bit例:addr3,r1,r2;r3<--r1+r2

op000000 6-bit

rs00001

5-bit

rt00010

5-bit

rd00011

5-bit

sa00000 5-bit

funct100000 6-bit与add类似的指令:sub,and,or,xorc指令的意义:寄存器rs中的数据和寄存器rt中的数据相加,结果存放在寄存器rd中。把PC+4写入PC执行add,sub,and,or,xor指令所需的CPU电路qarnbqbdclkzrALUabalucaluc

wreg

werna4ado InstmemPCControlUnitwnRegfilertrdopfuncp4rsrsrtrdsafuncopx000ADDx100SUBx001ANDx101ORx010XORx110LUI0011SLL0111SRL1111SRAaluc[3..0]

clockcSll指令(ShiftLeftLogical)sllrd,rt,sa;rd<--rt<<sa

rt

rt5-bit

sa

sa5-bit

op000000 6-bit

rs00000 5-bit

rd

rd

5-bit

funct000000 6-bit指令的意义:寄存器rt中的数据左移sa位,结果存放在寄存器rd中。把PC+4写入PC例:sllr13,r12,25;r13<--r12<<25

op000000 6-bit

rs00000 5-bit

rt01100

5-bit

rd01101

5-bit

sa11001

5-bit

funct000000 6-bit与sll类似的指令:srl,srac执行sll,srl,sra指令所需的电路qarnbqbdclkzrALUabalucaluc

wreg

werna4ado InstmemPCControlUnitwnRegfilertrdsaopfuncp4rsrtrdsafuncopx000ADDx100SUBx001ANDx101ORx010XORx110LUI0011SLL0111SRL1111SRAaluc[3..0]

clocksll,srl,sracSll电路的追加qbdclkzrALUabaluc01aluc4ado InstmemPCControlUnitnRegfilerdsaopfuncp4rsrtrsrtrdsafuncopx000ADDx100SUBx001ANDx101ORx010XORx110LUI0011SLL0111SRL1111SRAaluc[3..0]

shift if(sll,srl,sra)shift=1; wregelseshift=0;

wenanb qa

clockadd,sub,and,or,xor,sll,srl,srac5.1.3立即数计算类型指令执行时所需电路(AddImmediate)addirt,rs,imm;rt<--rs+(sign)imm

op001000 6-bit

rs

rs5-bit

rt

rt5-bit

imm

imm16-bit例:addir3,r1,-1;r3<--r1+(-1)

op001000 6-bit

rs00001

5-bit

rt00011

5-bit

imm1111111111111111

16-bit与addi类似的指令:andi,ori,xori(无符号立即数)c指令的意义:寄存器rs中的数据和无符号立即数imm相与,结果存放在寄存器rt中。把PC+4写入PCsext执行addi指令所需电路eadoqarnbqbwnclkzra

alucALUaluc

wreg

werna

bclock4

InstmemPCControlUnitRegfiledrtimmopp4rsrsrtimmopaddi,andi,ori,xoriaddi:sext=1;andi,ori,xori:sext=0;x000ADDx100SUBx001ANDx101ORx010XORx110LUI0011SLL0111SRL1111SRAaluc[3..0]cLui指令(LoadUpperImmediate)luirt,imm;rt<--imm<<16

op001111 6-bit

rs00000

5-bit

rt

rt5-bit

imm

imm16-bit

例:luir29,0xffff;r29<--0xffff0000

op001111 6-bit

rs00000

5-bit

rt11101

5-bit

imm1111111111111111

16-bitc指令的意义:把立即数imm左移16位,结果存放在寄存器rt中。把PC+4写入PCsexteadoqarnbqbwnclkzra

alucALUaluc

wreg

werna

bclock4

InstmemPCControlUnitRegfiledrtopp4rsrtimmoplui:sext=x;x000ADDx100SUBx001ANDx101ORx010XORx110LUI0011SLL0111SRL1111SRAaluc[3..0]

luic

imm执行lui指令所需电路regrtsextaddi,lui电路的追加eqarnbqbclk

wernazrab

alucALU01010123alucshiftaluimmwregpcsourceclockopfunc4ado InstmemPCControlUnitwnRegfiledrsrtrdrtsaimmp4rsrtrdsafuncoprsrtimmopadd,sub,and,or,xor,sll,srl,sra,jr,addi,andi,ori,xori,lui

0 1I-format:regrt=1;R-format:regrt=0;I-format:aluimm=1;R-format:aluimm=0;c5.1.4访问存储器类型指令执行时所需电路

(LoadWord)lwrt,imm(rs);rt<--memory[rs+(sign)imm]

op100011 6-bit

rs

rs5-bit

rt

rt5-bit

imm

imm16-bit例:lwr25,0xc0(r7);r25<--memory[r7+0xc0]

op100011 6-bit

rs00111

5-bit

rt11001

5-bit

imm0000000011000000

16-bitc指令的意义:寄存器rs中的数据和立即数imm相加,得到存储器地址,用这个地址访问存储器,把得到的存储器数据写入寄存器rt中。把PC+4写入PCsexteadoqbwnclk

wernarnb qazrab

alucALUadodiwealucwregop4

Instmemclock

DatamemPCControl UnitRegfiledrsrtimmp4rsrtimmoplwlw:sext=1;c执行lw指令所需电路0:零扩展,1:符号扩展Sw指令(StoreWord)swrt,imm(rs);memory[rs+(sign)imm]<--rt

op101011 6-bit

rs

rs5-bit

rt

rt5-bit

imm

imm16-bit例:swr25,0xc0(r7);memory[r7+0xc0]<--r25

op101011 6-bit

rs00111

5-bit

rt11001

5-bit

imm0000000011000000

16-bitc指令的意义:寄存器rs中的数据和立即数imm相加,得到存储器地址,把寄存器rt中的数据写入这个地址的存储器中。把PC+4写入PCsexteadoqarnbqbwnclk

wernazrab

alucALUadodiwealucwmemop4

Instmemclock

DatamemPCControlUnitRegfiledrsrtimmp4rsrtimmopswsw:sext=1;c执行sw指令所需电路regrtsextlw和sw电路的追加eqarnb

wernazrab

alucALU01010123adodiwe01alucshiftaluimmwregm2regpcsourcewmemopfunc4ado InstmemDatamem

P CclockControlUnitwnRegfiledclk qbrsrtrdrtsaimmp4rsrtrdsafuncoprsrtimmopadd,sub,and,or,xor,sll,srl,sra,jr,addi,andi,ori,xori,lw,sw,luilw:m2reg=1;

0 1I-format:regrt=1;R-format:regrt=0;c(BranchonEqual)beqrs,rt,imm;if(rs==rt)PC<--PC+4+(sign)imm<<2

rs

rs5-bit

rt

rt5-bit

op000100 6-bit

imm

imm16-bit

例:60:beqr4,r5,-4;if(r4==r5)PC<--48(=60+4-16)

rt00101

5-bit

imm1111111111111100

16-bit

op000100 6-bit与beq类似的指令

rs00100

5-bit

:bne(不相等时转移)c5.1.5条件转移类型指令执行时所需电路

指令的意义:如果寄存器rs中的数据和寄存器rt中的数据相等,转移到地址PC+4+(sign)imm×4sexteadoqarnbqbclk

wernazra

alucALU0123alucpcsource

z

bclockop4

InstmemPCControlUnitRegfiledrsrtimmp4rsrtimmop2beq,bneif(beq·z+bne·z)pcsource=1;c执行beq指令所需电路regrtsextBeq电路的追加eqarnbqbdclk

werna01zrALUabaluc01010123adodiwe01alucshiftaluimmwregm2regpcsourcewmemzclockopfunc4ado InstmemDatamemPCControlUnitwnRegfilersrtrdrtsaimmp4rsrtrdsafuncoprsrtimmop2add,sub,and,or,xor,sll,srl,sra,jr,addi,andi,ori,xori,lw,sw,beq,bne,luic(Jump)jaddr;PC<--(PC+4)[31..28],addr<<2

op000010 6-bit

addr

addr26-bit例:j0x100;PC<--0x400

op000010 6-bit

addr0000000100000000

26-bitc5.1.6跳转和子程序调用及返回类型指令执行时所需电路

指令的意义:跳转。目标地址是:把26位的立即数addr左移2位,再与PC+4的高4位拼接0123pcsourceop4adoInstPCControl Unitaddrp4addrop2

mem

clockjj:pcsource=3;[31..28][27..0]c执行j指令所需电路Jal指令(JumpAndLink)jaladdr;$31<--PC+4;PC<--(PC+4)[31..28],addr<<2

op000011 6-bit

addr

addr26-bit例:20:jal0x100;r31<--24;PC<--0x400

op000011 6-bit

addr0000000100000000

26-bitc指令的意义:调用(跳转并保存返回地址)。目标地址是:把26位的立即数addr左移2位,再与PC+4的高4位拼接。返回地址保存在寄存器31中。返回地址是PC+8,我们暂时假定是PC+4qarnbwnclk

werna0123wregpcsourceclockop4ado InstmemPCControl UnitRegfiledaddrp4addropjal31jal:pcsource=3;[31..28][27..0]

qb2c执行jal指令所需电路Jr指令(JumpRegister)jrrs;PC<--rs

op000000 6-bit

rs

rs5-bit

rt00000 5-bit

rd00000 5-bit

sa00000 5-bit

funct001000 6-bit例:jrr31;PC<--r31

op000000 6-bit

rs11111

5-bit

rt00000 5-bit

rd00000 5-bit

sa00000 5-bit

funct001000 6-bitc指令的意义:

把寄存器rs中的数据写入PC中。adoqarnbqbwnclk

werna0123pcsourceclockopfunc4InstmemPCControl UnitRegfiledrsp4rsrtrdsafuncopif(jr)pcsource=2;jrc执行jr指令所需电路qarnbqbdclk

wernazrALUabaluc010123pcsourcealucopfunc4ado InstmemPCControlUnitwnRegfilersrtrdsap4rsrtrdsafuncopif(jr)pcsource=2;shift if(sll,srl,sra)shift=1;wregelseshift=0;

clockadd,sub,and,or,xor,sll,srl,sra,jrcjr电路的追加寄存器由N位触发器构成CPU中的不同类型寄存器由锁存器构成的暂存器:带“写使能”信号用于和总线相连的、输出端带三态门的寄存器:带“三态门控”信号带复位(清0)功能的寄存器带计数(自增)功能的寄存器带移位功能的寄存器组合上述多个功能的寄存器:带多个控制信号寄存器组有若干个寄存器组成通常是双口:两个读口+一个写口可带时钟输入信号用于控制输入信号何时被写入到寄存器中经过一个clk-to-Q,输入信号在寄存器的输出端有效!5.2寄存器堆设计存储元件:寄存器和寄存器组寄存器(Register)写使能(WriteEnable-WE)信号

0:时钟边沿到时,输出不变 1:时钟边沿到时,输出开始变为输入若每个时钟边沿都写入,则不需WE信号寄存器组(RegisterFile)两个读口(组合逻辑操作):busA和busB分别由RA和RB给出地址。地址RA或RB有效后,经一个“取数时间(AccessTime)”,BusA和BusB有效一个写口(时序逻辑操作):写使能为1且时钟边沿到时,busW传来的值开始被写入RW指定的寄存器中ClkbusWWriteEnable3232busA32busB555RWRARB3232-bitRegistersClkDataInWriteEnableNNDataOut5.2.1寄存器堆的硬件电路设计5.2.3寄存器堆VerilogHDL代码moduleregfile(rna,rnb,d,wn,we,clk,clrn,qa,qb);input[4:0]rna,rnb,wn;input[31:0]d;inputwe,clk,clrn;output[31:0]qa,qb;reg[31:0]register[1:31];//$1-$31regs//2readportassignqa=(rna==0)?0:register[rna];//readport0assignqb=(rnb==0)?0:register[rnb];//readport1//1writeportalways@(posedgeclkornegedgeclrn)if(clrn==0)beginintegeri;for(i=1;i<32;i=i+1)register[i]<=0;endelse//writeportif(we&&(wn!=0))register[wn]<=d;endmodule计算机的五大组成部分什么是数据通路(DataPath)?指令执行过程中,数据所经过的路径(包括路径中的部件),是指令的执行部件

控制器(Control)的功能对指令进行译码,生成指令对应的控制信号,控制数据通路的动作。能对指令的执行部件发出控制信号,是指令的控制部件ControlMemoryProcessorInputOutputDatapathDatapath5.3单周期数据通路的设计数据通路的基本结构数据通路由两类部件组成组合逻辑元件(亦称操作元件)存储元件(亦称状态元件)元件间的连接方式总线连接方式分散连接方式数据通路的构成由“操作元件”和“存储元件”通过总线或分散方式连接而成数据通路的功能进行数据存储、处理、传送因此,数据通路是由操作元件和存储元件通过总线方式或分散方式连接而成的进行数据存储、处理、传送的路径。

操作元件:组合逻辑电路加法器(Adder)多路选择器(MUX)算术逻辑部件(ALU)32AB32Y32SelectMUX3232AB32ResultZeroOPALU3232AB32SumCarryAdderCarryIn3Decoderout0out1out7out2译码器(Decoder)何时要用到adder,ALU,MUXorDecoder?控制信号组合逻辑元件的特点其输出只取决于当前的输入定时:所有输入到达后,经过一定的逻辑门延时,输出端改变,并保持到下次改变,不需要时钟信号来定时二选一或多选一加法器需要什么控制信号?状态元件:时序逻辑电路状态(存储)元件的特点具有存储功能,在时钟控制下输入状态被写到电路中,直到下一个时钟到达输入端状态由时钟决定何时写入,输出端状态随时可读出定时方式:规定信号何时写入状态元件或何时从状态元件读出边沿触发(edge-triggered)方式状态单元中的值只在时钟边沿改变。每个时钟周期改变一次最简单的状态单元D触发器:一个时钟输入、一个状态输入、一个状态输出cycletimerisingedgefallingedge上升沿(risingedge)触发:在时钟正跳变时进行读/写下降沿(fallingedge)触发:在时钟负跳变时进行读/写回顾——D触发器切记:状态单元的输入信息总是在一个时钟边沿到达后的“Clk-to-Q”时才被写入到单元中,此时的输出才反映新的状态值数据通路中的状态元件有两种:寄存器(组)+存储器Q总是在clk-Q后跟着D变化这段时间D变化不影响Q建立时间(SetTime):在触发时钟边沿之前输入必须稳定保持时间(HoldTime):在触发时钟边沿之后输入必须保持Clock-to-Q-time:在触发时钟边沿,输出并不能立即变化回顾——MIPS的三种指令类型ADDandSUBSTRACTaddrd,rs,rtsubrd,rs,rtORImmediate

orirt,rs,imm16LOADandSTORElwrt,(rs)imm16swrt,(rs)imm16BRANCHbeqrs,rt,imm16JUMPjtargetoptargetaddress026316bits26bitsoprsrtrdshamtfunct0611162126316bits6bits5bits5bits5bits5bitsoprsrtimmediate0162126316bits16bits5bits5bits这些指令具有代表性!算术运算、逻辑运算;RR型、RI型;访存指令;条件转移、无条件转移本讲重点:实现以上指令的数据通路!MIPS 有哪三种类型指令?R-Type、I-Type、J-Type设计处理器的步骤第一步:分析每条指令的功能来第二步:根据指令功能给出所需元件,并考虑如何将他们互连第三步:确定每个元件所需控制信号的取值第四步:汇总所有指令所涉及到的控制信号,生成一张反映指令与控制信号之间关系的表第五步:根据表得到每个控制信号的逻辑表达式,据此设计控制器电路处理器设计涉及到数据通路的设计和控制器的设计数据通路中有两种元件

操作元件:由组合逻辑电路实现存储(状态)元件:由时序逻辑电路实现SKIPregrtsextcallbeq,bneeq1n2q2clk

wen101zrab

alucALU01010123adodiwe01wreg=0m2regpcsourcewmem=0alucshiftaluimmzclockopfunc4ado InstmemDatamemPCControl UnitnRegfiledrsrtrdrtsaimmaddrp4

f10rsrtrdsafuncoprsrt

immaddropop2beq,bnebeqrs,rt,imm[31..28][27..0]2Single-CycleCPUDesign–p.47/82cYAMINLI,CIS,HOSEIUNIVERSITY1.下一条指令地址的选择(控制信号pcsource)regrtsextcalljreqarnbqbclk

werna01zrab

alucALU01010123adodiwe01wreg=0m2regpcsourcewmem=0alucshiftaluimmzclockopfunc4ado InstmemDatamemPCControl UnitwnRegfiledrsrtrdrtsaimmp4

f10rsrtrdsafuncoprsrt

immaddropop22jr[31..28][27..0]

jrrsc

addr下一条指令地址的选择(控制信号pcsource)regrtsextcalljeq1n2q2clk

wen101zrab

alucALU01010123adodiwe01wreg=0m2regpcsourcewmem=0alucshiftaluimmzclockopfunc4ado InstmemDatamemPCControl UnitnRegfiledrsrtrdrtsaimmaddrp4

f10rsrtrdsafuncoprsrt

immaddropop2jjaddr[31..28][27..0]2c下一条指令地址的选择(控制信号pcsource)regrtsexteqarnbqbclk

werna01zrab

alucALU01010123adodiwe01wregm2regpcsourcewmem=0alucshiftaluimmzclockopfunc4ado InstmemDatamemPCControl UnitrnRegfiledrsrtrdrtsaimmaddrp4

f10rsrtrdsafuncoprsrt

immaddropop22add,sub,and,or,xoraddrd,rs,rt[31..28][27..0]cadd,sub,and,or,xor2.ALU的a输入端(控制信号shift)regrtsextsll,srl,sraeqarnbqbclk

werna01zrab

alucALU01010123adodiwe01wregm2regpcsourcewmem=0alucshiftaluimmzclockopfunc4ado InstmemDatamemPCControl UnitwnRegfiledrsrtrdrtsaimmaddrp4

f10rsrtrdsafuncoprsrt

immaddropop22sll,srl,srasllrd,rt,sa[31..28][27..0]cALU的a输入端(控制信号shift)jalregrtsextaddi,andi,ori,xorieqarnbqbclk

werna01zrab

alucALU01010123adodiwe01wregm2regpcsourcewmem=0alucshiftaluimmzclockopfunc4ado InstmemDatamemPCControl UnitwnRegfiledrsrtrdrtsaimmaddrp4

f10rsrtrdsafuncoprsrt

immaddropop22addi,andi,ori,xoriaddirt,rs,imm[31..28][27..0]c3.ALU的b输入端和寄存器堆的wn输入端(控制信号aluimm和regrt)jalregrtsextALU的b输入端和寄存器堆的wn输入端(控制信号aluimm和regrt)eqarnbqbclk

werna01zrab

alucALU01010123adodiwe01wregm2regpcsourcewmem=0alucshiftaluimmzclockopfunc4ado InstmemDatamemPCControl UnitwnRegfiledrsrtrdrtsaimmaddrp4

f10rsrtrdsafuncoprsrt

immaddropop22luiluirt,imm[31..28][27..0]cluijalregrtsextjallweqarnbqbclk

werna01zrab

alucALU01010123adodiwe01wregm2regpcsourcewmem=0alucshiftaluimmzclockopfunc4ado InstmemDatamemPCControl UnitwnRegfiledrsrtrdrtsaimmaddrp4

f10rsrtrdsafuncoprsrt

immaddropop22lwlwrt,imm(rs)[31..28][27..0]c4.寄存器堆的d输入端(控制信m2reg和jal)TheMIPSSubset(考察实现以下指令的数据通路)ADDandsubtractaddrd,rs,rtsubrd,rs,rtORImmediate:orirt,rs,imm16LOADandSTORElwrt,(rs)imm16swrt,(rs)imm16BRANCH:beqrs,rt,imm16JUMP:jtargetoptargetaddress026316bits26bitsoprsrtrdshamtfunct0611162126316bits6bits5bits5bits5bits5bitsoprsrtimmediate0162126316bits16bits5bits5bits所有指令的数据通路都已经设计好,合起来的数据通路是什么样的?regrtsextjal0:1:2:3:PC+4BranchAddrRegAddrJumpAddreqarnbqbclk

werna01zrab

alucALU01010123adodiwe01wregm2regpcsourcewmemalucshiftaluimmzclockopfunc4ado InstmemDatamemPCControl UnitwnRegfiledrsrtrdrtsaimmaddrp4

f10rsrtrdsafuncoprsrt

immaddropop22[31..28][27..0]c5.3.2单周期CPU的总体电路指令执行结果总是在下个时钟到来时开始保存在

寄存器

存储器或

PC

中!5.3.3单周期计算机的代码:sccomp_dataflow.v

modulesccomp_dataflow(clock,resetn,inst,pc,aluout,memout,mem_clk); inputclock,resetn,mem_clk; output[31:0]inst,pc,aluout,memout; wire[31:0]data; wirewmem; sccpu_dataflows(clock,resetn,inst,memout,pc,wmem,aluout,data); scinstmemimem(pc,inst); scdatamemdmem(clock,memout,data,aluout,wmem,mem_clk,mem_clk); endmodulec单周期CPU的代码:sccpu_dataflow.v

modulesccpu_dataflow(clock,resetn,inst,mem,pc,wmem,alu,data); input[31:0]inst,mem; inputclock,resetn; output[31:0]pc,alu,data; outputwmem; wire[31:0]p4,bpc,npc,adr,ra,alua,alub,res,alu_mem; wire[3:0]aluc; wire[4:0]reg_dest,wn; wire[1:0]pcsource; wirezero,wmem,wreg,regrt,m2reg,shift,aluimm,jal,sext; wire[31:0]sa={27’b0,inst[10:6]}; wire[31:0]offset={imm[13:0],inst[15:0],2’b00}; wiree=sext&inst[15]; wire[15:0]imm={16{e}}; wire[31:0]immediate={imm,inst[15:0]};csc_cpu.v

dff32ip(npc,clock,resetn,pc); cla32pcplus4(pc,32’h4,1’b0,p4); cla32br_adr(p4,offset,1’b0,adr); wire[31:0]jpc={p4[31:28],inst[25:0],2’b00}; sc_cucu(inst[31:26],inst[5:0],zero,wmem,wreg,regrt,m2reg, aluc,shift,aluimm,pcsource,jal,sext); mux2x32alu_b(data,immediate,aluimm,alub); mux2x32alu_a(ra,sa,shift,alua); mux2x32result(alu,mem,m2reg,alu_mem); mux2x32link(alu_mem,p4,jal,res); mux2x5reg_wn(inst[15:11],inst[20:16],regrt,reg_dest); assignwn=reg_dest|{5{jal}};//jal:r31<--p4; mux4x32nextpc(p4,adr,ra,jpc,pcsource,npc); regfilerf(inst[25:21],inst[20:16],res,wn,wreg,clock,resetn,ra,data); alual_unit(alua,alub,aluc,alu,zero); endmodulec小结CPU设计直接决定了时钟周期宽度和CPI,所以对计算机性能非常重要!CPU主要由数据通路和控制器组成数据通路:实现指令集中所有指令的操作功能控制器:控制数据通路中各部件进行正确操作数据通路的两种元件操作元件(组合电路):ALU、MUX、Ext.、Adder、Reg/MemRead状态/存储元件(时序电路):PC、Reg/MemWrite数据通路的定时数据通路中操作元件没有存储功能,其操作结果须写到存储元件中在时钟到达后clk-to-Q时存储元件开始更新状态MIPS指令集的一个子集作为CPU的实现目标公共操作:取指令和PC+4下址计算:32位PC,四路选择:顺序、Branch、JumpR型:ALU两个操作数来自rs和rt,结果写到rd访存:符号扩展,数据在rt和主存单元中交换立即数:0扩展后的操作数送到ALU的一个输入端5.4单周期控制器的设计考察每条指令在数据通路中的执行过程和涉及到的控制信号取值公共操作:取指令和计算下址PCR-Type指令(add/sub)立即数指令(ori)访存指令(lw/sw)分支指令(beq)跳转指令(j)汇总各指令的控制信号取值两类控制信号:直接送往数据通路/送往局部控制单元分析ALU操作对应的控制信号与func字段间的关系设计ALU局部控制单元设计主控制单元控制器基本概念控制器的功能(从程序执行角度看)对指令流和数据流实施正确控制在空间上,由控制器形成受控部件的控制信号在时间上,控制器控制各种动作的执行顺序控制器基本概念控制器的功能(从系统设计和实现的角度看)取指令(控制指令流出) 分析指令(控制指令分析)执行指令,发出各种操作命令(控制指令执行)确定下一条指令的地址(控制指令流向)执行环境的建立与保护(控制执行环境的维护)存储器运算器控制器控制器基本概念PCIRID指令控制操作控制时间控制数据加工处理中断ALU寄存器XR地址运算中断系统CU时序电路寄存器ALU

中断系统CUCPU控制总线数据总线地址总线控制器的功能(从完成功能角度看)1)用户可见寄存器(1)通用寄存器CPU的寄存器存放操作数可作

某种寻址方式所需的专用寄存器(2)数据寄存器存放操作数(满足各种数据类型)两个寄存器拼接存放双倍字长数据(3)地址寄存器存放地址,其位数满足最大地址范围用于特殊寻址方式段基值栈指针(4)条件码寄存器存放条件码,可作程序分支的依据如正、负、零、溢出、进位等控制器基本概念2)控制和状态寄存器(1)控制寄存器PC控制CPU操作(2)状态寄存器状态寄存器其中MARMBRIR

用户不可见存放条件码 用户可见

PSW寄存器存放程序状态字 用户可见

PC

用户可见MARMMMBRIR控制器基本概念CPU的寄存器CPU基本组成原理图控制部件CPU由

执行部件

控制部件组成CPU包含

数据通路

控制器控制器由

指令译码器

和控制信号形成部件

等组成执行部件CPU执行指令过程及其与计算机性能的关系CPU执行指令的过程取指令PC+1送PC指令译码进行主存地址运算取操作数进行算术/逻辑运算存结果判断和检测“异常”事件若有异常,则自动切换到异常处理程序检测是否有“中断”请求,有则转中断处理CPU的实现与计算机性能的关系计算机性能(程序执行快慢)由三个关键因素决定:指令数目、时钟周期、CPI指令数目由编译器和指令集决定时钟周期和CPI由CPU的实现来决定

CPU的设计与实现非常重要!它直接影响计算机的性能。问题:“取指令”一定在最开始做吗?“PC+1”一定在译码之前做吗?“译码”须在指令执行前做吗?“异常”和“中断”差别是什么?取指阶段执行阶段TheBigPicture:WhereareWeNow?TheFiveClassicComponentsofaComputerControlDatapathMemoryProcessorInputOutput下一个目标:设计单周期数据通路的控制器设计方法(1)根据每条指令功能,分析控制信号取值,并在表中列出(2)根据列出的指令和控制信号关系,写出每个控制信号的逻辑表达式pcsource[1..0]wmemwregjalsextop[5..0]func[5..0]

regrt m2regaluc[3..0] shift aluimmSccu_dataflow

zControl UnitMIPSCPU指令格式rdfunc

saimmaddrrsrsrtrtopopopI类型指令R类型指令J类型指令c5.4.1控制部件的逻辑设计1.写使能(WriteEnable)

wreg wmem2.ALU操作控制

aluc[3..0]3.

m2reg pcsource[1..0] shift aluimm regrt jal sextc控制信号的种类多路选择器的选择信号wreg

1:写寄存器堆 0:不写wmem

1:写存储器 0:不写m2reg

1:选择从存储器中读出的数据

0:shift

1:选择移位位数(sa) 0:选择寄存器堆的数据c控制信号的意义aluimm

1:选择扩展后的立即数 0:选择寄存器堆的数据regrtrtrdPC+4ALU或者存储器数据

1:选择 0:选择jal

1:选择 0:选择sext

1:符号扩展 0:零扩展c控制信号的意义pcsource[1..0]PC+4

00:选择 01:选择转移地址 10:选择寄存器地址 11:选择跳转地址aluc[3..0]x000:ADDx100:SUBx001:ANDx101:ORx010:XORx110:LUI0011:SLL0111:SRL1111:SRA

(指令 (指令 (指令 (指令(指令(指令(指令(指令(指令

:add,addi,lw,sw) :sub,beq,bne) :and,andi) :or,ori):xor,xori):lui):sll):srl):sra)c控制信号的意义20MIPS指令sa0000000000000000000000000sasasa00000func100000100010100100100101100110000000000010000011001000op000000000000000000000000000000000000000000000000000000op001000001100001101001110100011101011000100000101001111rsrsrsrsrsrs000000000000000rsrsrsrsrsrsrsrsrsrs00000rtrtrtrtrtrtrtrtrt00000rtrtrtrtrtrtrtrtrtrtrdrdrdrdrdrdrdrdrd00000immimmimmimmimmimmimmimmimmimm;;;;;;;;;;;;;;;;;;;;Rformatinstructionsaddrd,rs,rtsubrd,rs,rtandrd,rs,rtorrd,rs,rtxorrd,rs,rtsllrd,rt,sasrlrd,rt,sasrard,rt,sajrrsIformatinstructionsaddirt,rs,immandirt,rs,immorirt,rs,immxorirt,rs,immlwrt,imm(rs)swrt,imm(rs)beqrs,rt,immbners,rt,immluirt,immop000010000011addraddraddr;;;Jformatinstructionsjaddrjaladdrc首先确认是什么指令,即对指令进行译码。R类型I类型op[5..0]func[5..0]op[5..0]addsubandorxorsllsrlsrajr000000000000000000000000000000000000000000000000000000100000100010100100100101100110000000000010000011001000addiandiorixorilwswbeqbnelui001000001100001101001110100011101011000100000101001111J类型op[5..0]op[5..0]j000010jal000011c

控制部件的逻辑设计指令指令指令指令生成表示指令的中间变量,变量名是指令名前加“i_”。r_type=op[5]·op[4]·op[3]·op[2]·op[1]·op[0]i_add=Rtype·func[5]·func[4]·func[3]·func[2]·func[1]·func[0]i_sub=Rtype·func[5]·func[4]·func[3]·func[2]·func[1]·func[0]

···=···i_addi=op[5]·op[4]·op[3]·op[2]·op[1]·op[0]

···=···i_j=op[5]·op[4]·op[3]·op[2]·op[1]·op[0]i_jal=op[5]·op[4]·op[3]·op[2]·op[1]·op[0]a,c指令译码列出控制信号的真值表:zpcsource[1..0]aluc[3..0]shiftaluimmsextwmemwregm2regregrtjaladdx00000000x01000···xsllx00001110x01000···x00010beq ···01x

jjalxx1111xxxxxxxxxxxxxx0001xxxxx1输出指令输入

控制部件的逻辑设计pcsource[1]pcsource[0] aluc[3] aluc[2] aluc[1] aluc[0] ··· wmem wreg=i_jr+i_j+i_jal;=i_beq&z+i_bne&~z+i_j+i_jal;=i_sra;==i_xor+i_sll+i_srl+i_sra+i_xori+i_beq+i_bne+i_lui;===i_sw;=i_add+i_sub+i_and+i_or+i_xor+i_sll+i_srl+i_sra+

i_addi+i_andi+i_ori+i_xori+i_lw+i_lui+i_jal; ···=jal=i_jal;c然后,写出控制信号的逻辑表达式

控制部件的逻辑设计5.4.2控制部件的代码:sccu_dataflow.vmodulesccu_dataflow(op,func,z,wmem,wreg,regrt,m2reg,aluc,shift, aluimm,pcsource,jal,sext); input[5:0]op,func; inputz; outputwreg,regrt,jal,m2reg,shift,aluimm,sext,wmem; output[3:0]aluc; output[1:0]pcsource; wirer_type=˜|op; wirei_add=r_type&func[5]&˜func[4]&˜func[3]& ˜func[2]&˜func[1]&˜func[0]; wirei_sub=...; ... assignwreg=i_add|i_sub|i_and|i_or|i_xor| i_sll|i_srl|i_sra|i_addi|i_andi| i_ori|i_xori|i_lw|i_lui|i_jal; assignregrt=...; ... endmodulec单周期计算机的性能单周期处理器的CPI为多少?其他条件一定的情况下,CPI越小,性能越好!CPI=1,不是很好吗?单周期处理器的性能会不会很好?为什么?计算机的性能除CPI外,还取决于时钟周期宽度单周期处理器时钟宽度为最复杂指令的执行时间很多指令可以在更短的时间内完成CPI=1!单周期计算机的性能单周期计算机的性能举例: 假设在单周期处理器中,各主要功能单元的操作时间为:

存储单元:200psALU和加法器:100ps寄存器堆(读/写):50ps

假设MUX、控制单元、PC、扩展器和传输线路没有延迟,则下面实现方式中,哪个更快?快多少?每条指令在一个固定长度的时钟周期内完成每条指令在一个时钟周期内完成,但时钟周期仅为指令所需,是可变的(实际不可行,只是为了比较)

假设指令组成为:25%取数、10%存数、45%ALU、15%分支、5%跳转单周期计算机的性能解:CPU执行时间=指令条数×CPI×时钟周期=指令条数×时钟周期

两种方案的指令条数都一样,CPI都为1,所以只要比较时钟周期宽度即可。各指令类型要求的时间长度为:单周期计算机的性能方式(1):时钟周期由最长指令来决定,应是load指令,为600ps方式(2):时钟周期取各条指令所需时间,时钟周期从600ps至200ps。根据各类指令的频度,计算出平均时钟周期长度为:CPU时钟周期=600×25%+550×1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论