第11章综合设计实例.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第11章综合设计实例

11.2.7 程序计数器   程序计数器用于提供指令地址,以便读取指令,其外部端口如图11.12所示。 图11.12 程序计数器的外部端口   程序计数器的Verilog HDL实现程序如下: module cpu_pcounter(cnt_out,clk,data_in,reset,load); input [12:0] data_in; input clk,reset,load; output [12:0] cnt_out; reg [12:0] cnt_out; always @(posedge clk or reset) if(!reset) cnt_out=13b0; else if(load= =1) cnt_out=data_in; else if(cnt_out= =5b1FFF) cnt_out=13b0; else cnt_out=cnt_out+1; endmodule 11.2.8 地址多路器   地址多路器用于选择输出的地址是程序计数地址还是数据/端口地址,其外部端口如图11.13所示。 图11.13 地址多路器的外部端口   地址多路器的Verilog HDL的实现程序如下: module cpu_admux(addr,pc_addr,ir_addr,fetch); output [12:0] addr; input [12:0] pc_addr,ir_addr; input fetch; if(fetch) addr=pc_addr; else addr=ir_addr; endmodule 11.2.9 时钟发生器   时钟发生器用于生成不同的时钟信号clock、clk2、fetch与alu_clk,其外部端口如图11.14所示。产生的时钟信号clock送往寄存器与状态控制器,时钟信号clk2送往数据控制器与状态控制器,信号fetch送往数据控制器、状态控制器与地址多路器,信号alu_clk送往算术逻辑单元。 图11.14 时钟发生器的外部端口   时钟发生器的Verilog HDL实现程序如下: `timescale 1ns/10ps module cpu_clkg(fetch,clk2,clk,alu_clk); output fetch,clk2,clk,alu_clk; reg fetch,clk2,clk; parameter period=60; assign alu_clk=(fetch|clk2|clk); initial fork clk=0; clk2=1; fetch=1; forever #(period/2) clk=~clk; forever #(period) clk2=~clk2; forever #(2*period) fetch=~fetch; join endmodule 11.2.10 顶层设计模块   上述几节完成了各基本模块的设计,本节用结构建模的方法把它们组成一个顶层模块,由此完成RISC中央处理单元(CPU)的顶层设计。   顶层设计模块程序如下: `timescale 1ns/1ps module cpu_top; wire reset,load_acc,load_ir,load_pc,halt,zero; wire clock,clk2,alu_clock,fetch,inc_pc; wire [15:0] alu_out,acc,data,opcode_iraddr; wire [12:0] addr,ir_addr,pc_addr; wire [2:0] opcode; assign {opcode,ir_addr}=opcode_iraddr; cpu_register accumulator(accum,clock,alu_out,load_acc,reset); cpu_alu alu(alu_out,zero,opcode,data,accum,alu_clock); cpu_datactrl data_ctrl(data,alu_out,fetch,mem_r,clk2); cpu_mem mem(data,addr,mem_r,mem_w); cpu_register instr_register(opcode_iraddr,clock,data,

文档评论(0)

4477704 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档