Verilog数字系统设计_课程设计报告. 下载本文

reg state;

assign {opcode,ir_addr} = opc_iraddr; always@(posedge clk or negedge rst begin if(~rst

opc_iraddr<=16'b0000_0000_0000_0000; state<=1'b0; end else begin if(ena begin casex(state 1'b0:begin

opc_iraddr[15:8]<=data; state<=1; end 1'b1:begin

opc_iraddr[7:0]<=data;

state<=0; end default:begin

opc_iraddr[15:0]<=16'b0000000000000000; state<=1'b0; end endcase end else state<=1'b0; end end endmodule

2.3.5 指令寄存器测试代码

REGISTER u1 (.data(data,.ena(ena,.clk(clk,.rst(rst,.opcode(opcode,.ir_addr(ir_addr; initial begin ena<=1'b1; clk<=1'b0;

rst<=1'b0;

data<=8'b11111100; end begin

#200 rst<=1'b1; #50 clk<=~clk; end endmodule

2.3.6指令寄存器仿真波形

2.4 累加器 2.4.1 累加器介绍

累加器用于存放当前的结果,它也是双目运算其中一个数据来源。复位后,累加器的值是零。当累加器通过ena口收到来自CPU状态控制器load_acc信号时,在clk时钟正跳沿时就收到来自于数据总线的数据。

2.4.2 累加器symbol

2.4.3 累加器RTL

2.4.4 累加器源代码

module ACCUM(accum,data,ena,clk,rst; input [7:0]data; input ena,clk,rst; output reg [7:0]accum;

always @ (posedge clk or negedge rst begin if(~rst

accum<=8'b00000000;