单周期cpu及其verilog_hdl实现

上传人:wm****3 文档编号:52326626 上传时间:2018-08-20 格式:PPT 页数:92 大小:1.38MB
返回 下载 相关 举报
单周期cpu及其verilog_hdl实现_第1页
第1页 / 共92页
单周期cpu及其verilog_hdl实现_第2页
第2页 / 共92页
单周期cpu及其verilog_hdl实现_第3页
第3页 / 共92页
单周期cpu及其verilog_hdl实现_第4页
第4页 / 共92页
单周期cpu及其verilog_hdl实现_第5页
第5页 / 共92页
点击查看更多>>
资源描述

《单周期cpu及其verilog_hdl实现》由会员分享,可在线阅读,更多相关《单周期cpu及其verilog_hdl实现(92页珍藏版)》请在金锄头文库上搜索。

1、第 5 章单周期CPU及其Verilog HDL实现学习指南 执行一条指令所需的硬件电路 与取指令有关有电路 寄存器计算类型指令执行所需的电路 立即数计算类型指令执行所需的电路 访问存储器类型指令执行所需的电路 条件转移类型指令执行所需的电路 跳转和子程序调用及返回类型指令执行所需的电 路 寄存器堆设计 寄存器堆的硬件电路设计 结构描述风格的寄存器堆Verilog HDL代码 功能描述风格的寄存器堆Verilog HDL代码 数据路径设计 多路选择器的使用 单周期CPU的总体电路 单周期CPU的Verilog HDL代码 控制部件设计 控制部件的逻辑设计 控制部件的Verilog HDL代码

2、存储器及测试程序设计 数据存储器设计 指令存储器及测试程序设计 单周期CPU测试结果及说明处理器的工作过程简介 CPU的执行过程:首先将程序和数据输入计算机的存储器 中,然后从主存中“程序入口(程序执行的第 一条指令的地址)”开始依次取出指令和数据 ,并根据指令的要求对数据进行加工处理 ,得到需要的结果后,结束运行。 因此,控制器控制程序的执行过程实际上 是控制指令的执行过程。 由于程序(指令序列)预先存放在存储器中, 所以指令执行的过程分为取指令和执行指令 ,如下图。 假设程序和数据已经存放在主存中,执行 指令执行步骤如下(要求记下来): 根据程序计数器PC的内容从主存中取出一条指 令,放置

3、于指令寄存器IR中。 分析IR中的操作码,决定应执行的操作。 根据IR的地址码取出参加运算的操作数。 对操作数进行运算。 根据IR的地址码把运算结果存放指定地址。 本条指令执行完毕,修改PC内容决定下一条指 令所在的地址。 目前的计算机都属于“同步”计算机。 同步计算机是指在计算机系统中有一个时 钟(Clock),计算机所有的动作都 以这个时 钟为基准。 如下图的单周期波形。指令1指令2指令3指令4一个时钟周期上升沿下降沿 单周期CPU是指一条指令的执行在一个时 钟周期内完成,然后开始下一条指令的执 行,即一条指令用一个时钟周期。5.1 执行一条指令所需的硬件电路 计算机的程序一般存在硬盘等辅

4、存中。当 计算机执行一个程序时,首先由操作系统 把要执行的程序从硬盘调入内存,然后 CPU从内存读出指令开始执行。注意:前 提是操作系统已经调入内存并运行。 设计CPU硬件电路的目的是使其能够从存 储器中读取一条指令并执行指令所描述的 操作,且这个过程是循环的,自动的。 注意 从存储器中读取指令的动作与指令本身的操作 无关,所以可以对所有的指令以同样的方法从 内存中取出。 执行指令则与指令本身的意义密切相关。 因此最重要的是首先要搞清楚CPU要执行 的每一条指令的意义(功能)。 以第5章列出的20条整数指令为例来对每一 条指令的执行进行说明。 指令格式寄存器、立即数、跳转等格式。 指令意义计算

5、、访存、条件转移、无条件转 移等类型。5.1.1 与取指令有关的电路 CPU要执行指令,必须先把它从存储器中读 出来,然后才能知道指令究竟要干什么。 而一般程序是连续执行的,且存放在内存中 也是连续存放的,所以读取并执行本条指令 后,最有可能执行的是在本条件指令后的下 一条指令,即地址+“1”条指令的长度。 注意:这里的“1”是指一条指令所占用的存储空 间。 为了指出下一条指令的位置(地址),最简单 的办法是设置一个计数器用来指定指令的位 置。该计数器称为程序计数器PC(Program Counter)。 CPU取指令时是把PC的内容作为存储器地 址,根据它来访问存储器,从指定的存储 器单元中

6、取出一条指令。 如果取出的指令执行时没有引起转移,则PC的 值要+“1”。 如果转移,则要将目标地址写入PC,以便在下 一个时钟周期取出下一条指令。 下图是与取指令有关的电路。xxxxxxx0: xxxxxxx1: xxxxxxx2: xxxxxxx3: xxxxxxx4: xxxxxxx5: xxxxxxx6: xxxxxxx7:字节地址PC+4指令n指令n+1PC地址P C+a do Inst Mem地址4 0 1 2 3 Clock指令PC+4多路选择器取指令及PC+“1”指令存储器 Inst Mem 说明: PC32位寄存器,由32个D触发器构成。 a是地址输入端。 do数据输出端,即

7、指令。 加法器完成PC+4运算。 多路选择器用于选择地址之一。 为什么要PC+4? 因为这里假定指令的长度是固定的,即32位( 个字节),所以每取一条指令后,PC都要加 才能取互下一条指令。不考虑转移时取指令的流程取指令startInst Mem dataout31:0a31:0 inst31:0inst31:0 pc31:0 mem31:0 alu31:0 resetn data31:0 wmemsccpu_dataflowscinstmemscdatamemclockresetnmem_clkpc31:0inst31:0alu31:0单周期CPU+指令存储器+数据存储器的模块图5.3.3

8、单周期CPU的Verilog HDL代码 下面是单周期计算机的Verilog HDL代码。 它调用 了: 单周期CPU模块sccpu_dataflow 指令存储器模块scinstmeme 数据存储器模块scdatameme 将在稍后讨论控制部分和存储器模块的设 计方法include “sccpu_dataflow.v“ module sccomp_dataflow(clock,resetn,inst,pc,aluout,memout,mem_clk);parameter width=32;input clock,resetn,mem_clk;output width-1:0 inst,pc,a

9、luout,memout;wire width-1:0 data;wire wmem;sccpu_dataflow s(clock,resetn,inst,memout,pc,wmem,aluout,data);scinstmem imem(pc,inst);scdatamem dmem(clock,memout,data,aluout,wmem,mem_clk,mem_clk); endmodule单周期CPU模块的代码sccpu_dataflow.vinclude “scinstmem.v“ include “scdatamem.v“ include “sccu_dataflow.v“ i

10、nclude “mux2x32.v“ include “dff32.v“ include “cla32.v“ include “mux2x5.v“ include “regfile32x32.v“ include “alu32.v“ module sccpu_dataflow(clock,resetn,inst,mem,pc,wmem,alu,data);parameter width=32;input width-1:0 inst,mem;input clock,resetn;output width-1:0 pc,alu,data;output wmem;wire width-1:0 p4

11、,bpc,npc,adr,ra,alua,alub,res,alu_mem;wire 3:0 aluc;wire 4:0 reg_dest,wn;wire 1:0 pcsource;wire zero,wmem,wreg,regrt,m2reg,shift,aluimm,jal,sext,carry_out;wire width-1:0 sa=27b0,inst10:6;wire width-1:0 offset=imm13:0,inst15:0,2b00;sccu_dataflow cu(inst31:26,inst5:0,zero,wmem,wreg,regrt,m2reg,aluc, s

12、hift,aluimm,pcsource,jal,sext);wire e=sextwire 15:0 imm=16e;wire width-1:0 immediate=imm,inst15:0;dff32 ip(npc,clock,resetn, pc);cla32 pcplus4(pc,32h4,1b0,p4,carry_out);cla32 br_adr(p4,offset,1b0,adr,carry_out);wire width-1:0 jpc=p431:28,inst25:0,2b00;mux2x32 alu_b(data,immediate,aluimm,alub);mux2x3

13、2 alu_a(ra,sa,shift,alua);mux2x32 result(alu,mem,m2reg,alu_mem);mux2x32 link(alu_mem,p4,jal,res);mux2x5 reg_wn(inst15:11,inst20:16,regrt,reg_dest);assign wn=reg_dest| 5jal;mux4x32 nextpc(p4,adr,ra,jpc,pcsource,npc);regfile32x32 rf(inst25:21,inst20:16,res,wn,wreg,clock,resetn,ra,data);alu32 alu_unit(

14、alua,alub,aluc,alu,zero); endmodule5.4 控制部分设计 处理器CPU由运算部分(运算器)和控制部分 (控制器)组成。 控制器向计算机中各个部件发出控制信号 ,指挥与协调各个部件工作,使数据沿指 定的路径流动,从而完成整个指令的功能 。 下面的问题是如何发出控制信号,如: pcsource jal 等等5.4.1 控制部分的逻辑设计 首先根据指令中的6位操作码对指令进行译 码,看是什么操作。 如果op=0,则需要再检查6位的func。 如下表所示。指令操作码一览表指令31:26-op 5:0-func指令31:26-op add000000100000addi

15、001000 sub000000100010andi001100 and000000100100ori001101 or000000100101xori001110 xor000000100110lw100011 sll000000000000sw101011 srl000000100010beq000100 sra000000000011bne000101 jr000000001000lui001111 这里以上指令的 op都相同,可以 行计算出来。j000010jal000011 根据上表可以得到以下典型指令的逻辑表达 式(未化简,要保证逻辑表达式的值=1) r_type=op5 01选转移地址 10选寄存器内的地址; 11 选跳转地址 然后现看一下哪些指令使用了上表中的信 号。 根据前面指令执行的过程及所需电路,可 以得到每条指令使用的信号如下表所示。 注:X为未使用。 仅列出add,sra,jr,xori

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号