异步清零寄存器
工作原理:
CP 不为上升沿,且 RD=1 时,寄存器输出保持不变。
CP 上升沿,且 RD=1 时,输入端 D0-D3 送寄存器,Q0-Q3 输出等于输入,并 保持此数据直到下一个时钟沿到来。
RD=0 时, 异步清零。
寄存器模块代码:
module hardreg(d,clk,clrb,q);
input clk,clrb;
input[3:0] d;
output reg [3:0] q;
always@(posedge clk or negedge clrb)
begin
if(!clrb)
q<=0;// 如果clrb=0就异步清零
else
q<=d;
end
endmodule
testbench代码:
`timescale 1 ns/ 1 ps
`define clock_period 20
module hardreg_tb;
reg clk;
reg clrb;
reg [3:0] din;
wire [3:0] dout;
hardreg hardreg0 (
din,
clk,
clrb,
dout
);
initial clk =1'b1;
always#(`clock_period/2) clk=~clk;
initial begin
clrb=1'b0;
din=4'b1111;
#100
clrb=1'b1;
#100
clrb=1'b0;
#50
din =4'b0001;
#100
clrb =1;
#100
din =4'b0010;
#100
din =4'b0011;
#100
din =4'b0011;
#100
clrb =0;
#35
din =4'b0101;
#100
$stop;
end
endmodule
|