FPGA入門到精通 發表於 2021-01-06 17:07:22
時間的重要性不言而喻,加上時間這個維度就如同X-Y的平面加上了一個Z軸,如同打開了一個新的世界。所以今天我們就要來聊聊時序電路。
在時序電路中,電路任何時刻的穩定狀態輸出不僅取決於當前的輸入,還與前一時刻輸入形成的狀態有關。是不是有點繞?這樣,下次當你和對象吵架時,她把以前各種舊帳翻出來一起算的時候,你別急著還嘴,趕緊趁機溫習一下時序電路的概念,也許你想著想著就笑了。
總之……時序電路是有記憶功能的,因此可以設計成儲存電路用來保存信息。常用的存儲電路有兩類:一類採用電平觸發,我們稱為鎖存器(Latch);另一類通過邊沿信號觸發,也就是觸發器(Flip-flop)。中文譯法經常有一種不明覺厲的感覺有木有。 事實上,觸發器的工作原理並不複雜。首先我們來看圖1。
圖1 D觸發器框圖和內部門電路結構
圖1所示的是一個D類觸發器的框圖和內部門電路結構。框圖中輸入端的三角形代表著時鐘信號邊沿觸發方式。同學們可以通過門電路結構研究D類觸發器的工作原理,在這裡我們直接給出它的狀態特性表:
CLK D Q Q』 X X X Q X 0 0 0 ↑ 0 1 1 ↑ 1 0 0 ↑ 1 1 1
其中,向上的箭頭表示時鐘信號從低升至高電平時觸發有效;反之,從高電平降至低電平的邊沿觸發方式則由向下的箭頭表示。現在我們給出D類觸發器的Verilog代碼:
module dff2 ( input clk,d, output reg q, output wire qbar ); assign qbar = ~q; always @(posedge clk) // 只有clk上升沿時刻觸發 q <= d; // 只有當觸發生效時,才將d的值賦予給q endmodule 上述代碼的意思差不多等效於:你不起床就別想讓我起床。就算你起床了,如果沒把早餐做好,我還是不起床。 現在,我們已經有了代碼,如何在小腳丫上進行實驗呢?其他的好說,問題是我們要處理一下時鐘信號的問題,也就是代碼中的clk變量。
通常,輸入變量clk直接會被指定到小腳丫的板載時鐘信號上。不過,小腳丫的固定時鐘信號頻率為12兆赫茲,比人眼能分辨出的頻率快近幾十萬倍,所以我們根本不可能觀察到任何變化。 在我們學習時鐘分頻之前,觀察本次實驗的最好辦法,就是通過手動時鐘信號。因此,我們將變量分配至小腳丫的以下管腳:
變量 小腳丫元件 FPGA管腳 clk SW1 J12 d SW4 H13 q L1 N15 qbar L2 N14
理論上說,將上述程序及管腳分配導入至小腳丫後,可以通過調節開關SW1和SW4來觀察q和qbar的狀態(L1和L2)。 我知道很多人手裡沒有小腳丫,並且也懶得去www.stepfpga.com上購買,所以我就拋一個問題讓大家隔空思考一下(才知道微信把公眾號留言功能給關閉了):假如說,這個程序在仿真上的結果是正確的,但是導入小腳丫之後就不正常工作了,你覺得會是什麼原因?
責任編輯:xj
原文標題:基於FPGA的數字電路實驗5:時序電路之觸發器
文章出處:【微信公眾號:FPGA入門到精通】歡迎添加關注!文章轉載請註明出處。
打開APP閱讀更多精彩內容
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴