組合邏輯電路與時序邏輯電路

組合邏輯電路:輸出只是當前輸入邏輯電平的函數(有延時),與電路的原始狀態無關的邏輯電路。當輸入信號中的任意一個發生改變時,輸出都有可能變化,但與目前所處的狀態沒有任何關係(即邏輯電路無記憶部件)。

時序邏輯電路:輸出不只是當前輸入的邏輯電平的函數,還與目前電路所處的狀態有關的邏輯電路(即邏輯電路有記憶部件)。

 

組合邏輯電路實現方法:

  1. 組合邏輯語句可以用 assign 語句實現

          assign c=a+b; //加法器

          assign c= ena ? a : b; //數據選擇器

      2. 複雜的組合邏輯最好用 always 塊實現:

由於在 always 塊中可以使用 if、 case 等語句,所以對於複雜的組合邏輯,使用 always語句描述顯得層次更加清楚,可讀性更強。

 

時序邏輯電路的結構特點:
1)時序邏輯電路通常包含組合電路存儲電路兩部分,存儲電路(觸發器)是必不可少的;
2)存儲器的輸出狀態必須反饋到組合電路的輸入端,與外部輸入信號共同決定組合邏輯電路的輸出。

 

時序邏輯電路的分類:
1)按邏輯功能劃分有: 計數器、寄存器、移位寄存器、讀/寫存儲器、順序脈衝發生器等。
2)根據儲存電路中觸發器的動作特點不同分爲: 同步時序電路異步時序電路。 在同步時序電路中,所有觸發器狀態的變化都是在同一時鐘信號操作下同時發生的。在異步時序電路中,觸發器狀態的變化不是同時發生的。
3)根據輸出信號的特點分爲: 米利(Mealy)型穆爾(Moore)型。 在米利型電路中,輸出信號不僅取決於存儲電路的狀態,而且還取決於輸入變量。在穆爾型電路中,輸出信號僅僅取決於存儲電路的狀態。穆爾型電路只是米利型電路的一種特例。

 

always & assign:  

同一Verilog模塊中所有過程塊(如initial/always)、連續賦值語句、實例引用語句都是並行的,前後次序沒有關係。

只有連續賦值語句(assign)和實例引用語句可以獨立於過程塊而存在於模塊的功能定義部分。

always塊內部的語句順序執行,always塊稱爲過程塊,always塊中的語句稱爲順序語句。

在 always 塊中,被賦值的信號都必須定義爲 reg 型,這是由時序邏輯電路的特點所決定的。對於 reg 型數據,如果未對它進行賦值,仿真工具會認爲它是不定態。爲了能正確地觀察到仿真結果,在可綜合風格的模塊中我們通常定義一個復位信號 reset,當 reset 爲低電平時,對電路中的寄存器進行復位。

在 always 塊中,阻塞賦值可以理解爲賦值語句是順序執行的,而非阻塞賦值可以理解爲賦值語句是併發執行的。實際的時序邏輯設計中,一般的情況下非阻塞賦值語句被更多地使用,有時爲了在同一週期實現相互關聯的操作,也使用了阻塞賦值語句。(注意:在實現組合邏輯的 assign 結構中,無一例外地都必須採用阻塞賦值語句。)

僅使用 assign 結構來實現組合邏輯電路,在設計中會發現很多地方會顯得冗長且效率低下。而適當地採用 always 來設計組合邏輯,往往會更具實效。

同一組合邏輯電路分別用 always 塊和連續賦值語句 assign 描述時,代碼的形式大相徑庭,但是在 always 中適當運用 default(在 case 結構中)和 else(在 if…else 結構中),通常可以綜合爲純組合邏輯,儘管被賦值的變量一定要定義爲 reg 型。不過,如果不使用default 或 else 對缺省項進行說明,則易生成意想不到的鎖存器,這一點一定要加以注意。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章