世间记忆的记录者———寄存器 介绍 在cpu的计算工作中,例如简单的两数相加就需要读取两个数据然后一起送入ALU中进行运算,所以我们就需要一种装置能存储这些数据,这便是寄存器的作用。
引脚图介绍
加载 当输入电平为1时output引脚输出数据,当输入电平为0时寄存器output引脚为高阻抗
保存 当输入电平为1时寄存器接受保存数值引脚的数据并保存其中,为0时保存寄存器内的数据
保存数据引脚 为数据输入引脚
output 受加载引脚控制
始终输出 此引脚始终输出寄存器内的值
功能介绍 由上面的引脚我们可以知道,寄存器有着读入与取出数据,保存数据的功能,下面我们来介绍下寄存器的具体实现。
代码实现 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 module register_pluse ( input reg save_en, input reg load_en, input reg [7 :0 ] data_in, output [7 :0 ] data_out, output [7 :0 ] data_out_always ); reg [7 :0 ] data_reg=8 'b 00000000 ; reg [7 :0 ] data_out_reg=8 'b 00000000 ; assign data_out_always=data_reg; assign data_out=data_out_reg;always @(save_en or load_en or data_in) begin if (save_en) begin data_reg=data_in; end else begin data_reg=data_reg; end if (load_en) begin data_out_reg=data_reg; end else begin data_out_reg=8 'b zzzzzzzz; end end endmodule
modelsim测试 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 `timescale 1ns/1ns module register_pluse_tb;reg save_en=1 'b 0 ; reg load_en=1 'b 0 ;reg [7 :0 ] data_in=8 'b 00000000 ;wire [7 :0 ] data_out;wire [7 :0 ] data_out_always;initial begin #50 data_in=8 'b 00000001 ; save_en=1 'b 1 ; #50 save_en=1'b0 ; #50 load_en=1'b1 ; #50 load_en=1'b0 ; #50 data_in=8 'b 00000011 ; save_en=1 'b 1 ; #50 save_en=1'b0 ; #50 load_en=1'b1 ; #50 load_en=1'b0 ; end register_pluse register_pluse_my( .save_en (save_en), .load_en (load_en), .data_in (data_in), .data_out (data_out), .data_out_always (data_out_always) ); endmodule
结语 寄存器作为cpu中最为基础的单元,其的代码实现最为简单,但是其功能却为重要,其他的单元的工作都要围绕着寄存器展开,我将会在之后的文章中介绍其他的单元,敬请期待。
整点二次元