數位電路根據邏輯功能的不同特點,可以分成兩大類,一類叫組合邏輯電路(簡稱組合電路),另一類叫做時序邏輯電路(簡稱時序電路)。
1.組合邏輯概念
組合邏輯電路在邏輯功能上的特點是任意時刻的輸出僅僅取決於該時刻的輸入,與電路原來的狀態無關,不涉及對訊號跳變沿的處理,無儲存電路,也沒有反饋電路。通常可以通過真值表的形式表達出來。
2.組合邏輯的verilog hdl 描述
根據組合邏輯的電路行為,可以得到兩種常用的rtl 級描述方式。第一種是always 模組的觸發事件為電平敏感訊號列表;第二種就是用assign 關鍵字描述的資料流賦值語句。
(1)always 模組的敏感表為電平敏感訊號的電路
always模組的敏感列表為所有判斷條件訊號和輸入訊號,但一定要注意敏感列表的完整性。在always 模組中可以使用if、case 和for 等各種rtl 關鍵字結構。由於賦值語句有阻塞賦值和非阻塞賦值兩類,建議讀者使用阻塞賦值語句「=」。always 模組中的訊號必須定義為reg 型,不過最終的實現結果中並沒有暫存器。這是由於在組合邏輯電路描述中,將訊號定義為reg 型,只是為了滿足語法要求。
(2)assign語句描述的電路
利用條件符「?」可以描述一些相對簡單的組合邏輯電路,訊號只能被定義為wire型。當組合邏輯比較複雜時,需要很多條assign語句或者多重巢狀「?」,使得**可讀性極差,因此此時推薦第一種組合邏輯建模方式。
3.組合邏輯電路的注意事項
(1)敏感訊號列表
在組合邏輯設計中,讀者必須重點對待敏感訊號列表。敏感訊號列表出現在always塊中,其典型行為級的含義為:只要敏感訊號列表內的訊號發生電平變化,則always模組中的語句就執行一次,因此設計人員必須將所有的輸入訊號和條件判斷訊號都列在訊號列表中。
不完整的訊號列表會造成不同的**和綜合結果,因此需要保證敏感訊號的完備性。如果缺少訊號,則無法觸發和該訊號相關的**程序,也就得不到正確的**結果。如果設計人員在設計中,認為列舉訊號麻煩,則採用下面的語句:always@(*).此時,綜合工具和**工具會自動將所有的敏感訊號自動加入敏感訊號列表。
(2)不要在組合邏輯中引入環路
在組合邏輯中引入環路會導致電路產生振盪、毛刺以及衝突等問題,從而降低設計的穩定性和可靠性,因此要徹底避免環路。
之所以稱邏輯環路是一種高風險設計,其原因如下:
首先,環迴邏輯的延時完全依靠組合邏輯門延遲和佈線延遲。一旦這些傳播時延有所變化,則環路的整體邏輯將徹底失效。
其次,環路的時序分析是個死迴圈過程。目前的eda 開發工具為了計算環路的時序邏輯都會主動割斷時序路徑,引入許多不確定的因素。
1 . 時序邏輯概念
時序邏輯是verilog hdl 設計中另一類重要應用。從電路特徵上看來,其特點為任意時刻的輸出不僅取決於該時刻的輸入,而且還和電路原來的狀態有關。電路裡面有儲存元件(各類觸發器,在fpga 晶元結構中只有d 觸發器)用於記憶資訊,如圖8-7 所示。從電路行為上講,不管輸入如何變化,僅當時鐘的沿(上公升沿或下降沿)到達時,才有可能使輸出發生變化。
(1)在描述時序電路的always塊中的reg型訊號都會被綜合成暫存器,這是和組合邏輯電路所不同的。
(2)時序邏輯中推薦使用非阻塞賦值「<=」。
(3)時序邏輯的敏感訊號列表只需要加入所用的時鐘觸發沿即可,其餘所有的輸入和條件判斷訊號都不用加入,這是因為時序邏輯是通過時鐘訊號的跳變沿來控制的。
2. 競爭與冒險
(1)競爭與冒險概念
訊號在組合邏輯電路內部通過連線和邏輯單元時,都有一定的延時。延時的大小與連線的長短和邏輯單元的數目有關,同時還受器件的製造工藝、工作電壓、溫度等條件的影響。此外,訊號的高低電平轉換也需要一定的過渡時間。由於存在這兩方面因素,多路訊號的電平值發生變化時,在訊號變化的瞬間,組合邏輯的輸出有先後順序,並不是同時變化,往往會出現一些不正確的尖峰訊號,這些尖峰訊號稱為「毛刺」,如果乙個組合邏輯電路中有「毛刺」出現,就說明該電路存在「冒險」。
需要注意的是,冒險訊號的脈衝寬度很小,常常只有數納秒或數十納秒,其頻帶頻寬可達數百兆赫茲或更寬。在板級除錯時,如果示波器的上限頻率較低,會將幅度較大的毛刺顯示為幅度較小的毛刺,甚至不易被察覺。這都是在實際開發中捕獲毛刺應該注意的問題。
冒險按產生形式的不同可以分為靜態冒險和動態冒險兩大類。靜態冒險是指輸入有變化,而輸出不應變化時產生的單個窄脈衝;動態冒險則指的是輸入變化時,輸出也應變化時產生的冒險。動態冒險是由靜態冒險引起的,因此存在動態冒險的電路也存在靜態冒險。
靜態冒險根據產生條件的不同,分為功能冒險和邏輯冒險兩大類。當有兩個或兩個以上輸入訊號同時產生變化時,在輸出端產生毛刺,這種冒險稱為功能冒險。如果只有乙個變數產生變化時出現的冒險則是邏輯冒險。冒險往往會影響到邏輯電路的穩定性。清零和置位埠對毛刺訊號十分敏感,任何一點毛刺都可能會使系統出錯,因此判斷邏輯電路中是否存在冒險以及如何避免冒險是設計人員必須要考慮的問題。
(2)冒險產生的原因
由於動態冒險主要是由靜態冒險引起的,消除了靜態冒險,動態冒險也就自然消除了,因此下面介紹靜態冒險的檢查和消除。
判斷乙個邏輯電路在某些輸入訊號發生變化時是否會產生冒險,首先要判斷訊號是否會同時變化,然後判斷在訊號同時變化的時候,是否會產生冒險,這可以通過邏輯函式的卡諾圖或邏輯函式表示式來進行判斷。
(1功能冒險的檢查
功能冒險是由電路的邏輯功能引起的,只要輸入訊號不是按照迴圈碼的規律變化,組合邏輯就可能產生功能冒險,且不能通過修改設計加以消除,只能通過對輸出採用時鐘取樣來消除。
(2邏輯冒險的檢查
檢查電路是否產生邏輯冒險的方法有兩種,即代數法和卡諾圖法。
① 代數法。如果乙個組合邏輯函式表示式f,在某些條件下能化簡成或的形式,在a產生變化時,就可能產生靜態邏輯冒險。
② 卡諾圖法。在組合邏輯的卡諾圖中,若存在素項圈相切,則可能會產生邏輯冒險。如圖8-16 所示的卡諾圖,ac 和兩個素項環相切,在b = c =1時,a 由1 變為0時,將產生邏輯冒險。
組合邏輯和時序邏輯
組合邏輯和時序邏輯 一 組合邏輯 always 敏感訊號 或者always 組合邏輯相當於組合電路,與或非門組成的電路,其輸出只與當前狀態有關,與其他輸入狀態的函式無關,不涉及訊號跳變處理 組合邏輯競爭冒險 只要輸入訊號同時變化,組合邏輯就必然產生毛刺 二 時序邏輯 always 跳變時鐘 是時序電...
組合邏輯和時序邏輯
根據邏輯電路的不同特點,數位電路可以分為 組合邏輯和時序邏輯。1 組合邏輯 組合邏輯的特點是任意時刻的輸出僅僅取決於該時刻的輸入,與電路原本的狀態無關,邏輯中不牽涉跳變沿訊號的處理,組合邏輯的verilog描述方式有兩種 1 always 電平敏感訊號列表 always模組的敏感列表為所有判斷條件訊...
組合邏輯與時序邏輯
組合邏輯 輸出只是當前輸入邏輯電平的函式 有延時 與電路的原始狀態無關。當前電路輸入訊號任何乙個發生改變,輸出都將發生改變。時序邏輯 輸出不僅是當前輸入電平的函式,還與目前電路的狀態有關。若controlswitch為1,則輸出in訊號,否則輸出0。inout 7 0 bus 定義匯流排wire a...