1、寄存器
理解:由D触发器构成,每当有上升沿或者下降沿时,数据就从输入端到达输出端。还具有复位清零的功能,包括异步复位、同步复位。
异步复位:不需要等待上升沿或下降沿的到来,只要复位按键按下输出端就输出0
同步复位:在上升沿或者下降沿到来时,如果复位按键按下,才输出0
------------——————————--------同步复位-----------------------------------------------
module register( input clk, input din, input rst, output reg dout ); always@(posedge clk ) begin if(rst==1'b0) dout<=1'b0; else dout <= din; end endmodule
testbench仿真
`timescale 1ns / 1ps module register_tb( ); reg clk; reg din; reg rst; wire dout; register register_tb( .clk(clk), .din(din), .rst(rst), .dout(dout) ); initial begin clk=0; din=0; rst=1; #200 $stop; end always #5 clk=~clk; always #10 rst=~rst; always #20 din<=din+1; endmodule
在vivado中进行仿真,结果
————————————————————异步复位——————————————————
module register(
input clk,
input rst,
input din,
output reg out
);
always@(posedge clk or rst)
begin
if(rst == 1'b0)
out <= 1'b0;
else
out <= din;
end
endmodule
testbench
`timescale 1ns / 1ps
module register_tb(
);
reg clk;
reg din;
reg rst;
wire dout;
register register_tb(
.clk(clk),
.din(din),
.rst(rst),
.dout(dout)
);
initial
begin
clk=0;
din=0;
rst=1;
#200
$stop;
end
always #5 clk=~clk;
always #10 rst=~rst;
always #20 din<=din+1;
endmodule
仿真结果
————————————————既异步置位又异步复位————————————————
设置复位的优先级高,rst和set都是低电平有效
1、当rst=0,set=1时,输出为0
2、当rst=1,set=0时,输出为1
3、当rst=1,set=1时,输出为din
4、当rst=0,set=0时,都有效,看优先级高的那个
module register(
input clk,
input rst,
input din,
input set,
output reg dout
);
always@(posedge clk or rst or set)
begin
if(rst == 1'b0)
dout <= 1'b0;
else if(set == 1'b0)
dout <= 1'b1;
else
dout <= din;
end
endmodule
testbench
`timescale 1ns / 1ps
module register_tb(
);
reg clk;
reg din;
reg rst;
reg set;
wire dout;
register register_tb(
.clk(clk),
.din(din),
.rst(rst),
.set(set),
.dout(dout)
);
initial
begin
clk=0;
din=0;
set=1;
rst=1;
#200
$stop;
end
always #5 clk=~clk;
always #10 rst=~rst;
always #15 set=~set;
always #20 din<=din+1;
endmodule
仿真结果