數(shù)字邏輯與數(shù)字系統(tǒng):第4章 組合邏輯基礎(chǔ)_第1頁
數(shù)字邏輯與數(shù)字系統(tǒng):第4章 組合邏輯基礎(chǔ)_第2頁
數(shù)字邏輯與數(shù)字系統(tǒng):第4章 組合邏輯基礎(chǔ)_第3頁
數(shù)字邏輯與數(shù)字系統(tǒng):第4章 組合邏輯基礎(chǔ)_第4頁
數(shù)字邏輯與數(shù)字系統(tǒng):第4章 組合邏輯基礎(chǔ)_第5頁
已閱讀5頁,還剩75頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第4章 組合邏輯基礎(chǔ) 4.1概述 4.2組合邏輯電路的分析 4.3組合邏輯電路的設(shè)計(jì) 4.4組合邏輯電路中的競爭-冒險(xiǎn) 4.5 組合邏輯電路的Verilog HDL編程入門 4.1概述1. 什么是組合邏輯電路在邏輯功能上的特點(diǎn):電路任意時(shí)刻的輸出狀態(tài),只取決于該時(shí)刻的輸入狀態(tài),而與該時(shí)刻之前的電路輸入狀態(tài)和輸出狀態(tài)無關(guān)。在結(jié)構(gòu)上的特點(diǎn):不含有具備存儲(chǔ)功能的電路??梢杂蛇壿嬮T或者由集成組合邏輯單元電路組成,從輸出到各級門的輸入無任何反饋連接。2. 組合邏輯電路框圖有n個(gè)輸入變量,m個(gè)輸出變量,每個(gè)輸入/輸出變量實(shí)質(zhì)上對應(yīng)于二進(jìn)制信號的邏輯0和邏輯1,n個(gè)輸入變量有2n種輸入組合,對于每一種組合,

2、只有一個(gè)可能的輸出值與之對應(yīng)。組合邏輯電路 A1A2AnF1F2FmF1=f1(A1,A2,An)F2=f2(A1,A2,An)Fm=fn(A1,A2,An)圖4.1 組合邏輯電路框圖 3. 組合邏輯電路必須研究的問題 邏輯分析:就是在已知電路圖的情況下,通過分析手段確定其邏輯功能,也就是要得到全部輸出與輸入之間的邏輯關(guān)系,這在分析電路性能,評價(jià)電路技術(shù)指標(biāo),或者對產(chǎn)品進(jìn)行維修及改進(jìn)過程中是非常重要的。邏輯設(shè)計(jì):是在只有需求信息的情況下,根據(jù)給定的邏輯功能要求,通過某些設(shè)計(jì)工具和設(shè)計(jì)方法確定一個(gè)能實(shí)現(xiàn)這個(gè)功能、且性價(jià)比最優(yōu)的邏輯電路。 4.2組合邏輯電路的分析借助邏輯代數(shù)的知識(shí),分析從輸入到輸

3、出每條路徑上的各個(gè)邏輯門的邏輯運(yùn)算,通過導(dǎo)出每個(gè)點(diǎn)的邏輯函數(shù)或真值表,最終確定該電路的邏輯功能。從輸入端出發(fā),逐級分析每個(gè)點(diǎn)的邏輯運(yùn)算并寫出邏輯表達(dá)式。由門電路組成的組合邏輯電路的分析步驟:根據(jù)所給的邏輯電路圖,寫出輸出函數(shù)邏輯表達(dá)式。根據(jù)已寫出的輸出邏輯函數(shù)表達(dá)式,列出該電路的真值表。由真值表或邏輯函數(shù)表達(dá)式確定電路功能?!纠?.1】分析圖4.2所示組合電路的邏輯功能。解:(1) 寫出輸出函數(shù)邏輯表達(dá)式。(式4.1) 對式4.1進(jìn)行化簡和變換可得到如下兩個(gè)邏輯函數(shù)表達(dá)式:(2) 列真值表。表4.1 例4.1真值表ABCF00001111001100110101010101111110(式4.

4、2) (式4.3) 方案一方案一(3) 分析邏輯功能。電路稱為“不一致電路”。【例4.2】分析圖4.3所示組合電路的邏輯功能。解:(1) 寫出輸出函數(shù)邏輯表達(dá)式。P1=AB(式4.5)(式4.4)(2) 根據(jù)式4.4和式4.5可列出真值表。ABCF1F20000111100110011010101010001011101101001(3) 分析邏輯功能由真值表可以看出:F1是在三個(gè)輸入變量中有兩個(gè)或兩個(gè)以上為1時(shí),其值為1,所以相當(dāng)于三個(gè)二進(jìn)制數(shù)相加時(shí)的進(jìn)位輸出;F2是三個(gè)輸入變量中有一個(gè)為1或三個(gè)全為1(也就是奇數(shù)個(gè)1)時(shí),其值為1,所以相當(dāng)于三個(gè)二進(jìn)制數(shù)相加時(shí)的本位和輸出。因此,該電路實(shí)現(xiàn)

5、的是一位全加器的運(yùn)算功能。 Proteus ISIS環(huán)境下進(jìn)行仿真在做組合邏輯電路的分析過程中,還有一個(gè)簡便的方法就是在Proteus ISIS環(huán)境下進(jìn)行仿真。繪制已知的邏輯電路圖,給電路的每一個(gè)輸入端配置一個(gè)LOGICSTATE,在每個(gè)輸出配置一個(gè)LOGICPROBE,通過仿真,設(shè)置不同的LOGICSTATE的值,觀察每一個(gè)LOGICPROBE的值,即可直接列出真值表。當(dāng)然也可借助仿真來驗(yàn)證對組合邏輯電路的分析是否正確。讀者可結(jié)合例4.1和例4.2進(jìn)行驗(yàn)證。4.3組合邏輯電路的設(shè)計(jì)組合電路的設(shè)計(jì)就是按給定的邏輯問題,運(yùn)用相應(yīng)的邏輯設(shè)計(jì)方法和邏輯器件,設(shè)計(jì)出符合要求的邏輯電路。組合邏輯電路的設(shè)

6、計(jì)非常靈活,方法也多種多樣,同一問題,不同的設(shè)計(jì)者設(shè)計(jì),結(jié)果不一定相同,即使是同一設(shè)計(jì)者設(shè)計(jì),采用的設(shè)計(jì)方法和邏輯器件不同,設(shè)計(jì)結(jié)果也不相同,但不怎樣,但最終得到的邏輯功能一定是相同的。組合邏輯電路的設(shè)計(jì)通常可按以下步驟進(jìn)行:根據(jù)需求信息,分析事件的因果關(guān)系,確定輸入變量和輸出變量。把事件的起因定為輸入變量,把事件的結(jié)果定為輸出變量。定義邏輯狀態(tài)的含義,并對邏輯變量賦值,也就是用二值邏輯的0和1分別代表輸入變量的不同狀態(tài),對所有可能的輸入組合,確定其輸出狀態(tài)值,并根據(jù)輸出變量對不同輸入組合的響應(yīng)列出真值表。由真值表寫出相應(yīng)的邏輯函數(shù)表達(dá)式,并對寫出的邏輯函數(shù)表達(dá)式進(jìn)行化簡或變換,使之對應(yīng)的邏輯

7、電路符合所用的設(shè)計(jì)器件或達(dá)到設(shè)計(jì)結(jié)果最簡的目的。根據(jù)化簡或變換后的邏輯表達(dá)式繪制邏輯電路圖?!纠?.3】設(shè)計(jì)一個(gè)三變量輸入的一致電路。真值表ABCF00001111001100110101010110000001根據(jù)表達(dá)式 繪制的電路(b)根據(jù)式4.2求反繪制的電路【例4.4】設(shè)計(jì)一個(gè)實(shí)現(xiàn)全加器運(yùn)算功能的組合邏輯電路。(1) 需求分析。(2) 確定變量。三個(gè)輸入變量:A、B表示參加本位相加的兩個(gè)二進(jìn)制數(shù);C表示低位向本位的進(jìn)位兩個(gè)輸出變量:本位和用F2表示;輸出向高位的進(jìn)位用F1表示(3) 真值表。(式4.7) (式4.8) (4) 邏輯表達(dá)式。ABCF1F200001111001100110

8、10101010001011101101001(式4.10) (式4.7) (式4.8) (式4.9) (式4.10) 4.4組合邏輯電路中的競爭-冒險(xiǎn) 4.4.1 競爭-冒險(xiǎn)的產(chǎn)生4.4.2 競爭-冒險(xiǎn)的判斷4.4.3 競爭-冒險(xiǎn)的消除方法什么叫競爭-冒險(xiǎn)前面分析組合邏輯電路時(shí),是把各邏輯門電路當(dāng)做理想的邏輯門來看待,只考慮了輸入和輸出穩(wěn)定狀態(tài)之間的關(guān)系,也就是說,總認(rèn)為從輸入變化到輸出變化沒有任何時(shí)間延遲,變化是在同一時(shí)刻發(fā)生的。事實(shí)上,受電路上布局的影響,信號的變化速率不一定相同,而且信號在經(jīng)過任何電路時(shí)都會(huì)產(chǎn)生時(shí)間延遲,這將導(dǎo)致當(dāng)電路的輸入達(dá)到穩(wěn)定狀態(tài)前,輸出可能出現(xiàn)不穩(wěn)定狀態(tài),使得原

9、本正常的邏輯關(guān)系出現(xiàn)了混亂,甚至導(dǎo)致了電路產(chǎn)生錯(cuò)誤輸出,通常把這種現(xiàn)象稱為競爭-冒險(xiǎn)。4.4.1 競爭-冒險(xiǎn)的產(chǎn)生1由于輸入信號邊沿不陡、變化速率不同而產(chǎn)生的競爭-冒險(xiǎn) 當(dāng)其兩個(gè)輸入信號A和B同時(shí)向相反狀態(tài)變化時(shí),如果變化的速率不同,比如A從0變到1變化略快一些,而B從1變到0略慢一點(diǎn),從而導(dǎo)致在A和B的狀態(tài)變化過程中有一段很微小的時(shí)間里出現(xiàn)同時(shí)滿足高電平1的時(shí)刻,這就使得原本應(yīng)該穩(wěn)定輸出1的F端產(chǎn)生了一個(gè)不應(yīng)該出現(xiàn)的負(fù)尖脈沖輸出。競爭是指邏輯門的兩個(gè)輸入信號從不同電平同時(shí)向相反電平跳變的現(xiàn)象。由于競爭而在電路的輸出端產(chǎn)生與邏輯電平相違背的尖脈沖現(xiàn)象稱為競爭-冒險(xiǎn)。競爭-冒險(xiǎn)的產(chǎn)生是有條件的,

10、有競爭的存在并不一定產(chǎn)生競爭-冒險(xiǎn)。2由于兩個(gè)輸入信號通過不同路徑時(shí)的時(shí)間延遲而產(chǎn)生的競爭-冒險(xiǎn) 當(dāng)?shù)竭_(dá)同一邏輯門的兩個(gè)輸入信號有競爭現(xiàn)象,如果這兩個(gè)信號因通過不同路徑傳輸?shù)难舆t時(shí)間不同,就會(huì)產(chǎn)生競爭-冒險(xiǎn)。如果因?yàn)殡娐费舆t,在應(yīng)該輸出1時(shí)出現(xiàn)了不應(yīng)有的瞬間0信號,即產(chǎn)生了冒險(xiǎn)。這種冒險(xiǎn)稱為0型冒險(xiǎn)。如上圖的或門輸出。 如果因?yàn)殡娐费舆t,在應(yīng)該輸出0時(shí)出現(xiàn)了不應(yīng)有的瞬間1信號,即產(chǎn)生了冒險(xiǎn)。這種冒險(xiǎn)稱為1型冒險(xiǎn)。如上圖的與門輸出。 功能冒險(xiǎn)和邏輯冒險(xiǎn) 當(dāng)輸入信號ABC從001變到010時(shí),若B先于C變化,則輸入信號ABC將由001 011 010,所經(jīng)路徑的函數(shù)值不相同,輸出就會(huì)發(fā)生 0 1

11、0的錯(cuò)誤。就是功能冒險(xiǎn)。 功能冒險(xiǎn) 在組合邏輯電路中,當(dāng)有兩個(gè)或兩個(gè)以上輸入信號同時(shí)產(chǎn)生變化時(shí),在輸出端產(chǎn)生了毛刺,這種冒險(xiǎn)稱為功能冒險(xiǎn)。 邏輯冒險(xiǎn) 在組合邏輯電路中,當(dāng)只有一個(gè)變量產(chǎn)生變化時(shí)出現(xiàn)的冒險(xiǎn),稱為邏輯冒險(xiǎn)。4.4.2 競爭-冒險(xiǎn)的判斷 表達(dá)式法卡諾圖法軟件仿真及實(shí)驗(yàn)法例4.16.判斷以下函數(shù)是否可能產(chǎn)生冒險(xiǎn)現(xiàn)象: 例4.15.判斷以下函數(shù)是否可能產(chǎn)生冒險(xiǎn)現(xiàn)象: 但是當(dāng)輸入變量的數(shù)目較多時(shí),從邏輯函數(shù)表達(dá)式上難于找出所有可能產(chǎn)生的競爭-冒險(xiǎn)。1. 表達(dá)式法 在邏輯函數(shù)表達(dá)式中,某個(gè)變量以原變量和反變量出現(xiàn)時(shí),其它變量取1或取0,若得到表達(dá)式為 或 則可以判定存在競爭-冒險(xiǎn)。當(dāng) B =

12、 C = 1時(shí),所以,在A由1變0時(shí),可能產(chǎn)生“0”型冒型。當(dāng) B = C = 0時(shí),所以,在A由0變1時(shí),可能產(chǎn)生“1”型冒型。 4.4.2 競爭-冒險(xiǎn)的判斷 2卡諾圖法3軟件仿真法 通過計(jì)算機(jī)輔助分析的手段也可有效判斷電路的競爭-冒險(xiǎn)。利用EDA設(shè)計(jì)與仿真工具,繪制電路的原理圖,再采用與典型參數(shù)值相應(yīng)的激勵(lì)信號作為輸入,運(yùn)行仿真程序,即可直接觀察電路的輸出是否存在競爭-冒險(xiǎn)。 首先將邏輯關(guān)系用卡諾圖表示,若在卡諾圖畫包圍圈時(shí),出現(xiàn)兩個(gè)包圍圈相切而不相交的情況,對應(yīng)的邏輯電路將存在競爭-冒險(xiǎn)。對于圖a,信號B=1,C=1, ,A由0變?yōu)?時(shí),產(chǎn)生0型冒險(xiǎn)。對于圖b,信號B=0,C=0, ,A

13、由1變?yōu)?時(shí),產(chǎn)生1型冒險(xiǎn)。4.4.3 競爭-冒險(xiǎn)的消除方法競爭-冒險(xiǎn)在某些電路中可能會(huì)引起電路操作上的錯(cuò)誤,因此,作為電路的設(shè)計(jì)者,應(yīng)當(dāng)采取有效措施消除或避免競爭-冒險(xiǎn)的發(fā)生。針對競爭-冒險(xiǎn)出現(xiàn)的原因和特點(diǎn),常用的方法有以下幾種。1. 增加冗余項(xiàng)增加冗余項(xiàng)的方法是通過在函數(shù)表達(dá)式中增加多余的項(xiàng),使原函數(shù)不可能出現(xiàn)在某種條件下出現(xiàn)A+A或AA的輸出形式,從而有效消除競爭-冒險(xiǎn)。例如例4.5所示函數(shù),F(xiàn)=AC+AB+AC,當(dāng)BC=11時(shí),輸入A的變化有可能使電路產(chǎn)生競爭-冒險(xiǎn),消除的方法是在表達(dá)式中增加一個(gè)與項(xiàng)BC,使輸出F在BC=11時(shí)保持為“1”即可效消除競爭-冒險(xiǎn)??梢姡黾拥娜哂囗?xiàng)就是競

14、爭-冒險(xiǎn)的條件所對應(yīng)的項(xiàng)。冗余項(xiàng)的選擇也可以通過卡諾圖法來實(shí)現(xiàn)。具體方法是,若卡諾圖上某兩個(gè)圈“相切”,則將相切的部分畫一個(gè)圈,該圈所對應(yīng)的項(xiàng)就是要增加的冗余項(xiàng)。 2. 在輸出端接入濾波電容由于競爭-冒險(xiǎn)而產(chǎn)生的尖峰脈沖時(shí)間很短,通常在幾十個(gè)納秒以內(nèi),所以只要在輸出端并接一個(gè)幾十至幾百皮法的濾波電容,即可將尖峰脈沖的幅度削弱到門電路的閥值以下,從而達(dá)到消除競爭-冒險(xiǎn)的目的。4.4.3 競爭-冒險(xiǎn)的消除方法3. 引入選通脈沖對輸出門加以控制,使輸出門在其輸入信號穩(wěn)定以后,有選擇地產(chǎn)生邏輯輸出。對于不同功能的輸出門,選通信號的形式是不同的。邏輯與性質(zhì)的輸出門,必須采用正脈沖作為選通信號;邏輯或性質(zhì)

15、的輸出門,必須采用負(fù)脈沖作為選通信號;從而達(dá)在選通信號無效時(shí),封鎖輸出門,在選通脈沖到來時(shí),開啟輸出門的作用。4.4.3 競爭-冒險(xiǎn)的消除方法4.5組合邏輯電路的Verilog HDL編程入門 4.5.1 可編程邏輯器件與硬件描述語言簡介4.5.2 Verilog HDL組合邏輯電路設(shè)計(jì)實(shí)例1. 可編程邏輯器件與硬件描述語言簡介現(xiàn)在很多數(shù)字系統(tǒng)都采用可編程邏輯器件來實(shí)現(xiàn)??删幊踢壿嬈骷挠⑽娜Q為Programmable Logic Device,常用縮寫PLD表示:現(xiàn)場可編程門陣列(FPGA,F(xiàn)ield Programmable Gate Array)復(fù)雜可編程邏輯器件(CPLD,Compl

16、ex Programmable Logic Device)用于對PLD編程的語言稱為硬件描述語言 HDL-Hardware Description Language目前應(yīng)用最廣泛的HDL是:Verilog HDLVHDL(Very High Speed Integrated Circuit HDL) 由于Verilog HDL具有程序結(jié)構(gòu)簡單,硬件描述能力強(qiáng)等特點(diǎn),已得到國內(nèi)外廣大EDA設(shè)計(jì)者的廣泛使用。29小規(guī)模集成電路和中規(guī)模集成電路。這些集成電路包括邏輯門和其他數(shù)字電路 在生產(chǎn)的時(shí)候就確定了,而且不能改變。如果需要某種特定邏輯功能的器件, 則需用多個(gè)器件來構(gòu)造電路既浪費(fèi)了電路板上的空間又

17、浪費(fèi)了設(shè)計(jì)時(shí)間。在可編程邏輯器件出現(xiàn)之前,數(shù)字系統(tǒng)用各種集成邏輯電路組成Y=AB+BC+AC30可編程邏輯器件(PLD)-可以由用戶編程實(shí)現(xiàn)不同邏輯功能的數(shù)字集成電路。PLD給這些問題提供了解決辦法。在使用者第次拿到PLD的時(shí)候,器件中沒有實(shí)現(xiàn)任何邏輯功能的只有那些設(shè)計(jì)需要的邏輯功能被編程實(shí)現(xiàn)邏輯功能可以在設(shè)計(jì)和編程中合并到一塊芯片上減少器件個(gè)數(shù)、節(jié)省電路板空間可編程擦寫、再編程多次,便于修改PLD是個(gè)通用名詞。有許多類型,包括:PAL (可編程陣列邏輯)GAL (通用陣列邏輯)EPLD (可擦除可編程邏輯器件)CPLD (復(fù)雜可編程邏輯器件)FPGA (現(xiàn)場可編程邏輯)Y=AB+BC+AC3

18、1可編程邏輯器件(PLD)-為了使一個(gè)芯片通過編程變成我們構(gòu)想的數(shù)字系統(tǒng)。設(shè)計(jì)輸入 仿真 編譯 裝配 編程PLD的設(shè)計(jì)方式-圖形設(shè)計(jì)文件層次化結(jié)構(gòu)設(shè)計(jì)文本設(shè)計(jì)文件32層次化結(jié)構(gòu)設(shè)計(jì)maj_vote2votes4votes/*半加器描述之一,根據(jù)邏輯函數(shù)表達(dá)式實(shí)現(xiàn)Date:2012-08-15*/module h_adder(a,b,so,co);input a,b; /輸入端口,參加運(yùn)算的兩個(gè)1位的二進(jìn)制數(shù)output so,co; /輸出端口,so為本位和,co為向高位的進(jìn)位assign so=ab; /本位和為a和b的異或運(yùn)算結(jié)果assign co=a&b; /向高位的進(jìn)位為a和b的與運(yùn)算

19、結(jié)果endmodule2. Verilog HDL組合邏輯電路設(shè)計(jì)實(shí)例【例4.6】用Verilg HDL設(shè)計(jì)半加器電路。absoco0000011010101101注:雖然都叫程序,而且Verilg程序描述與C語言程序看上去有很多相似的地方,但兩者有著很大的差別,C語言源程序是通過編譯產(chǎn)生可執(zhí)行的目標(biāo)代碼,目標(biāo)代碼是在計(jì)算機(jī)的CPU上執(zhí)行Verilog程序是通過綜合產(chǎn)生相應(yīng)的電路描述表,將綜合后電路描述表編程到CPLD或配置到FPGA芯片上執(zhí)行。圖4.10半加器的仿真波形圖Verilog程序的基本結(jié)構(gòu) 一個(gè)完整的、可綜合的Verilog程序能夠完整地描述一個(gè)電路模塊,或一片專用集成電路,必須包

20、含在一個(gè)模塊中。module和endmodule是模塊描述關(guān)鍵詞;endmodule是模塊結(jié)束語句,模塊的端口和功能描述語句必須放在module和endmodule之間。 在程序中,關(guān)鍵詞一律小寫;模塊名是用戶定義標(biāo)識(shí)符,以字母開頭,可由字母、數(shù)字和下劃線構(gòu)成。由于模塊名實(shí)際上也是表達(dá)當(dāng)前設(shè)計(jì)的電路的器件名,所以最好是根據(jù)相應(yīng)的電路功能來命名注:Verilog程序中的標(biāo)識(shí)符都是區(qū)別大小寫的。module 模塊名(模塊端口名表)模塊端口和模塊功能描述endmodule模塊端口名表可以是一個(gè)或多個(gè)用逗號分隔的標(biāo)識(shí)符,是模塊與外部電路的連接通道,相當(dāng)于芯片引腳的功能,一個(gè)模塊只能通過端口才能與外部電

21、路交換信息。module 模塊名(模塊端口名表)模塊端口和模塊功能描述endmoduleinput/output/inout 端口名1,端口名2,;input/output/inoutmsb:lsb 端口名1,端口名2,;input/output/inout 是Verilog模塊中端口的三種不同模式,用于定義端口上數(shù)據(jù)的流動(dòng)方向或方式。input表示輸入,定義的端口為單向輸入模式;output表示輸出,定義的端口為單向輸出模式;inout表示雙向,定義的通道為輸入輸出雙向模式。一個(gè)端口名可以表示一個(gè)引腳,也可以表示一組引腳。如果端口是一組信號引腳,可以在關(guān)鍵詞后的方括號中用msb和lsb分別表

22、示信號的高位和低位的位號。比如,要定義d表示四位位寬的輸入信號,可以用input3:0 d;來定義,相當(dāng)于定義了d3、d2、d1、d0四個(gè)輸入信號。input/output/inout 端口名1,端口名2,;input/output/inoutmsb:lsb 端口名1,端口名2,;Verilog 程序中的注釋有兩種:一種以“/*”開始,以“*/”結(jié)束的多行注釋;另一種是,從雙斜杠“/”開始,到行末為止的單行注釋。注釋只是用來對程序中的語句或代碼段起說明作用,目的是為了增加程序的可讀性,對綜合器不起作用,所以不影響具體電路。/*半加器描述之一,根據(jù)邏輯函數(shù)表達(dá)式實(shí)現(xiàn)Date:2012-08-15

23、*/module h_adder(a,b,so,co);input a,b; /輸入端口,參加運(yùn)算的兩個(gè)1位的二進(jìn)制數(shù)output so,co; /輸出端口,so為本位和,co為向高位的進(jìn)位assign so=ab; /本位和為a和b的異或運(yùn)算結(jié)果assign co=a&b; /向高位的進(jìn)位為a和b的與運(yùn)算結(jié)果endmodule在module之后是模塊名和模塊端口名表,例4.6的模塊名為h_adder,該模塊有四個(gè)端口,a,b,so,co。輸入端口定義,說明本模塊有兩個(gè)用于輸入的端口,端口名稱為a和b。輸出端口定義,說明本模塊有兩個(gè)用于輸出的端口,端口名稱為so和co。用關(guān)鍵詞assign實(shí)現(xiàn)

24、的賦值語句,用來描述半加器的兩個(gè)運(yùn)算功能:一個(gè)是產(chǎn)生本位和的異或運(yùn)算,運(yùn)算符是“”;另一個(gè)是用來產(chǎn)生向高位進(jìn)位的與運(yùn)算“&”。這兩種運(yùn)算都是位邏輯運(yùn)算,屬于這類運(yùn)算還有位或“|”,位求反“”等。/*半加器描述之一,根據(jù)邏輯函數(shù)表達(dá)式實(shí)現(xiàn)Date:2012-08-15*/module h_adder(a,b,so,co);input a,b; /輸入端口,參加運(yùn)算的兩個(gè)1位的二進(jìn)制數(shù)output so,co; /輸出端口,so為本位和,co為向高位的進(jìn)位assign so=ab; /本位和為a和b的異或運(yùn)算結(jié)果assign co=a&b; /向高位的進(jìn)位為a和b的與運(yùn)算結(jié)果endmoduleVe

25、rilog程序中的語句有順序語句和并行語句:順序語句的執(zhí)行與書寫順序一致;并行語句的執(zhí)行不管有多少個(gè)語句都是同時(shí)執(zhí)行的。關(guān)鍵詞assign引導(dǎo)的賦值語句就是并行執(zhí)行語句,所以本例中的兩個(gè)assign賦值是同時(shí)執(zhí)行的。assign賦值的對象必須是wire(網(wǎng)線)類型變量,模塊的端口默認(rèn)類型是wire類型,所以不需要再加以說明。Verilog程序的書寫格式與C語言相似:程序中的語句用分號結(jié)尾。一行可以寫多個(gè)語句,一個(gè)語句也可寫成多行。最后一個(gè)語句是表示模塊結(jié)束的endmodule,其后沒有分號。module h_adder(a,b,so,co);input a,b; /輸入端口output so,

26、co; /輸出端口,so為本位和,co為向高位的進(jìn)位assign co,so=a+b; /將兩位二進(jìn)制數(shù)相加的結(jié)果直接存入并位后的co和soendmodule其中:a + b表示對兩個(gè)參加運(yùn)算的二進(jìn)制數(shù)做算術(shù)加法運(yùn)算; 是并位運(yùn)算,用來將多個(gè)位對象按順序拼接成一個(gè)位向量;此處是把進(jìn)位輸出和本位和拼成一個(gè)兩位的位向量,并且高位是進(jìn)位輸出,低位是本位和,用來接收算術(shù)運(yùn)算a+b的結(jié)果。 同一問題的Verilog 描述可以有多種方式,不同的程序結(jié)構(gòu)綜合后的電路不一定相同,但功能是相同的,比如半加器的Verilog HDL描述還可以有以下兩種形式。半加器描述之二,直接用算術(shù)運(yùn)算實(shí)現(xiàn)的描述 module

27、h_adder(a,b,so,co);input a,b;/輸入端口output so,co;/輸出端口,so為本位和,co為向高位的進(jìn)位reg so,co; /寄存器變量說明,在過程中賦值的變量必須說明成reg型always (a,b) begin /過程語句開始,當(dāng)敏感信號a、b有變化,過程就執(zhí)行case(a,b)/case語句開始2b00: begin so=0; co=0; end/塊語句用begin 和end 括起2b01: begin so=1; co=0; end2b10: begin so=1; co=0; end2b11: begin so=0; co=1; enddefau

28、lt: begin so=0; co=0; endendcase/case語句結(jié)束end/過程語句結(jié)束endmoduleVerilog 程序中的多個(gè)簡單語句可以用begin和end括起來構(gòu)成塊語句,類似于C語言中用一對花括號括起來的復(fù)合語言。注意:end后無分號。半加器描述之三,基于case 語句的類真值表描述半加器描述之三,基于case 語句的類真值表描述always (敏感信號表) 包括塊語句在內(nèi)的各類順序語句。always關(guān)鍵詞引導(dǎo)的是過程語句,其一般格式為:module h_adder(a,b,so,co);input a,b;/輸入端口output so,co;/輸出端口,so為本位

29、和,co為向高位的進(jìn)位reg so,co; /寄存器變量說明,在過程中賦值的變量必須說明成reg型always (a,b) begin /過程語句開始,當(dāng)敏感信號a、b有變化,過程就執(zhí)行case(a,b)/case語句開始2b00: begin so=0; co=0; end/塊語句用begin 和end 括起2b01: begin so=1; co=0; end2b10: begin so=1; co=0; end2b11: begin so=0; co=1; enddefault: begin so=0; co=0; endendcase/case語句結(jié)束end/過程語句結(jié)束endmodu

30、le其中,敏感信號表可以是一個(gè)或多個(gè)用逗號(或 or)分隔的變量名。其含義表示其中任何變量有變化,都會(huì)導(dǎo)致過程塊語句的執(zhí)行。本例的敏感信號表說明,只要輸入端口a或b的值有變化,則會(huì)導(dǎo)致過程塊語句的執(zhí)行,根據(jù)當(dāng)前的a和b的值來求新的本位和so和進(jìn)位co。always (敏感信號表) 包括塊語句在內(nèi)的各類順序語句。以關(guān)鍵詞case語句引導(dǎo)的一個(gè)多分支語句。其一般格式為:case (表達(dá)式) 取值1: begin語句1; 語句2; 語句n;end取值2: begin ; end default:begin ; endendcase 執(zhí)行時(shí),先求表達(dá)式的值,然后表達(dá)式的值與其后的各個(gè)取值比較: 若與某

31、個(gè)取值相同,則執(zhí)行其后的語句, 如果沒有相同的值與之匹配,則執(zhí)行default后的語句。 Verilog語法規(guī)定,凡是在always過程塊中賦值的變量,必須用reg說明成寄存器類型,如本例中的 reg so,co;所示,因?yàn)閟o和co都是在過程塊中賦值的變量。注意:此處說明為寄存器類型變量,是過程塊內(nèi)賦值語句的語法規(guī)定需要,并不意味著一定有寄存器(時(shí)序)電路與之對應(yīng)。 module h_adder(a,b,so,co);input a,b;/輸入端口output so,co;/輸出端口,so為本位和,co為向高位的進(jìn)位reg so,co; /寄存器變量說明,在過程中賦值的變量必須說明成reg型

32、always (a,b) begin /過程語句開始,當(dāng)敏感信號a、b有變化,過程就執(zhí)行case(a,b) /case語句開始2b00: begin so=0; co=0; end/塊語句用begin 和end 括起2b01: begin so=1; co=0; end2b10: begin so=1; co=0; end2b11: begin so=0; co=1; enddefault: begin so=0; co=0; endendcase/case語句結(jié)束end/過程語句結(jié)束endmodule半加器描述之三,基于case 語句的類真值表描述Verilog HDL對二進(jìn)制數(shù)的表示格式

33、其中:(1) 位寬與進(jìn)制之間用左撇號分開;(2) 位寬用十進(jìn)制數(shù)表示,描述數(shù)字用二進(jìn)制數(shù)表示時(shí)的位數(shù);(3) 進(jìn)制用字母表示,可以是B、O、H、D之一,不區(qū)分大小寫,分別表示二進(jìn)制、八進(jìn)制、十六進(jìn)制和十進(jìn)制。例如4hF表示二進(jìn)制1111,也可表示成4b1111,或4o17,或4d15。 【例4.7】 在例4.6的半加器的基礎(chǔ)上,用Verilg HDL設(shè)計(jì)一位全加器。 由于一個(gè)Verilog模塊對應(yīng)一個(gè)硬件電路功能實(shí)體器件,利用Verilog元件例化語句設(shè)計(jì)上層模塊,將半加器實(shí)體器件連接起來構(gòu)成一個(gè)完整的系統(tǒng)。module f_adder(ain,bin,cin,sout,cout); /一位全

34、加器頂層設(shè)計(jì)描述 input ain,bin,cin;/定義輸入變量 output sout,cout;/定義輸出變量 wire p1,p2,p3;/定義網(wǎng)線型變量用作內(nèi)部元件間連線 h_adder u1(ain,bin,p2,p1);/半加器電路例化構(gòu)成元件u1,用位置關(guān)聯(lián)法 h_adder u2(.a(p2),.b(cin),.co(p3),.so(sout);/半加器電路例化構(gòu)成元件u2,用端口名關(guān)聯(lián) or u3(cout,p1,p3); /利用Verilog基本元件中的或門構(gòu)成的元件u3endmodule【例4.7】 在例4.6的半加器的基礎(chǔ)上,用Verilg HDL設(shè)計(jì)一位全加器。m

35、odule f_adder(ain,bin,cin,sout,cout); /一位全加器頂層設(shè)計(jì)描述 input ain,bin,cin;/定義輸入變量 output sout,cout;/定義輸出變量 wire p1,p2,p3;/定義網(wǎng)線型變量用作內(nèi)部元件間連線 h_adder u1(ain,bin,p2,p1);/半加器電路例化構(gòu)成元件u1,用位置關(guān)聯(lián)法 h_adder u2(.a(p2),.b(cin),.co(p3),.so(sout);/半加器電路例化構(gòu)成元件u2,用端口名關(guān)聯(lián) or u3(cout,p1,p3); /利用Verilog基本元件中的或門構(gòu)成的元件u3endmodul

36、e程序中用了兩個(gè)元件化語句:h_adder: 半加器元件u1和u2or : 或門u3。u1用位置關(guān)聯(lián)法,分別將當(dāng)然ain,bin,p2,p1與半加器中的端口a,b,co,so按位置關(guān)系一一對應(yīng),由于是按位置關(guān)聯(lián),所以其書寫順序不能隨意更改u2采用端口名關(guān)聯(lián)法: (.a(p2),.b(cin),.co(p3),.so(sout);由于是按端口名關(guān)聯(lián),所以其書寫順序可以任意。元件例化語句門元件例化Verilog 基本語言綜合器嵌入了基本元件(Primitives),以支持一些通用的簡單電路的綜合。常用的有:and,nand, or,nor, xor,xnor,分別表示:與門,與非門,或門,或非門,

37、異或門,異或非門,其共同特點(diǎn)是:只有一個(gè)輸出,但可以有多個(gè)輸入。具體使用時(shí),可與元件例化語句相似的方法,按位置關(guān)系代入具體端口名即可,格式如下:基本元件名 實(shí)例名(輸出,輸入1,輸入2,輸入n)其中實(shí)例名可以省略,例4.7的程序代碼中實(shí)例名為u3就是一個(gè)或門的具體應(yīng)用,其中輸出端口是cout,輸入端口是網(wǎng)線型中間結(jié)點(diǎn)p1和p3or u3(cout,p1,p3); 全加器也可以不用半加器而直接描述如下,比如完全按運(yùn)算結(jié)果用一個(gè)assign語句實(shí)現(xiàn)運(yùn)算功能的程序如下:module f_adder(ain,bin,cin,sout,cout);/一位全加器頂層設(shè)計(jì)描述 input ain,bin,c

38、in;/定義輸入變量 output sout,cout;/定義輸出變量 assign cout,sout=ain+bin+cin;endmodule全加器的描述二module () ;output 輸出端口列表:input 輸入端口列表:/ (1) 使用assign語句定義邏輯功能wire 結(jié)果信號名;assign = 表達(dá)式 ;/ (2) 使用always塊定義邏輯功能always ()begin/ 過程賦值語句/ if語句/ case語句/ while,repeat,for循環(huán)語句/ task,function調(diào)用end/ (3) 元件例化 ();/ 模塊元件例化 (); / 門元件例化e

39、ndmoduleVerilog HDL模塊的模版(僅考慮用于邏輯綜合的部分)Verilog HDL的語句文字規(guī)則1. 整數(shù)可以用多種數(shù)制形式表示,一般格式: 其中,位寬是指二進(jìn)制數(shù)的位數(shù),進(jìn)制是字母B、H、O、D(不區(qū)分大寫?。┲?,分別表示二進(jìn)制、十六進(jìn)制、八進(jìn)制、十進(jìn)制。例如:2. 標(biāo)識(shí)符: 以字母或下劃線開頭,由字母、數(shù)字、下劃線和$符號構(gòu)成,區(qū)分大小寫。例如:A3,clk_1,RST,Half_Adder8b1010_0110用二進(jìn)制表示的8位二進(jìn)制數(shù),其中的下劃線是為了提高可讀性8hA6用十六進(jìn)制數(shù)表示的8位二進(jìn)制數(shù)8o246用八進(jìn)制數(shù)表示的8位二進(jìn)制數(shù)8d166用十進(jìn)制數(shù)表示的8位

40、二進(jìn)制數(shù)Verilog HDL的語句文字規(guī)則3. 邏輯值4. 保留字:Verilog HDL賦予了特定含義的標(biāo)識(shí)符,均為小寫。0表示邏輯01表示邏輯1z或Z表示高阻x或X表示不確定值Verilog HDL的保留字Verilog HDL的保留字Verilog HDL的常量Verilog HDL的常量1)整數(shù)型常量Verilog HDL的常量2)x和z值Verilog HDL的常量3)負(fù)數(shù)Verilog HDL的常量4)parameter常量Verilog HDL中變量的數(shù)據(jù)類型1. 網(wǎng)線型端口的默認(rèn)類型,用于說明端口以外的信號或連線性質(zhì)的變量。網(wǎng)線型變量可以是單線的(1bit),也可以是多線的,

41、其說明格式有以下兩種形式:例如:wire a,b,c;wire7.0 dta,dtb;wire ,, ;wiremsb:lsb ,, ;3. 整數(shù)類型用于說明在for循環(huán)中用的控制變量等,默認(rèn)是32位二進(jìn)制數(shù)的寬度,說明格式為:例如:integer k,cnt;integer ,, ;2. 寄存器型用于說明在過程塊中賦值的端口或變量,其說明格式有以下兩種形式:例如:reg x,y;reg7.0 q1,q2;reg ,, ;regmsb:lsb ,, ;Verilog HDL中變量的數(shù)據(jù)類型Verilog HDL的運(yùn)算符設(shè)有如下定義:wier3:0 A=4b0101,B=4b0011,X;wie

42、r7:0 C=8h00;wire F=0;操作類別運(yùn)算符及其含義例子運(yùn)算結(jié)果算術(shù)運(yùn)算+(加)-(減)*(乘)/(除)%(求余)X = A + BX = A - BX = A * BX = A / BX = A % BX = 4B1000X = 4B0010X 4B1111X 4B0001X 4B0010邏輯運(yùn)算!(邏輯非)&(邏輯與)|(邏輯或)C = !(A = B)C = A & 0C = A | 0C = 1C = 1C = 1位運(yùn)算(位取反)&(與)|(或) (異或)或(同或)X = AX = A & BX = A | BX = A BX = A BX = 4B1010X4B0001X

43、4B0111X = 4B0110C = 4B1001移位運(yùn)算(右移)C = A 2C = 8B00101000X = 4B 0001并位運(yùn)算(并位)C = A , B C = 8B 01010011Verilog HDL的運(yùn)算符操作類別運(yùn)算符及其含義例子運(yùn)算結(jié)果縮位運(yùn)算&(與)&(與非)|(或)|(或非)(異或) 或 (同或)F = &AF = &AF = |AF = |AF = AF = AF = 0F = 1F = 1F = 0F = 0F = 1關(guān)系運(yùn)算= (等于)!= (不等于) (大于)= (大于等于) BF = A = BF = A B ? A : BX = 4b0101賦值運(yùn)算= (

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論