您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 单周期CPU及其Verilog_HDL实现
第5章单周期CPU及其VerilogHDL实现学习指南•执行一条指令所需的硬件电路–与取指令有关有电路–寄存器计算类型指令执行所需的电路–立即数计算类型指令执行所需的电路–访问存储器类型指令执行所需的电路–条件转移类型指令执行所需的电路–跳转和子程序调用及返回类型指令执行所需的电路•寄存器堆设计–寄存器堆的硬件电路设计–结构描述风格的寄存器堆VerilogHDL代码–功能描述风格的寄存器堆VerilogHDL代码•数据路径设计–多路选择器的使用–单周期CPU的总体电路–单周期CPU的VerilogHDL代码•控制部件设计–控制部件的逻辑设计–控制部件的VerilogHDL代码•存储器及测试程序设计–数据存储器设计–指令存储器及测试程序设计–单周期CPU测试结果及说明处理器的工作过程简介•CPU的执行过程:首先将程序和数据输入计算机的存储器中,然后从主存中“程序入口(程序执行的第一条指令的地址)”开始依次取出指令和数据,并根据指令的要求对数据进行加工处理,得到需要的结果后,结束运行。•因此,控制器控制程序的执行过程实际上是控制指令的执行过程。•由于程序(指令序列)预先存放在存储器中,所以指令执行的过程分为取指令和执行指令,如下图。①②③④⑤⑥⑦⑧⑨⑩•假设程序和数据已经存放在主存中,执行指令执行步骤如下(要求记下来):–根据程序计数器PC的内容从主存中取出一条指令,放置于指令寄存器IR中。–分析IR中的操作码,决定应执行的操作。–根据IR的地址码取出参加运算的操作数。–对操作数进行运算。–根据IR的地址码把运算结果存放指定地址。–本条指令执行完毕,修改PC内容决定下一条指令所在的地址。•目前的计算机都属于“同步”计算机。•同步计算机是指在计算机系统中有一个时钟(Clock),计算机所有的动作都以这个时钟为基准。•如下图的单周期波形。指令1指令2指令3指令4一个时钟周期上升沿下降沿•单周期CPU是指一条指令的执行在一个时钟周期内完成,然后开始下一条指令的执行,即一条指令用一个时钟周期。5.1执行一条指令所需的硬件电路•计算机的程序一般存在硬盘等辅存中。当计算机执行一个程序时,首先由操作系统把要执行的程序从硬盘调入内存,然后CPU从内存读出指令开始执行。注意:前提是操作系统已经调入内存并运行。•设计CPU硬件电路的目的是使其能够从存储器中读取一条指令并执行指令所描述的操作,且这个过程是循环的,自动的。•注意–从存储器中读取指令的动作与指令本身的操作无关,所以可以对所有的指令以同样的方法从内存中取出。–执行指令则与指令本身的意义密切相关。•因此最重要的是首先要搞清楚CPU要执行的每一条指令的意义(功能)。•以第5章列出的20条整数指令为例来对每一条指令的执行进行说明。–指令格式—寄存器、立即数、跳转等格式。–指令意义—计算、访存、条件转移、无条件转移等类型。5.1.1与取指令有关的电路•CPU要执行指令,必须先把它从存储器中读出来,然后才能知道指令究竟要干什么。•而一般程序是连续执行的,且存放在内存中也是连续存放的,所以读取并执行本条指令后,最有可能执行的是在本条件指令后的下一条指令,即地址+“1”条指令的长度。–注意:这里的“1”是指一条指令所占用的存储空间。•为了指出下一条指令的位置(地址),最简单的办法是设置一个计数器用来指定指令的位置。该计数器称为程序计数器PC(ProgramCounter)。•CPU取指令时是把PC的内容作为存储器地址,根据它来访问存储器,从指定的存储器单元中取出一条指令。–如果取出的指令执行时没有引起转移,则PC的值要+“1”。–如果转移,则要将目标地址写入PC,以便在下一个时钟周期取出下一条指令。•下图是与取指令有关的电路。xxxxxxx0:xxxxxxx1:xxxxxxx2:xxxxxxx3:xxxxxxx4:xxxxxxx5:xxxxxxx6:xxxxxxx7:字节地址PC+4指令n指令n+1PC地址PC+adoInstMem地址40123Clock指令PC+4多路选择器取指令及PC+“1”指令存储器InstMem•说明:–PC--32位寄存器,由32个D触发器构成。–a--是地址输入端。–do--数据输出端,即指令。–加法器--完成PC+4运算。–多路选择器--用于选择地址之一。•为什么要PC+4?–因为这里假定指令的长度是固定的,即32位(4个字节),所以每取一条指令后,PC都要加4才能取互下一条指令。不考虑转移时取指令的流程取指令startInstMem--PCReadPC--PC+4Dataout……5.1.2寄存器计算类型指令执行时所需的电路•指令从存储器取出来后,要进行分析,分析该指令的操作什么?操作数如何获取?等等。•根据设定的指令,可以画出分析指令类型的流程图如下。分析指令类型的流程取指令(已讲)分析指令类型寄存器算术逻辑寄存器移位立即数置高位、加法立即数逻辑运算条件转移无条件转移•下面分类来说明每类指令的执行过程及所需的电路。先说明寄存器计算类指令。–add,sub,and,or,xor--这5条寄存器算术逻辑类型指令除了运算不同外,其他操作均相同。–sll,srl,sra--寄存器移位类型指令除了移位方向不同外,其他操作均相同。寄存器算术逻辑类型指令•寄存器算术逻辑类型指令格式•从指令中可以看出,寄存器堆的数目为25=32个•所以rd,rt,rs是从这32个寄存器堆中选择一个。•功能:从寄存器堆中读出的2个数据(由rs,rt指定)分别被送到ALU的a和b的输入端,结果存入由rd指定的寄存器中。func0rdrtrsop501061511201625213126寄存器算术逻辑运算类型指令执行流程rd--rsoprtstartRegfile--IR(rs)Regfile--IR(rt)Reada--Regfile(rs)b--Regfile(rt)aluc--funcRegfile--IR(rd)d--aluwrite表示将指令中的rs部分的代码送到寄存器堆endfunc0rdrtrsopPC+adoInstMem地址40123Clock指令PC+4pcsource执行寄存器算术逻辑类型指令所需的电路ControlUnitopfuncrswernaqarnbwndqbrdrtRegfileaalucALUzbalucwreg•说明–ControlUnit的输入信号是op和func,输出信号:•ALU的操作控制码aluc•计算结果是否写入寄存器堆的控制信号wreg•下一条指令的地址选择信号pcsource–ALU结果写入的寄存器由rd指定。•有关ControlUnit的具体设计将在后面描述。寄存器移位类型指令•寄存器移位类型指令格式•其中sa指定了移位的位数。•功能:把从寄存器rt中读出的32位数据进行左移或右移sa位后,结果写入由rd指定的寄存器。•移位的方向由func决定。funcsardrt0op501061511201625213126寄存器移位类型指令执行流程startRegfile--IR(rt)Reada--IR(sa)b--Regfile(rt)aluc--funcRegfile--IR(rd)d--aluwriteendrd--rtshiftsafuncsardrt0op执行寄存器移位类型指令所需的电路PC+adoInstMem地址40123Clock指令PC+4pcsourceControlUnitopfuncrswernaqarnbwndqbrdrtRegfileaalucALUzbalucwregsa•由于sa只有5位,而a输入端是32位,所以把sa必须放在低位,高27位可以是任何数据。•将上面2个电路结合在一起,只需要在ALU的a输入端前加一个二选一的多路选择器即可。具体是选择qa还是sa,由取出来的指令确定。5.1.3立即数计算类型指令执行时所需的电路•指令格式•包括addi,andi,ori,xori和lui,由op进行区分。•共同特点是ALU的操作数b来自于立即数。•由于立即数只有16位,所以需要扩展到32位(符号位扩展or零扩展)。immediatertrsop立即数计算类型指令执行流程startRegfile--IR(rs)Readb--IR(imm,扩展)a--Regfile(rs)aluc--decode(op)Regfile--IR(rt)d--aluwriteendrt--rsopimm(扩展)lui:rt--imm16immediatertrsopPC+adoInstMem地址40123Clock指令PC+4pcsource执行立即数计算类型指令所需的电路ControlUnitoprswernaqarnbwndqbrtrtRegfileaalucALUzbalucwregimmesext•从上面可以看出,b输入端为imm,再加上算术逻辑类型指令的输入,所以b输入端的前面也必须有一个二选一的多路选择器。•符号扩展和零扩展是通过组件e来实现的。–sext=1,符号扩展。–sext=0,零扩展。•计算结果写入由rt指定的寄存器中。5.1.4访问存储器类型的指令执行时所需电路•访问存储器的指令格式•有2条:–读指令(lw)----从数据存储器中读数据,写入由rt指定的寄存器中。–写指令(sw)----把rt寄存器的数据写入存储器中。•共同点是都要计算存储器地址。•操作数来源:–一个数是使用rs从寄存器堆中读出的。–另一个数是把指令中的16位立即数imm进行符号扩展得到。两个数相加是通过ALU完成的。immediatertrsop访问存储器类型指令执行的流程startRegfile--IR(rs)Readb--IR(imm,扩展)a--Regfile(rs)aluc--decode(op)Regfile--IR(rt)d--mem(addr)writeendlw:rt--memory(rs+imm(扩展))sw:memory(rs+imm(扩展))--rtReadR/WWritemem(addr)--aluReadmem(addr)--alumem(d)--Regfile(rt)writeRegfile--IR(rt)ReadimmrtrsopPC+adoInstMem地址40123Clock指令p4pcsource执行访问存储器类型指令所需的电路ControlUnitoprswernaqarnbwndqbrtrtRegfileaalucALUzbalucwregimmesextweadoDataMemdiwmem•注意–由于这里讨论的是单周期CPU的设计,所以需要2个分开的存储器模块,即指令存储器和数据存储器。•如果使用一个存储器模块且存储器模块只有一个访问端口,就无法在一个时钟周期既读取指令,又访问数据。–这里暂且“认为”2个存储器模块是2个Cache模块。5.1.5条件转移型指令执行时所需电路•指令格式•条件转移指令这里只讲beq和bne,功能如下:–beq----if(rs==rt)PC--pc+4+imm2(符号扩展)–bne----if(rs!=rt)PC--pc+4+imm2(符号扩展)•PC的来源有2个:–一个是PC+“1”。–另一个是pc+4+imm2(符号扩展)。•此时需要对PC的输入进行控制,即设置pcsource。–pcsource=00,pc--pc+“1”–pcsource=01,pc--labelimmediatertrsop条件转移型指令执行流程startRegfile--IR(rs)Regfile--IR(rt)Readb--Regfile(rs)a--Regfile(rt)aluc--decode(op)mux4x32--p4+imm2(符号扩展)endbeq:if(rs==rt)pc--p4+imm2(符号扩展)bne:if(rs!=rt)pc--p4+imm2(符号扩展
本文标题:单周期CPU及其Verilog_HDL实现
链接地址:https://www.777doc.com/doc-2593635 .html