Verilog HDL基礎教程之:組合邏輯電路的實現

2020-12-27 電子產品世界

數字邏輯電路分為兩種,分別是組合邏輯與時序邏輯。

本文引用地址:http://www.eepw.com.cn/article/189531.htm

(1)組合邏輯:輸出只是當前輸入邏輯電平的函數(有延時),與電路的原始狀態無關的邏輯電路。也就是說,當輸入信號中的任何一個發生變化時,輸出都有可能會根據其變化而變化,但與電路目前所處的狀態沒有任何關係。其中組合邏輯是由與、或、非門組成的網絡。常用的組合電路有:多路器、數據通路開關、加法器、乘法器等。

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

時序邏輯由多個觸發器和多個組合邏輯塊組成的網絡,常用的有:計數器、複雜的數據流動控制邏輯、運算控制邏輯、指令分析和操作控制邏輯等。同步時序邏輯是設計複雜的數字邏輯系統的核心。時序邏輯藉助於狀態寄存器記住它目前所處的狀態。在不同的狀態下,即使所有的輸入都相同,其輸出也不一定相同。

assign語句實現組合邏輯

組合邏輯電路可以用assign語句實現,例如:

例1:assign加法器。

wire a,b,c;

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

例1實現的是一個簡單的加法器,assign語句也可以實現複雜一些的組合邏輯電路,例如:

例2:assign選擇器。

wire a,b,c;

wire ena;

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

例2實現的是一個數據選擇器。如果組合邏輯比較複雜,用assign語句書寫就會比較繁瑣,可讀性較差。例如用assign語句實現一個8選1數據選擇器,如下所示:

例3:assign 8選1選擇器。

wire a0,a1,a2,a3,a4,a5,a6,a7,b;

wire [2:0] addr;

assign b = //8選1數據選擇器

(addr == 3』d0) ? a0 :(addr == 3』d1) ? a1 :

(addr == 3』d2) ? a2 :(addr == 3』d3) ? a3 :

(addr == 3』d4) ? a4 :(addr == 3』d5) ? a5 :

(addr == 3』d6) ? a6 : a7;

//在該表達式中,當addr不等於d0~d6時,b等於a7

//當addr等於d6時,b等於a6;當addr等於d5時,b等於a5,且優先級

//高於addr等於d6時的情況,依次類推

所以複雜的組合邏輯電路最好用always塊實現。

從上面的幾個例子可以看出,使用assign語句描述組合邏輯電路時,格式為:

assign 輸出變量 = 輸入變量之間的運算結果;

always塊實現組合邏輯

組合邏輯電路也可以用assign語句實現,例如:

例4:always加法器。

wire a,b,c;

always @ (a or b) //當a和b有變化時,觸發加法器操作

c = a + b;

上面這個例子實現了一個加法器,如果需要實現一個數據選擇器,可以書寫如下:

例5:always選擇器。

wire a,b,c;

wire ena;

always @ (a or b or ena) //當a、b和ena有變化時,進行下列操作

if(ena == 1』b0) c = b;

else c = a;

如果想實現一個比較複雜的組合邏輯電路,例如:

例6:always8選1選擇器。

wire a0,a1,a2,a3,a4,a5,a6,a7,b;

wire [2:0] addr;

always @ (a0 or a1 or a2 or a3 or a4 or a5 or a6 or a7 or addr) begin

case(addr) //使用case語句實現8選1數據選擇器

3』d0: b = a0; //只有當a0~a7以及addr有變化時,才觸發case的操作

3』d1: b = a1;

3』d2: b = a2;

3』d3: b = a3;

3』d4: b = a4;

3』d5: b = a5;

3』d6: b = a6;

3』d7: b = a7;

endcase

end

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

從上面幾個例子可以看出,使用always語句描述組合邏輯電路時,格式為:

always @ (敏感變量1 or敏感變量2 or敏感變量3 or …) begin

各種語句的組合

end

其中的敏感變量包括所有的會引起輸出變化的輸入變量以及相應的控制變量。另外,使用always語句描述組合邏輯電路時,應該使用阻塞賦值方式,即「=」,而不是「=」。

相關焦點

  • Verilog HDL基礎教程之:時序邏輯電路
    在Verilog HDL語言中,時序邏輯電路使用always語句塊來實現。例如,實現一個帶有異步復位信號的D觸發器如下。本文引用地址:http://www.eepw.com.cn/article/189522.htm例1:帶異步復位的D觸發器1。
  • HDLBits:在線學習Verilog(七 · Problem 30-34)
    x : y;但是,過程if語句使用不當可能會引入新的錯誤,只有out在所有的條件下都被賦值才會生成正確的組合電路,具體的錯誤下一個訓練才會講到,牛刀小試構建一個可以在a和b之間選擇的二選一多路復用器。如果sel_b1和sel_b2都為真,輸出b,其他情況輸出a。請使用兩種方法作答,一次使用assign賦值,一次使用if語句。
  • 細談FPGA之Verilog HDL語法(一)
    這也就是說,無論描述電路功能行為的模塊或描述元器件或較大部件互連的模塊都可以用Verilog語言來建立電路模型。如果按照一定的規矩編寫,功能行為模塊可以通過工具自動地轉換為門級互連模塊。Verilog模型可以是實際電路的不同級別的抽象。這些抽象的級別和它們對應的模型類型共有以下五種:系統級(system): 用高級語言結構設計實現模塊的外部功能。
  • Verilog HDL基礎教程之:程序基本結構
    Verilog HDL是一種用於數字邏輯電路設計的語言。用Verilog HDL描述的電路設計就是該電路的Verilog HDL模型。Verilog HDL既是一種行為描述的語言,也是一種結構描述的語言。
  • 組合邏輯電路和時序邏輯電路比較_組合邏輯電路和時序邏輯電路有...
    打開APP 組合邏輯電路和時序邏輯電路比較_組合邏輯電路和時序邏輯電路有什麼區別 發表於 2018-01-30 17:26:04
  • 數電複習之組合邏輯電路
    本篇內容主要回顧第三章組合邏輯電路的知識,雖然前面提到過組合邏輯電路是數字電路中很重要的一部分,但是學習起來相對簡單,主要是要學會掌握方法
  • 可編程邏輯培訓——Verilog 語言基礎
    8、用戶自定義原件(UDP元件)是不能被綜合的。一:線網型變量綜合成wire,而寄存器可能綜合成WIRE,鎖存器和觸發器,還有可能被優化掉。二:verilog語句結構到門級的映射1、連續性賦值:assign連續性賦值語句邏輯結構上就是將等式右邊的驅動左邊的結點。因此連續性賦值的目標結點總是綜合成由組合邏輯驅動的結點。Assign語句中的延時綜合時都將忽視。
  • Verilog HDL基礎教程之:數據類型和運算符
    這些數據類型除time型外都與基本邏輯單元建庫有關,與系統設計沒有很大的關係。在一般電路設計自動化的環境下,仿真用的基本部件庫是由半導體廠家和EDA工具廠家共同提供的。系統設計工程師不必過多地關心門級和開關級的Verilog HDL語法現象。
  • 電子人必備基礎知識:數字電路之組合邏輯電路
    關於組合邏輯電路用數位訊號完成對數字量進行算術運算和邏輯運算的電路稱為數字電路,或數字系統。由於它具有邏輯運算和邏輯處理功能,所以又稱數字邏輯電路。數字電路根據邏輯功能的不同特點,可以分成兩大類,一類叫組合邏輯電路(簡稱組合電路),另一類叫做時序邏輯電路(簡稱時序電路)。組合邏輯電路在邏輯功能上的特點是任意時刻的輸出僅僅取決於該時刻的輸入,與電路原來的狀態無關。
  • Verilog常見必備面試題
    使用verilog hdl實現具有同步RESET和SET的觸發器,具有異步RESET和SET的觸發器。異步reset和setalways@(posedge clk or negedge reset or posedge set)begin  if(set)  Q<=1;    else if(!
  • 組合電路特點 組合邏輯電路結構介紹
    打開APP 組合電路特點 組合邏輯電路結構介紹 發表於 2018-04-09 16:01:00 ①組合電路是由邏輯門(表示的數字器件
  • 組合邏輯電路和時序邏輯電路的區別
    打開APP 組合邏輯電路和時序邏輯電路的區別 姚遠香 發表於 2019-02-26 15:32:30   一、輸入輸出關係   組合邏輯電路是任意時刻的輸出僅僅取決於該時刻的輸入,與電路原來的狀態無關。
  • ​verilog相關基礎知識
    對應的硬體關係:    在時序邏輯電路:觸發器   (時序邏輯--always語句塊中帶時鐘信號    )    在組合邏輯電路:硬體連線(組合邏輯--always語句塊中不帶時鐘信號)    舉例:    reg [31:0]  delay_cnt     //位寬為32位    reg
  • Verilog HDL基礎之:程序基本結構
    Verilog HDL是一種用於數字邏輯電路設計的語言。用Verilog HDL描述的電路設計就是該電路的Verilog HDL模型。Verilog HDL既是一種行為描述的語言,也是一種結構描述的語言。也就是說,既可以用電路的功能描述,也可以用元器件和它們之間的連接來建立所設計電路的Verilog HDL模型。
  • 關於學習verilog
    信號的傳播時延包括寄存器的開關時延、走線時延、經過組合邏輯的時延(這樣劃分或許不是很準確,不過對分析問題來說應該是沒有可以的),要提高電路的工作頻率,我們就要在這三個時延中做文章,使其儘可能的小。  我們先來看開關時延,這個時延是由器件物理特性決定的,我們沒有辦法去改變,所以我們只能通過改變走線方式和減少組合邏輯的方法來提高工作頻率。
  • 通過點燈的邏輯體驗FPGA的編程流程以及Verilog語法基礎
    而FPGA連接的LED則可以通過編程FPGA內部的邏輯實現不同的狀態。BTW,蘇老師所有的FPGA項目中最前面的幾行代碼肯定是一個每秒跳動一次的「心跳燈」,看著它跳動,心安。先簡單說一下點燈的要素 - LED點燈的工作原理:
  • Verilog HDL設計技巧——基本要素
    (1)數值邏輯數字邏輯就是一種狀態,可言說說一種常量了,有下面的知識點/注意點:  ①Verilog中有四種羅家數值:邏輯0,邏輯1,x:未知態,Z高阻態;其中x、z是不區分大小寫的;在verilog中,表達式和邏輯門輸入的z通常解釋為x,也就是不定態,不能確定這個邏輯值是
  • 各大公司數字電路筆試試題
    1、同步電路和異步電路的區別是什麼?(仕蘭微電子) 2、什麼是同步邏輯和異步邏輯?(漢王筆試) 同步邏輯是時鐘之間有固定的因果關係。異步邏輯是各時鐘之間沒有固定的因果關係。 3、什麼是"線與"邏輯,要實現它,在硬體特性上有什麼具體要求?
  • Verilog HDL程序設計——基本要素
    ②標識符可以是字母、數字、下劃線和美元符$的組合,並且標識符的第一個字母必須是字母或者是下劃線。此外,在Verilog的標識符中,是區分大小寫的。③Verilog中有一些關鍵字,簡單地了解就是,預定義好了的,用來說明語言節後的標識符,都是小寫的。標識符不能和關鍵字重複。
  • 組合邏輯電路的分析方法和設計方法
    組合邏輯電路的分析方法和設計方法6.1概述組合邏輯電路:定義構成電路特點6.2.1組合邏輯電路的分析方法一、基本分析方法分析:給定邏輯電路,求電路的邏輯功能