时钟信号一般为脉冲方波信号,高低电平交错,所以信号存在上升沿与下降沿,同步置零/置位就是在时钟信号上升沿或下降沿时刻出发的信号。
异步置零/置位不受CLK(时钟信号)的约束。寄存器的输出信号,有的受CLK约束,就是当输入信号改变时,输出信号不立刻改变,需要等到CLK的触发,寄存器的输出信号才会随着之前输入的改变而变化。
区别触发器的同步与异步,要弄清楚计数到条件值时,输出信号是否受CLK的限制。
再就是记住几个常用的,比如160同步161异步之类的。至于置零与置位,就是看到达条件时,数据输入端口是全接地还是有固定的数值。
寄存器一般由同步时钟信号控制,而锁存器一般由电平信号控制。若数据有效滞后于控制信号有效,则只能使用锁存器; 若数据有效提前于控制信号有效,并要求同步操作,则只能使用寄存器。
eg:
异步置1置0,在always后面括号里的敏感事件列表中,将异步置1和触发时钟的条件一并列出。
always@(posedge clk or negedge preset)
if(!preset) //当presets=0时,触发器置1
q<=1'b1;
同步置1置0,在always后面的括号中不列出。
always@(posedge clk)
if(!preset) //在clk的上升沿到来后,如果presets=0,触发器置1.
q<=1'b1;