|
[size=+0]建立2個寄存器,形成二級寄存器。在時鐘觸發(fā)中,首先把被測數(shù)據(jù)送入第一個寄存器中,然后在下一個時鐘上沿到來時,將第一個寄存器中的數(shù)據(jù)存入第二個寄存器,也就是說第二個寄存器中的數(shù)據(jù)始終比第一個寄存器晚一個周期,即晚一個數(shù)據(jù),然后再將第一個寄存器中的數(shù)據(jù)取反與第二個寄存器的數(shù)據(jù)相與,產(chǎn)生的數(shù)存入一個新的寄存器里,這樣產(chǎn)生的結(jié)果是當(dāng)?shù)谝粋寄存器中的數(shù)據(jù)(注意:不是被測數(shù)據(jù))由1變?yōu)?時(即下降沿),就會在新的寄存器里產(chǎn)生一個高電平,并維持一個周期;如果是檢測上升沿,則是將第二個寄存器取反,然后與第一個寄存器值相與,結(jié)果存入新的寄存器中,這樣將會在被測數(shù)據(jù)的上升沿時,新的寄存器里產(chǎn)生一個高電平。
[size=+0]例子:
[size=+0]reg[2:0] key_rst;
[size=+0]always @(posedge clk or negedge rst_n)
if (!rst_n) key_rst <= 3'b111;
else key_rst <= {sw3_n,sw2_n,sw1_n};
[size=+0]reg[2:0] key_rst_r; //每個時鐘周期的上升沿將low_sw信號鎖存到low_sw_r中
[size=+0]always @ ( posedge clk or negedge rst_n )
if (!rst_n) key_rst_r <= 3'b111;
else key_rst_r <= key_rst;
//當(dāng)寄存器key_rst由1變?yōu)?時,led_an的值變?yōu)楦撸S持一個時鐘周期
wire[2:0] key_an = key_rst_r & ( ~key_rst);
[size=+0]
|
|