邊沿檢測電路漏檢原因分析
常用結構如下:
module edge_detect1(
input clk,
input signal,
output pe, //上升沿
output ne, //下降沿
output de //雙邊沿
);reg reg1;always@(posedge clk) beginreg1 <= signal;
endassign pe = (~reg1) & signal;
assign ne = reg1 & (~signal);
assign de = pe | ne; // 或 reg1 ^ signalendmodule
對應的電路結構如下
該結構的邊沿檢測模塊,僅使用到1個寄存器,其邊沿輸出通過信號 signal 與前一時刻的 signal 做邏輯運算得到,正因此,其一旦signal信號發生變動,其邊沿信號也會隨之改變,其優點是邊沿信號響應迅速,而缺點是邊沿信號高電平時間小于一個 clk 周期,因此容易出現漏檢。尤其是當信號和時鐘邊沿很接近時,會出現高電平的時間非常短,從而出現誤判
改進方法1:加入寄存器,2級緩存
module edge_detect3(
input clk,
input signal,
output pe, //上升沿
output ne, //下降沿
output de //雙邊沿
);reg reg1,reg_2;always@(posedge clk) beginreg1 <= signal;reg2 <= reg1;
endassign pe = reg1 & (~reg2);
assign ne = (~reg1) & reg2;
assign de = reg1 ^ reg2;endmodule
用這種方式的缺點是會造成檢測邊沿信號延遲一個時鐘周期。