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;