FPGA中組合邏輯和時序邏輯的區別
組合邏輯電路是具有一組輸出和一組輸入的非記憶性邏輯電路,它的基本特點是任何時刻的輸出訊號狀態僅取決於該時刻各個輸入訊號狀態的組合,而與電路在輸入訊號作用前的狀態無關。
在時序邏輯電路中,任意時刻的輸出訊號不僅和當時的輸入訊號有關,而且還與電路原來的狀態有關,這是時序邏輯電路在邏輯功能上的特點。因而時序邏輯電路必然包含儲存記憶單元電
路。
用哪一種的話看你自己具體有什麼要求,根據你自己的需求來,選一種自己最適合的
=============================================
組合邏輯就是用“與或非”這種基本邏輯單元搭起的,沒有引入時鐘,可能存在競爭冒險。而時序邏輯雖然也用“與或非”這種基本邏輯單元,單在每級都會用鎖存器鎖存資料,引入了時鐘,保證時序。
=============================================
1、簡單說,組合邏輯只跟當前的狀態有關係,例如一根導線 + 邏輯閘的組合,輸出取決於當前時刻的輸入,考慮門延時的話另說。
2、時序邏輯的狀態跟之前狀態、邊沿訊號有關,邊沿訊號沒來之前,輸出保持之前的輸入;邊沿訊號來時,輸出狀態跟隨輸入訊號變化。
組合邏輯:[email protected](敏感訊號)或者[email protected](*),組合邏輯相當於組合電路,與或非門組成的電路,其輸出至於當前狀態有關,與其他輸入狀態的函式無關,不涉及訊號調變處理(組合邏輯競爭冒險:只要輸入訊號同時變化,組合邏輯必然產生毛刺)。
時序邏輯:[email protected](時鐘邊沿)是時序電路,輸出不僅與當前狀態有關,在時鐘跳變時才變化,如D觸發器。
===========================================
數位電路根據邏輯功能的不同特點,可以分成兩大類,一類叫組合邏輯電路(簡稱組合電路),另一類叫做時序邏輯電路(簡稱時序電路)。
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模組中的語句就執行一次,因此設計人員必須將所有的輸入訊號和條件判斷訊號都列在訊號列表中。
不完整的訊號列表會造成不同的模擬和綜合結果,因此需要保證敏感訊號的完備性。如果缺少訊號,則無法觸發和該訊號相關的模擬程序,也就得不到正確的模擬結果。如果設計人員在設計中,認為列舉訊號麻煩,則採用下面的語句:
(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時,將產生邏輯冒險。
---------------------
作者:請叫我小菜雞先生
來源:CSDN
原文:https://blog.csdn.net/github_33678609/article/details/53436213
版權宣告:本文為博主原創文章,轉載請附上博文連結!