1、所謂邊沿檢測,就是檢測輸入信號或FPGA內(nèi)部邏輯信號電平的跳變,即實現(xiàn)上升沿或下降沿的檢測,捕獲到以后以此用作使能信號(簡單可理解為:一旦檢測到這個信號,則發(fā)生什么什么),來作為時序邏輯的觸發(fā)信號?傊,在基礎(chǔ)中,這個還是很重要的,在后面的串口和SPI接口中都要用到。 (一)、一級寄存器 從一級寄存器中很好理解下降沿和上升沿的檢測:a和b都是從trigger來的(三者一樣),只是b比a在時間上遲了一個寄存器的時間,F(xiàn)在假設(shè)0時刻到了,trigger到a了,但是還沒有到b,到了寄存器,被寄存了;等待下一個時刻1到來,a走了(不用管了),來了一個新的叫c,同時,b從寄存器得到了之前寄存的,那個現(xiàn)在的1時刻,有了兩個信號,b和c,而且b是前一個時刻的,而c是現(xiàn)在時刻的(誰先誰后這點很重要)。所以: 下降沿 neg_edge = b & ~c; 由上圖可以看出,當(dāng)下降沿來的時候,c取反再與上b,得出輸出為1;反過來想,輸出neg_edge為1的時候就表示檢測到下降沿了。 上升沿 pos_edge = ~b & c; 同理。當(dāng)pos_edge為1,表示檢測到上升沿。 (二)兩級寄存器 moduleedge_tech_design ( clk, rst_n, s, neg_edge, pos_edge ); inputclk; inputrst_n; inputs; outputneg_edge; outputpos_edge; regc,d; always@(posedgeclkornegedgerst_n) if(!rst_n)begin c 在仿真圖中可以看到這樣的圖形(街區(qū)圖中下降沿部分一小段) 輸入信號s從高變成低的時候,出現(xiàn)下降沿,然后等到時鐘clk的上升沿到來,s傳輸?shù)絚,d還沒傳輸?shù),被寄存在d之前的寄存器內(nèi),等待第二個時鐘上升沿到來,寄存器中的信號傳輸?shù)絛了,此時根據(jù) neg_edge = d & ~c; 可以得到neg_edge的波形。 |