【摘要】隨著EDA技術的發展,基于硬件描述語言的數字系統設計正越來越流行。本文以數字電路中常見的全加器為基礎,介紹如何將硬件描述語言引入到數字電路的學習中,為未來學習可編程器件打下良好的基礎。
【關鍵詞】全加器 ;Verilog HDL;多位設計
引言
隨著信息時代的來臨,“數字”二字正越來越多的出現在各個領域,數字電視、數字通信、數字電影、數字控制……數字化已成為當今信息社會的技術基礎,電子技術發展的潮流。
數字電路已從早期的分立元件發展到集成電路,以及具有特定功能的專用集成電路,其設計的復雜度、集成度越來越大,而傳統的設計方式已無能為力。為解決這一問題,基于硬件描述語言(HDL,Hardware Description Lan-guage)的全新設計方法應運而生。硬件描述語言是一種用形式化方法描述數字電路和系統的語言,形式上和普通計算機編程語言很相似。利用這種語言,數字電路系統的設計可以從上層到下層(從抽象到具體)逐層描述自己的設計思想,用一系列分層次的模塊來表示極其復雜的數字系統。
傳統的數字電路設計方法其設計步驟分為:設計原始狀態表、狀態化簡、狀態編碼、根據狀態轉換表建立輸入和輸出方程,畫出邏輯電路并連接。這種方法需要一定的邏輯推導與化簡,學習起來枯燥乏味,極易挫傷學習興趣。但是如果在學習過程中將硬件描述語言加入其中,自行編寫程序,從仿真波形中觀察信號的邏輯變化,將被動學習變為主動學習,將會更加容易理解和掌握數字邏輯電路。當今最為流行的硬件描述語言以VHDL和Verilog HDL應用最為廣泛。Verilog HDL以其易學自由的特點被美國80%以上的電子工程師使用,而國內大多數公司和研究單位也在使用Verilog HDL語言。
Verilog HDL語言簡單易學,比較適合底層邏輯電路的描述,只要有C語言編程基礎,即可在短時間掌握。而C語言是大多數理工類學生必修的編程語言之一。這里以Verilog HDL語言為基礎,介紹如何在數字電路中引入硬件描述語言學習全加器。
一、傳統方法設計全加器
全加器是用門電路實現兩個二進制數相加并求出和的組合電路,稱為一位全加器。一位全加器可以處理低位進位,并輸出本位加法進位。多個一位全加器進行級聯可以得到多位全加器。它與半加器的區別在于需要考慮來自低位的進位,因此其輸入端除了加數和被加數以外,還應有一個進位輸入端。根據二進制加法運算規則,用A和B代表加數,CI代表來自低位的進位輸入,S代表相加的和,CO代表向高位的進位,可列出一位全加器的真值表,如表1所示。
表1 全加器的真值表
輸入 輸出
CI A B S CO
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1
根據真值表寫出輸出端S和CO的邏輯表達式:
對邏輯表達式進行化簡,可得如下表達式:
根據化簡后的表達式畫出全加器的結構圖,如圖1所示。
圖1 全加器的邏輯電路圖
雖然依照傳統的設計模式繪出了全加器的邏輯電路圖,但是無法展現它是否符合真值表,無法檢測設計的正確與否。引入硬件描述語言Verilog HDL,利用仿真驗證,可以有效地直觀感受設計效果。
二、基于Verilog HDL的全加器設計
Verilog HDL語言以模塊集合的形式來描述數字電路系統,其基本設計單元是模塊(module),整個程序包括在關鍵字module、endmodule之內,其模塊類似C語言中的函數,提供輸入、輸出端口,通過實例化來調用其他模塊,以及模塊間相互連接來實現設計功能。在硬件描述語言的建模中,主要有結構化描述方式、數據流描述方式和行為描述方式,其中數據流描述方式與邏輯表達式很相識。這里以化簡后的邏輯表達式對電路進行描述。
module full_adder1(a,b,ci,s,co);
//模塊定義行:module 模塊名(端口名表項)
input a,b;//端口類型說明:說明端口的輸入或輸出特性
input ci;//來自低位的進位輸入端
output s;//加數之和的輸出
output co;//向高位的進位輸出端
assign ?s=a^b^ci;//功能描述:對模塊的功能或結構進行具體描述
assign ?co=(a&B)|(ci&(a^b)); //向高位的進位端描述
endmodule//結束行:標志模塊結束
圖2 一位全加器模塊的仿真結果
在模塊描述完成之后,需要通過測試文件對模塊進行仿真驗證,以檢查設計是否達到要求。想要對模塊進行仿真測試首先要規定時間單位,而且最好在測試文件中統一規定時間單位,比如,‘timescale 1ns/1ps表示仿真的單位時間為1ns,精度為1ps。測試模塊可以看做一個模塊或者設備,和你已經編寫的模塊進行通信。通過測試模塊向待測模塊輸出信號作為激勵,同時接收從待測模塊輸出的信號來查看結果。一般在測試模塊中將測試模塊的輸入信號(input)定義為reg型,輸出信號(output)定義為wire型。處理完接口和聲明之后,需要自己設置一些激勵信號,激勵信號的內容就是能輸入到待測模塊中的波形。對上述模塊編寫測試程序,查看仿真結果,如圖2所示。從圖中可知,其仿真結果與真值表完全一致,說明全加器的設計正確,達到設計要求。
通過真值表推導出邏輯表達式,再用數據流描述方式建模的方法是否可以再進一步改進,以符合我們傳統的數學表達方式呢?答案是肯定的。采用行為描述方式建模,將加數、被加數和低位的進位以加法的形式表示,而和與高位的進位用拼接運算符({ })來表示。將上述程序的功能描述語句修改如下:
assign {s,co}=a+b+ci; //功能描述,帶進位的加法運算
再進行一次驗證仿真,結果一模一樣。說明這種描述方式是正確的,而且更接近于數學表達,更容易掌握。
圖4 四位全加器數學表示圖
三、全加器的改進與多位設計
一位的全加器解決了,那么多位的全加器怎么辦呢?也很簡單。只需要增加加數與被加數的位寬即可。這里以四位全加器為例,將源程序進行修改。
module full_adder2(a,b,ci,s,co);
input [3: 0]a,b;//四位的加數與被加數,[3:0]代表位寬為4
input ci;
output [3:0]s;//和也是4位
output co;
assign {s,co}=a+b+ci;
//行為描述方式,即電路功能描述
endmodule
編寫測試模塊程序,查看仿真結果,如圖3、圖4所示。從圖中很明顯的看到,無論從波形圖還是數學結構上都可論證全加器的設計正確,符合數學學習的規律,可將其作為一個模塊電路運用具體電路中,作為其他設計的一個功能電路。
四、結束語
從上述的全加器的學習分析中,可以發現在數字電路學習中引入硬件描述語言可以讓數字電路的學習更加直觀,更能了解電路的功能作用,更易掌握所學知識。此外,以Verilog HDL語言為學習EDA技術的切入點,有利于學習電子電路自動化設計的思想,有助于掌握EDA技術這門代表電子設計技術最新發展的方向,為將來學習FPGA可編程器件打下良好的基礎。
參考文獻
[1]閻石.數字電子技術基礎(第四版)[M].高等教育出版社,1998(11).
[2]董海青.可編程邏輯器件基礎[M].清華大學出版社,2012(8).
作者簡介:張定祥(1978—),男,貴州黃平人,副教授,現供職于貴州電子信息職業技術學院,研究方向:EDA技術,單片機技術。