1)狀態機的異步置位和復位
異步置位與復位是於時鍾無關的。當異步置位或復位信號來臨時,他們立即分別置觸發器的輸出為1或0,不需要等待時鍾沿的到來。要將他們列入always塊的事件控制信號內就能觸發always的執行。
沿關鍵詞包括posedge(信號上升沿)和negedge(下降沿觸發)的時鍾,信號可以按照任意順序列出。
1)異步高電平有效置位: @(posedge clk or posedge set)
2)異步低電平有效復位: @(posedge clk or negedge set)
2)異步。高電平置位 低電平有效復位: @(posedge clk or posedge set or negedge set)
帶異步高電平有效的置位/復位的D觸發器示例:
1 module dff(data,set,reset,q,clk,qb); 2 input data; 3 input set,reset,clk; 4 output q,qb; 5 reg q,qb; 6 always @(posedge clk or posedge reset or posedge set ) 7 begin 8 if(reset) begin q<=0;qb<=1; end 9 else if(set) begin q<=1;qb<=0;end 10 else begin q<=data; qb<=~data;end 11 end 12 endmodule
2)狀態機的同步置位和復位
同步置位與復位時鍾只有在時鍾的有效跳變沿時刻置位或復位,信號才能使觸發器置位或者復位。因此不能把set和reset信號名列入always塊中,因為他們的變化不能觸發always快執行。
1)同步正跳變沿觸發: @(posedge clk )
2)同步負跳變沿觸發: @(negedge clk)
具有同步高電平有效的置位/復位的D觸發器:
1 module dff(data,set,reset,q,clk,qb); 2 input data; 3 input set,reset,clk; 4 output q,qb; 5 reg q,qb; 6 always @(posedge clk ) 7 begin 8 if(reset) begin q<=0;qb<=1; end 9 else if(set) begin q<=1;qb<=0;end 10 else begin q<=data; qb<=~data;end 11 end 12 endmodule
可見同步D觸發器和異步D觸發器的區別僅僅差別在always塊的敏感列表是否包含置位信號。