HDlM2电脑无信号怎么办办

豆丁微信公众号
君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
HDL设备使用配置教程
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口Verilog HDL 复位信号,怎么复位啊?有代码_百度知道
Verilog HDL 复位信号,怎么复位啊?有代码
module test05;
// Outputs
wire [3:0]
// Instantiate the Unit Under Test (UUT)
test5 uut (
.y0(y0)
...
我有更好的答案
单纯从testbench来看的话,似乎是不需要复位信号的。把test05这个模块发上来看一下,也就是被测试模块。
采纳率:90%
为您推荐:
其他类似问题
verilog的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。下载费用:18 文库币 &
assign rom[5'h16]=32'h;//(58) srl r8,r8,15 assign rom[5'h17]=32'h;//(5c)finish: j finish assign rom[5'h18]=32'h;//(60)sum: add r8,r0,r0 assign rom[5'h19]=32'h8c assign rom[5'h08]=32'h20a5ffff;//(20)loop2:addi r5,r5,-1 assign rom[5'h09]=32'h34a8ffff;//(24) ori r8,r5,0xffff assign rom[5'h0a]=32'h;//(28) xori r8,r8,0x5555 assign rom[5'h0b]=5.5.2 指令存储器及测试程序设计 module scinstmem(a,inst); parameter data_width=32; parameter inst_width=32; parameter addr_width=32; input [addr_width-1:0] a; output [inst_width-1:0] inst; wire [data_width-1:0] rmodule scdatamem(clk,dataout,datain,addr,we,inclk,outclk); parameter data_width=32; parameter addr_width=32; input [data_width-1:0] datain; input [addr_width-1:0] addr; input clk,we,inclk,outclk; outp5.5 存储器及测试程序设计 o 5.5.1 数据存储器设计 o 采用使用数组来实现,数据及代码如下。 assign wreg=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; assign regrt=i_addi|i_andi|i_ori|i_xori|i_lw|i_lui; assign jal=i_jal; assign m2reg=i_lw; wire i_addi=~op[5]&~op[4]&op[3]&~op[2]&~op[1]&~op[0]; wire i_andi=~op[5]&~op[4]&op[3]&op[2]&~op[1]&~op[0]; wire i_ori=~op[5]&~op[4]&op[3]&op[2]&~op[1]&op[0]; wire i_xori=~op[5]&~op[4]&op[3]&op5.4.2 控制部件的 Verilog HDL代码 module sccu_dataflow(op,func,z,wmem,wreg,regrt,m2reg,aluc,shift,aluimm,pcsource,jal,sext); input [5:0] op,func; input z; output wreg,regrt,jal,m2reg,shift,aluimm,sext,wmem; o 单周期 CPU控制部件是一个组合电路,所有的输出信号大致分为 3类 : – 多路器的选择信号 – 写使能信号 – ALU操作为控制信号 o 可以对逻辑表达式化简,但不是本课程的主要工作。 指令 z wreg regrt jal m2reg shift aluimm sext aluc[3:0] wmem pcsource[1:0] add x 1 0 0 0 0 0 X x000 0 00 sra X 1 0 0 0 1 0 X
jr X 0 X X X X X X xxxx 0 10 xori X 1 1 0 0 0 1 0 X010 0 00 sw X 0o 然后现看一下哪些指令使用了上表中的信号。 o 根据前面指令执行的过程及所需电路,可以得到每条指令使用的信号如下表所示。 –注: X为未使用。 –仅列出 add, sra, jr, xori, sw, beq, j, jal,其他指令暂未列出。 控制信号 功能 信号值作用 wreg 写寄存器 1—写寄存器, 0—不写 regrt 目的寄存器号是 rt 1—选择 rt, 0—选择 rd jal 子程序调用 1—指令为 jal, 0—不是 m2reg 存储器数据写入寄存器 1—选择存储器数据, 0—选择ALU结果。 shift ALU a使用移位位数 1—使用移位位数, 0—使用寄存器数据 aluimm ALU b使用o 下面开始重要的工作:确认每条指令执行时,控制信号应产生什么值。 o 根据前面分析每条指令的执行过程及所需电路,我们得到了 10个控制信号。如下表所示。 o 根据上表可以得到以下典型指令的逻辑表达式 (未化简,要保证逻辑表达式的值 =1) – r_type=~op[5]&~op[4]&~op[3]&~op[2]&~op[1]&~op[0] – i_add=r_type&func[5]&~func[4]&~func[3]&~func[2]& ~func[1]&~func[0] – i_sra=r_type&~func[5]&~func[4]&~fun指令操作码一览表 指令 [31:26]--op [5:0]--func 指令 [31:26]--op add 000 addi 001000 sub 010 andi 001100 and 100 ori 001101 or 101 xori 001110 xor 110 lw .4.1 控制部分的逻辑设计 o 首先根据指令中的 6位操作码对指令进行译码,看是什么操作。 –如果 op=0,则需要再检查 6位的 func。 o 如下表所示。 5.4 控制部分设计 o 处理器 CPU由运算部分 (运算器 )和控制部分(控制器 )组成。 o 控制器向计算机中各个部件发出控制信号,指挥与协调各个部件工作,使数据沿指定的路径流动,从而完成整个指令的功能。 o 下面的问题是如何发出控制信号,如: – pcsource – jal o 等等 dff32 ip(npc,clock,resetn, pc); cla32 pcplus4(pc,32'h4,1'b0,p4,carry_out); cla32 br_adr(p4,offset,1'b0,adr,carry_out); wire [width-1:0] jpc={p4[31:28],inst[25:0],2'b00}; mux2x32 alu_b(data,imme wire [width-1: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; wire zero,wmem,wreg,regrt,m2reg,shift,aluimm,jal,sext,carry_out; wire [wid单周期 CPU模块的代码 sccpu_dataflow.v `include "scinstmem.v" `include "scdatamem.v" `include "sccu_dataflow.v" `include "mux2x32.v" `include "dff32.v" `include "cla32.v" `include "mux2x5.v" `include "regfile3`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,aluout,memout; wire [width-1:5.3.3 单周期 CPU的 Verilog HDL代码 o 下面是单周期计算机的 Verilog HDL代码。它调用 了: –单周期 CPU模块 sccpu_dataflow –指令存储器模块 scinstmeme –数据存储器模块 scdatameme o 将在稍后讨论控制部分和存储器模块的设计方法 inclk outclk addr[31:0] datain[31:0] we > dataout[31:0] a[31:0] o 从概念上讲, CPU并不包括存储器。如果将指令存储器和数据存储器抽出来,并把CPU部分用一个器件符号表示,则可得到下图所示的结构。 o 最好称为单周期计算机 (sc,Single cycle)。 P C + a do Inst Mem 4 0 1 2 3 Clock p4 pcsource 单周期 CPU+指令存储器 +数据存储器的总体电路 Control Unit op rs we rna qa rnb Regfile wn qb d rt aaluc z ALU r b aluc wreg sa func 0 5.3.2 单周期 CPU总体电路 o 综合以上讨论的各种情况,可以得到如下图所示的单周期 CPU的总体电路。 o 该电路必须能够执行前面列出的 20条指令。 P C + a do Inst Mem 4 0 1 2 3 Clock p4 pcsource 寄存器堆输入端 d的 3个数据源 Control Unit op rs we rna qa rnb Regfile wn qb d rt aaluc z ALU r b aluc wreg sa func 0 1 shift ro 实现 –数据来源使用 2个 2选 1的多路器从三个数据源中选出一个。多路选器的选择信号分别为m2reg和 jal。 –由于 jal指令总是把返回地址写入 r31(11111b),因此在电路中增加了一个小模块 f,该模块的功能如下: o assign wn=reg_dest | { 5{jal} } o 电路图如下。 4、寄存器堆的 d输入端 o 以下面 3条指令为例说明。 – add rd,rs,rt ; rd<--rs+rt – lw rt,offset(rs) ; rt<--mem(rs+offset) – jal address ; r31<--pc+4,pc<--address<<2 o 这里主要看写入寄存器堆: –数据来源 ----ALU输出 or mem P C + a do Inst Mem 地址 4 0 1 2 3 Clock 指令 p4 pcsource ALU输入端 b的 2个数据源和寄存器堆输入端 wn的 2个数据源 Control Unit op rs we rna qa rnb wn d qb rt Regfile a aluc z ALU r b aluc wo 因此使用了一个 2选 1的多路选择器从 2个数据源中选择 1个送到 ALU的 b输入端。控制信号为 aluimm。 o 使用了一个 2选 1的多路选择器从 2个数据源中选择1个送到寄存器堆的 wn端。控制信号为 regrt。 o 控制信号 aluimm和 regrt的设置如下。 regrt 条件 0 add|| sub ||and||or||xor 1 addi || andi || 3、 ALU的 b输入端和寄存器堆的 wn输入端 o 以下面 2条指令为例说明。 – add rd,rs,rt ;rd<--rs+rt – addi rt,rs,imm ;rt<--rs+imm(符号扩展 ) o 从上面注释中可以看出, – rs是相同的,送入 ALU的 a输入端。 – add指令的 rt数据要送到 ALU的 b输入端, addi指令的 imm (符P C + a do Inst Mem 地址 4 0 1 2 3 Clock 指令 p4 pcsource ALU输入端 a的 2个数据源 Control Unit op rs we rna qa rnb wn d qb rt Regfile a aluc z ALU r b aluc wreg sa func 0 1 so 因此使用了一个 2选 1的多路选择器从 2个数据源中选择 1个送到 ALU的 a输入端。 o 控制信号 shift的设置如下。 shift 条件 0 add|| sub ||and||or||xor 1 sll || srl || sra 2、 ALU的 a输入端 o 控制信号 shift o 以下面 2条寄存器操作指令为例说明。 – add rd,rs,rt ;rd<--rs+rt – sll rd,rt,sa ;rd<--rt<<sa o 从上面的注释中可以看出, rd,rt是相同的,而 rs,sa是不同的。 o 根据前面设计的 ALU32可知,移位运算时, sa是从 a输入端输入,寄存器算术逻辑时P C + a do Inst Mem 地址 4 0 1 2 3 Clock 指令 p4 pcsource 下一条指令地址选择 (4个数据源 ) Control Unit op rs we rna qa rnb wn d qb rt Regfile a aluc z ALU r b aluc wreg imm e sext o 下面的问题是如何形成 pcsource? o 根据前面的表格,可以得到如下 pcsource形成的表格。 o 注:助记符为 op的二进制代码相与为 1。 pcsource 编码 条件 计算地址 00 顺序 || beq&&rs!=rt ||bne&& rs==rt pc<--pc+4 01 beq&&rs==rt ||bne&& rs!=rt pc<--pc+4+imm<<2(符号扩指令 转移条件 计算地址 pcsource编码 顺序 pc<--pc+4 00 beq rs==rt pc<--pc+4+imm<<2(符号扩展 ) 01 rs!=rt pc<--pc+4 00 bne rs!=rt pc<--pc+4+imm<<2(符号扩展 ) 01 rs==rt pc<--pc+4 00 jr pc<--rs 10 j pc<--{p4[31:28],(addres1、下一条指令地址的选择 o 控制信号 pcsource o 除程序不转移时下一条指令的地址是 PC+4外,还有 5条指令会引起程序转移。 –beq/bne rs,rt,label #if…pc< --label – jr rs #pc<--rs – j/jal address #pc<--address*4 5.3.1 多路选择器的使用 o 通过前面介绍的每一条指令执行时所需的硬件电路。有些部件的输入源不止一个,解决这种输入源冲突问题的办法是使用 多路选择器 。 o 从前面的电路图可以看出: – rs是从 regfile中取出数据,送入 ALU的 a输入端。 – rt是从 regfile中取出数据,送入 ALU的 b输入端。 –结果是写入 regfile中的 wn指定的寄存器。 o 下面介5.3 数据路径设计 o CPU的电路包括 –数据路径 or 数据通路 (Datapath) –控制部件 (Control Unit) o 本节介绍单周期 CPU的总体数据路径,并给出代码。 5.2.3 功能描述风格的寄存器堆 Verilog HDL代码 module regfile32x32(rna,rnb,d,wn,we,clk,clrn,qa,qb); parameter data_width=32; parameter addr_width=5; parameter r_number=32; input [addr_width-1:0] rna,rnb,wn; input [d[31:0] q[31:0][31:0] e[31:0] > clrn n[4:0] e[31:0] ena a[31:0][31:0] y[31:0] s[4:0] o 除 r0=0外,每一个寄存器由 32个 D触发器构成,它包括数据端 d,时钟信号 clk,使能信号 e,清零信号 clrn(rst),输出信号 q。 o 由于有 32个寄存器可供选择,所以必须有一个 5-32的译码器 dec5e和一个 32位的 32选1的多路选择器 mux32x32。 o 这里 32个 32位的寄存器堆的输出采用二维数组来描述。 – q[31:0][31:0]----最o 寄存器堆的电路符号及各信号的意义如下图所示。 rna[4:0] qa[31:0] rnb[4:0] qb[31:0] wn[4:0] d[31:0] we clrn Regfile 读端口o 从表中可以看出 –读数端口最多需要 2个。 –写数端口最多需要 1。 –给出的寄存器地址最多需要 3个。 – r0=0。 o 此外还给出下列信号 –清零信号 clrn----低电平有效。 –时钟信号 clk----上升沿有效。 –寄存器的写使能 we----we=0,读; we=1,写。 从寄存器堆中读写数据个数一览表 指令类型 读出数据个数 写入堆中数据个数 算术逻辑运算类指令 2 1 移位类指令 1 1 置高位指令 1 1 立即数运算类指令 1 1 读数指令 1 1 存数指令 1 1 条件转移 2 子程序调用 1 子程序返回 1 5.2 寄存器堆设计 o MIPS指令格式中的寄存器号 (地址 )有 5位,所以共有 32个寄存器。这些寄存器“堆在一起”构成一个寄存器堆 (Register File)。 o 如何设计这个寄存器堆? o 当然是根据前面指令的执行流程来设计,下面列表说明。 address op P C + a do Inst Mem 地址 4 0 1 2 3 Clock 指令 p4 pcsource 执行 jr指令所需的电路 Control Unit op we rna qa rnb wn d qb Regfile wreg rs jr指令执行流程 start Regfile<--IR(rs) pcsource=11 Mux4x32<--regfile(rs) end pc<--rs address op P C + a do Inst Mem 地址 4 0 1 2 3 Clock 指令 p4 pcsource 执行 jal指令所需的电路 Control Unit op we rna qa rnb wn d qb Regfile wreg addr 31 << 4 28 32 jal指令执行流程 start r31<--pc+4 mux4x32<--{p4[31:28],(address<<2)[27:0]} pcsource=11 end r31<--pc+4 pc<--{p4[31:28],(address<<2)[27:0]} address op P C + a do Inst Mem 地址 4 0 1 2 3 Clock 指令 p4 pcsource 执行 j指令所需的电路 Control Unit op addr << 4 28 32 j指令执行流程 start mux4x32<--{p4[31:28],(address<<2)[27:0]} pcsource=11 end pc<--{p4[31:28],(address<<2)[27:0]} o 从上面分析可以看出, PC的来源又增加了二个: – pc<--{p4[31:28],(address<<2)[27:0]} – pc<--rs o 故 pcsource又要赋予新的意义: – pcsource=11: pc<--{p4[31:28],(address<<2)[27:0]} – pcsource=10: pc<--rs o 下面画出每条指令的流程图 5.1.6 跳转和子程序调用与返回类型指令执行时所需电路 o 无条件转移指令也能改变程序执行的流程,且是无条件的。 o 指令格式 o 有 3条 – j指令功能: pc<--{p4[31:28],(address<<2)[27:0]} – jal指令功能: r31<--pc+8, pc<--{p4[31:28 ],(address<<2)[27:0]} – jr指令功能: pc<--rimm rt rs op P C + a do Inst Mem 地址 4 0 1 2 3 Clock 指令 p4 pcsource 执行条件转移类型指令所需的电路 Control Unit op rs we rna qa rnb wn d qb rt Regfile a aluc z ALU r b aluc wreg imm e se条件转移型指令执行流程 start Regfile<--IR(rs) Regfile<--IR(rt) Read b<--Regfile(rs) a<--Regfile(rt) aluc<-- decode(op) mux4x32<--p4+imm<<2 (符号扩展) end beq:if(rs==rt) pc<--p4+imm<<2(符号扩展 ) bne:if(rs!=rt) pc<--p5.1.5 条件转移型指令执行时所需电路 o 指令格式 o 条件转移指令这里只讲 beq和 bne,功能如下: – beq----if(rs==rt) PC<--pc+4+imm<<2(符号扩展 ) – bne----if(rs!=rt) PC<--pc+4+imm<<2(符号扩展 ) o PC的来源有 2个: – 一个是 PC+“1”。 – 另一个是 pc+4+imm<<2(符号扩o 注意 –由于这里讨论的是单周期 CPU的设计,所以需要 2个分开的存储器模块,即指令存储器和数据存储器。 o 如果使用一个存储器模块且存储器模块只有一个访问端口,就无法在一个时钟周期既读取指令,又访问数据。 –这里暂且“认为” 2个存储器模块是 2个 Cache模块。 imm rt rs op P C + a do Inst Mem 地址 4 0 1 2 3 Clock 指令 p4 pcsource 执行访问存储器类型指令所需的电路 Control Unit op rs we rna qa rnb wn d qb rt rt Regfile a aluc ALU z b aluc wre访问存储器类型指令执行的流程 start Regfile<--IR(rs) Read b<--IR(imm, 扩展 ) a<--Regfile(rs) aluc<--decode(op) Regfile<--IR(rt) d<--mem(addr) write end lw:rt<--memory(rs +imm(扩展 )) sw: memory(rs +imm(扩展 )) <-- rt Rea5.1.4 访问存储器类型的指令执行时所需电路 o 访问存储器的指令格式 o 有 2条: – 读指令 (lw)----从数据存储器中读数据,写入由 rt指定的寄存器中。 – 写指令 (sw)----把 rt寄存器的数据写入存储器中。 o 共同点是都要计算 存储器地址。 o 操作数来源: – 一个数是使用 rs从寄存器堆中读出的。 – 另一个数是把指令中的 16位立即数 imm进行 o 从上面可以看出, b输入端为 imm,再加上算术逻辑类型指令的输入,所以 b输入端的前面也必须有一个二选一的多路选择器 。 o 符号扩展和零扩展是通过组件 e来实现的。 – sext=1,符号扩展。 – sext=0,零扩展。 o 计算结果写入由 rt指定的寄存器中。 immediate rt rs op P C + a do Inst Mem 地址 4 0 1 2 3 Clock 指令 PC+4 pcsource 执行立即数计算类型指令所需的电路 Control Unit op rs we rna qa rnb wn d qb rt rt Regfile a aluc ALU z b 立即数计算类型指令执行流程 start Regfile<--IR(rs) Read b<--IR(imm, 扩展 ) a<--Regfile(rs) aluc<--decode(op) Regfile<--IR(rt) d<--alu write end rt<--rs op imm(扩展 ) lui: rt<--imm<<16 5.1.3 立即数计算类型指令执行时所需的电路 o 指令格式 o 包括 addi, andi, ori, xori和 lui,由 op进行区分。 o 共同特点是 ALU的操作数 b来自于立即数。 o 由于立即数只有 16位,所以需要扩展到 32位 (符号位扩展 or 零扩展)。 immediate rt rs op o 由于 sa只有 5位,而 a输入端是 32位,所以把 sa必须放在低位,高 27位可以是任何数据。 o 将上面 2个电路结合在一起,只需要 在 ALU的 a输入端前加一个二选一的多路选择器 即可。具体是选择 qa还是 sa,由取出来的指令确定。 func sa rd rt 0 op 执行寄存器移位类型指令所需的电路 P C + a do Inst Mem 地址 4 0 1 2 3 Clock 指令 PC+4 pcsource Control Unit op func rs we rna qa rnb wn d qb rd rt Regfile a aluc ALU z b 寄存器移位类型指令执行流程 start Regfile<--IR(rt) Read a<--IR(sa) b<--Regfile(rt) aluc<--func Regfile<--IR(rd) d<--alu write end rd<--rt shift sa 寄存器移位类型指令 o 寄存器移位类型指令格式 o 其中 sa指定了移位的位数。 o 功能:把从寄存器 rt中读出的 32位数据进行左移或右移 sa位后,结果写入由 rd指定的寄存器。 o 移位的方向由 func决定。 func sa rd rt 0 op 5 0 10 6 15 11 20 16 25 o 说明 – Control Unit的输入信号是 op和 func,输出信号: o ALU的操作控制码 aluc o 计算结果是否写入寄存器堆的控制信号 wreg o 下一条指令的地址选择信号 pcsource – ALU结果写入的寄存器由 rd指定。 o 有关 Control Unit的具体设计将在后面描述。 func 0 rd rt rs op P C + a do Inst Mem 地址 4 0 1 2 3 Clock 指令 PC+4 pcsource 执行寄存器算术逻辑类型指令所需的电路 Control Unit op func rs we rna qa rnb wn d qb rd rt Regfile a aluc ALU z b寄存器算术逻辑运算类型指令执行流程 rd<--rs op rt start Regfile<--IR(rs) Regfile<--IR(rt) Read a<--Regfile(rs) b<--Regfile(rt) aluc<--func Regfile<--IR(rd) d<--alu write 表示将指令中的rs部分的代码送到寄存器堆 end 寄存器算术逻辑类型指令 o 寄存器算术逻辑类型指令格式 o 从指令中可以看出,寄存器堆的数目为 25= 32个 o 所以 rd, rt, rs是从这 32个寄存器堆中选择一个。 o 功能:从寄存器堆中读出的 2个数据 (由 rs,rt指定 )分别被送到 ALU的 a和 b的输入端,结果存入由 rd指定的寄存器中。 func 0 rd rt rs op 5 0 10 o 下面分类来说明每类指令的执行过程及所需的电路。先说明寄存器计算类指令。 – add, sub, and, or, xor--这 5条 寄存器算术逻辑类型指令 除了运算不同外,其他操作均相同。 – sll, srl, sra-- 寄存器移位类型指令 除了移位方向不同外,其他操作均相同。 分析指令类型的流程 取指令 (已讲 ) 分析指令类型 寄存器 算术逻辑 寄存器 移位 立即数 置高位、加法 立即数 逻辑运算 条件转移 无条件转移 5.1.2 寄存器计算类型指令执行时所需的电路 o 指令从存储器取出来后,要进行分析,分析该指令的操作什么?操作数如何获取?等等。 o 根据设定的指令,可以画出分析指令类型的流程图如下。 不考虑转移时取指令的流程 取指令 start Inst Mem<--PC Read PC<--PC+4 Data out …… o 说明: – PC-- 32位寄存器,由 32个 D触发器构成。 – a--是地址输入端。 – do--数据输出端,即指令。 –加法器--完成 PC+4运算。 –多路选择器--用于选择地址之一。 o 为什么要 PC+4? –因为这里假定指令的长度是固定的,即 32位 (4个字节 ),所以每取一条指令后, PC都要加4才能取互下一条指令。 xxxxxxx0: xxxxxxx1: xxxxxxx2: xxxxxxx3: xxxxxxx4: xxxxxxx5: xxxxxxx6: xxxxxxx7: 字节 地址 PC+4 指令 n 指令 n+1 PC 地址 P C + a do Inst Mem 地址 4 0 1 2 3 Clock 指令 PC+4 多路选择器 取指令及 PC+“1” 指令存储器 Inst Mem o CPU取指令时是把 PC的内容作为存储器地址,根据它来访问存储器,从指定的存储器单元中取出一条指令。 –如果取出的指令执行时没有引起转移,则 PC的值要 +“1”。 –如果转移,则要将目标地址写入 PC,以便在下一个时钟周期取出下一条指令。 o 下图是与取指令有关的电路。 5.1.1 与取指令有关的电路 o CPU要执行指令,必须先把它从存储器中读出来,然后才能知道指令究竟要干什么。 o 而一般程序是连续执行的,且存放在内存中也是连续存放的,所以读取并执行本条指令后,最有可能执行的是在本条件指令后的下一条指令,即地址 +“1”条指令的长度。 –注意:这里的 “1”是指一条指令所占用的存储空间。 o 为了指出下一条指令的位置 (地址 ),最简单的办法是设置一个o 注意 –从存储器中读取指令的动作与指令本身的操作无关,所以可以对所有的指令以同样的方法从内存中取出。 –执行指令则与指令本身的意义密切相关。 o 因此最重要的是首先要搞清楚 CPU要执行的每一条指令的意义 (功能 )。 o 以第 5章列出的 20条整数指令为例来对每一条指令的执行进行说明。 –指令格式 —寄存器、立即数、跳转等格式。 –指令意义 —计算、访存、条件转移、无条件转移等5.1 执行一条指令所需的硬件电路 o 计算机的程序一般存在硬盘等辅存中。当计算机执行一个程序时,首先由操作系统把要执行的程序从硬盘调入内存,然后CPU从内存读出指令开始执行。注意:前提是操作系统已经调入内存并运行。 o 设计 CPU硬件电路的目的是使其能够从存储器中读取一条指令并执行指令所描述的操作,且这个过程是循环的,自动的。 o 目前的计算机都属于“同步”计算机。 o 同步计算机是指在计算机系统中有一个时钟 (Clock),计算机所有的动作都 以这个时钟为基准。 o 如下图的单周期波形。 指令 1 指令 2 指令 3 指令 4 一个时钟周期 上升沿 下降沿 o 单周期 CPU是指一条指令的执行在一个时钟周期内完成,然后开始下一条指令的执行,即一条指令用一个时钟周期。 o 假设程序和数据已经存放在主存中,执行指令执行步骤如下 (要求记下来 ): –根据程序计数器 PC的内容从主存中取出一条指令,放置于指令寄存器 IR中。 –分析 IR中的操作码,决定应执行的操作。 –根据 IR的地址码取出参加运算的操作数。 –对操作数进行运算。 –根据 IR的地址码把运算结果存放指定地址。 –本条指令执行完毕,修改 PC内容决定下一条指令所在的地址。 o 由于程序 (指令序列 )预先存放在存储器中,所以指令执行的过程分为取指令和执行指令,如下图。 ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ 处理器的工作过程简介 o CPU的执行过程: 首先将程序和数据输入计算机的存储器中,然后从主存中“程序入口 (程序执行的第一条指令的地址 )”开始依次取出指令和数据,并根据指令的要求对数据进行加工处理,得到需要的结果后,结束运行。 o 因此,控制器控制程序的执行过程实际上是控制指令的执行过程。
文档加载中……请稍候!
下载文档到电脑,查找使用更方便
18 文库币 &&0人已下载
还剩页未读,继续阅读
<a href="UserManage/CopyrightAppeal.aspx?bid=1809685" title="版权申诉" class="fLeft works-manage-item works-manage-report" target="_blank"
关&键&词: 周期 CPU 及其 VERILOG_HDL 实现
& 技术文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
本文标题:HDL实现 链接地址:
当前资源信息
编号: 44144
类型: 共享资源
格式: PPT
大小: 1.38MB
上传时间:
&& 盗版或侵权
&& 标题与内容不符合
&& 文档归类错误
&& 色情、淫秽、低俗信息
&& 反政府、反人类、反社会等反动信息
&& 散布赌博、暴力、凶杀、恐怖或者教唆犯罪等信息
&& 侮辱、诽谤等人身攻击信息
&& 散布谣言、扰乱社会秩序,破坏社会稳定等信息}

我要回帖

更多关于 宽带电视无信号怎么办 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信