天天看點

複雜時序邏輯電路

1. 時序邏輯電路的基本結構和分類

1-1. 基本結構

時序邏輯電路由組合電路和存儲電路兩部分組成,通過回報回路将兩部分連成一個整體。時序邏輯電路的一般結構如下圖所示。

複雜時序邏輯電路

圖中,X~1~,…,X~n~為時序邏輯電路的輸入信号;Z~1~,…,Z~m~為時序邏輯電路的輸出信号;y~1~,…,y~s~為時序邏輯電路的狀态信号,又稱為組合電路的狀态變量;Y~1~,…,Y~r~為時序邏輯電路中的激勵信号,它決定電路下一時刻的狀态;CP為時鐘脈沖信号,它是同步時序邏輯電路中的定時信号。

若記輸入信号為$\vec{X}$,輸出信号為$\vec{Z}$,激勵信号為$\vec{Y}$,狀态信号為$\vec{y}$,于是上述的4個向量之間的轉換關系可以由下面的三個公式表示:

其中,式1-1.1表達了輸出信号與輸入信号和狀态信号之間的關系,被稱為輸出方程組;式1-1.2表示了激勵信号與狀态信号和輸入信号之間的關系,稱為時序電路的激勵方程;式1-1.3表示了電路從現态到次态的轉換過程,被稱作狀态轉換方程。

在這裡大家可以看到,上面的時序電路又是狀态($\vec{y}$)依賴的,我們常把這樣的電路叫做狀态機。

1-2. 時序邏輯電路的分類

1-2-1. 異步時序電路與同步時序電路

關于這個問題在上一章有過讨論。這裡還要再啰嗦兩句。

可以這樣了解:如果時序電路中個存儲單元的狀态更新不是同時發生的,則這種電路稱為異步時序電路;如果個存儲電路狀态是在同一信号的同一邊沿更新的,就可以稱作同步時序電路。

導緻這種更新不同步的原因可能是:電路的觸發器的時鐘輸入端沒有連接配接在相同的時鐘脈沖上,或者這個電路裡根本就沒有時鐘脈沖。

1-2-2. 米利型和摩爾型電路

關于這個問題的較長的描述将在下一章出現。

2. 幾個典型的時序邏輯電路

多個觸發器在同一時鐘下組合在一起,來儲存相關資訊的電路稱為寄存器。就像觸發器一樣, 寄存器也可以有其它的控制信号。你将了解具有附加控制信号的寄存器的行為。

計數器是廣泛使用的時序電路。在本次實驗中,你将用幾種方法設計寄存器和計數器。 請參考Vivado 教程上關于如何使用Vivado建立工程和驗證電路。

2-1. 可同步重置、載入信号的寄存器

module Register (input [3:0] D, input Clk, output reg [3:0] Q);
  always @(posedge Clk)
    Q <= D;
endmodule      
module Register_with_synch_load_behavior(input [3:0] D, input Clk, 
                                         input load, output reg [3:0] Q);
  always @(posedge Clk)
    if (load)
      Q <= D;
endmodule      
  1. 添加開發闆相對應的XDC檔案,編輯XDC檔案,加入相關的引腳,将 Clk 賦給 SW15,D input 給SW3-SW0,reset 給 SW4, load 給 SW5,Q 給 LED3- LED0。
  2. 把下面這行代碼加入XDC檔案,使SW15 允許被當作時鐘使用。 set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets { clk }];
  3. 綜合你的設計。
  4. 實作你的設計,檢視Project Summary和Utilization table,注意到1個BUFG和 11 個IO被使用了。
  5. 生成比特流檔案,将其下載下傳到Nexys4 DDR開發闆,并驗證功能。