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