- 1、本文档共93页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五章(单周期CPU)15
数据路径设计 多路选择器的使用 单周期CPU的总体电路 单周期CPU的Verilog HDL代码 控制部件设计 控制部件的逻辑设计 控制部件的Verilog HDL代码 存储器及测试程序设计 数据存储器设计 指令存储器及测试程序设计 单周期CPU测试结果及说明 目前的计算机都属于“同步”计算机。 同步计算机是指在计算机系统中有一个时钟(Clock),计算机所有的动作都 以这个时钟为基准。 如下图的单周期波形。 5.1 执行一条指令所需的硬件电路 计算机的程序一般存在硬盘等辅存中。当计算机执行一个程序时,首先由操作系统把要执行的程序从硬盘调入内存,然后CPU从内存读出指令开始执行。注意:前提是操作系统已经调入内存并运行。 设计CPU硬件电路的目的是使其能够从存储器中读取一条指令并执行指令所描述的操作,且这个过程是循环的,自动的。 注意 从存储器中读取指令的动作与指令本身的意义无关,所以可以对所有的指令以同样的方法从内存中取出。 执行指令则与指令本身的意义密切相关。 因此最重要的是首先要搞清楚CPU要执行的每一条指令的意义(功能)。 以第4章列出的20条整数指令为例来对每一条指令的执行进行说明。 指令格式—寄存器、立即数、跳转等格式。 指令意义—计算、访存、条件转移、无条件转移等类型。 5.1.1 与取指令有关的电路 CPU要执行指令,必须先把它从存储器中读出来,然后才能知道指令究竟要干什么。 而一般程序是连续执行的,且存放在内存中也是连续存放的,所以读取并执行本条指令后,最有可能执行的是在本条件指令后的下一条指令,即地址+“1”条指令的长度。 注意:这里的“1”是指一条指令所占用的存储空间。 为了指出下一条指令的位置(地址),最简单的办法是设置一个计数器用来指定指令的位置。该计数器称为程序计数器PC(Program Counter)。 CPU取指令时是把PC的内容作为存储器地址,根据它来访问存储器,从指定的存储器单元中取出一条指令。 如果取出的指令执行时没有引起转移,则PC的值要+“1”。 如果转移,则要将目标地址写入PC,以便在下一个时钟周期取出下一条指令。 下图是与取指令有关的电路。 说明: PC--32位寄存器,由32个D触发器构成。 a--是地址输入端。 do--数据输出端,即指令。 加法器--完成PC+4运算。 多路选择器--用于选择地址之一。 为什么要PC+4? 因为这里假定指令的长度是固定的,即32位(4个字节),所以每取一条指令后,PC都要加4才能取互下一条指令。 不考虑转移时取指令的流程 取指令 5.1.2 寄存器计算类型指令执行时所需的电路 指令从存储器取出来后,要进行分析,分析该指令的操作什么?操作数如何获取?等等。 根据第4章设定的指令,可以画出分析指令类型的流程图如下 分析指令类型的流程 下面分类来说明每类指令的执行过程及所需的电路。先说明寄存器计算类指令。 add,sub,and,or,xor--这5条寄存器算术逻辑类型指令除了运算不同外,其他操作均相同。 sll,srl,sra--寄存器移位类型指令除了移位方向不同外,其他操作均相同。 寄存器算术逻辑类型指令 寄存器算术逻辑类型指令格式 从指令中可以看出,寄存器堆的数目为 25=32个 所以rd,rt,rs都是从这32个寄存器堆中选择一个。 功能:从寄存器堆中读出的2个数据(由rs,rt指定)分别被送到ALU的a和b的输入端,结果存入由rd指定的寄存器中。 寄存器算术逻辑运算类型指令执行流程 rd--rs op rt 说明 Contor Unit的输入信号是op和func,输出信号是: ALU的操作控制码aluc 计算结果是否写入寄存器堆的控制信号wreg 下一条指令的地址选择信号pcsource ALU结果写入的寄存器由rd指定。 有关Contor Unit的具体设计将在后面描述。 寄存器移位类型指令 寄存器移位类型指令格式 其中sa指定了移位的位数。 功能:把从寄存器rt中读出的32位数据进行左移或右移sa位后,结果写入由rd指定的寄存器。 移位的方向由func决定。 寄存器移位类型指令执行流程 rd--rt shift sa 由于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 零扩展)。
文档评论(0)