1.常用时钟激励产生方法
方法一:
initial
begin
clk1=0;
clk2=0;
end
always #20 clk1=~clk1;
always #30 clk2=~clk2;
方法二:
always
begin
#20 clk=0;
#20 clk=1;
end
方法三:
initial
begin
clk=0;
forever #20 clk=~clk;
end
2.同步和异步
异步复位:
always@(posedege clk or negedge reset)
if(!reset)
b<=1'b0;
else
b<=a;
同步复位:
always@(posedge clk)
if(!reset)
b<=1'b0;
else
b<=a;
同步复位信号Reset必须至少长于一个时钟周期clk,否则,这个复位信号引起的变化是不会被检测到的。
同步清零:
module dff(d,clk clr,q);
input d,clk,clr;
output q;
reg q;
always@(posedge clk)
if(!clr)
q<=0;
else
q<=d;
endmodule
异步清零:
module dff(d,clk clr,q);
input d,clk,clr;
output q;
reg q;
always@(posedge clk or negedge clr)
if(!clr)
q<=0;
else
q<=d;
endmodule
小结:
同步复位和异步复位的区别在于前者的复位信号不能出现在always语句的敏感列表中,无论是同步复位还是异步复位,always 语句的结构都是if(!reset)...else...,否则,综合工具将不能正确综合。