數(shù)字邏輯電路與系統(tǒng)設(shè)計(第4版)課件 第3章 組合邏輯電路_第1頁
數(shù)字邏輯電路與系統(tǒng)設(shè)計(第4版)課件 第3章 組合邏輯電路_第2頁
數(shù)字邏輯電路與系統(tǒng)設(shè)計(第4版)課件 第3章 組合邏輯電路_第3頁
數(shù)字邏輯電路與系統(tǒng)設(shè)計(第4版)課件 第3章 組合邏輯電路_第4頁
數(shù)字邏輯電路與系統(tǒng)設(shè)計(第4版)課件 第3章 組合邏輯電路_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章組合邏輯電路

組合邏輯電路:電路在任一時刻的輸出狀態(tài)僅由該時刻的輸入信號決定,與電路在此信號輸入之前的狀態(tài)無關(guān)。3.1概述3.2組合邏輯電路的分析分析步驟:(1)根據(jù)邏輯電路圖,寫出輸出邏輯函數(shù)表達(dá)式;(2)根據(jù)邏輯表達(dá)式,列出真值表;(3)由真值表或表達(dá)式分析電路功能.例3.1分析下圖所示邏輯電路F=P2+P3+P4P2=A·P1P3=B·P1P4=C·P1P1=ABC=(A+B+C)·ABC真值表:ABCF000100100100011000010101001111邏輯功能:

一致電路=ABC+ABCP1P2P3P4&ABCF&&&≥13.3組合邏輯電路設(shè)計一般步驟:(1)由實際邏輯問題列出真值表;(2)由真值表寫出邏輯表達(dá)式;(3)化簡、變換輸出邏輯表達(dá)式;(4)畫出邏輯圖。例3.3試用與非門設(shè)計一個三變量表決電路,表決規(guī)則為少數(shù)服從多數(shù).解:(1)列真值表設(shè):由A、B、C表示三個輸入變量,F(xiàn)表示表決結(jié)果。并設(shè)A、B、C為1表示贊成,為0表示反對;F為1表示表決通過,為0表示不通過。ABCF000000100100011100010111011111(2)化簡、求最簡函數(shù)表達(dá)式ABC01000111101111F=AB+AC+BC=AB·AC·BC(3)畫出電路圖ABCF&&&&例3.4設(shè)計一個兩位二進(jìn)制數(shù)比較器。解設(shè)被比較的數(shù)分別為A=A1A0,B=B1B0;比較的結(jié)果為:A1A0>B1B0時,輸出F1=1;A1A0=B1B0時,輸出F2=1;A1A0<B1B0時,輸出F3=1.列真值表:A1A0B1B0

F1

F2

F3

A1A0B1B0

F1

F2

F30000010100010000010011001100001000110100100011001101100101001001100100010101011011000110001111010001110011111010畫卡諾圖化簡:A1A0B1B00001111000011110111111F1F1=A1B1+A1A0B0+A0B1B0A1A0B1B000011110000111101111F2F2=A1A0B1B0+A1A0B1B0+A1A0B1B0+

A1A0B1B0A1A0B1B00001111000011110111111F3F3=A1B1+A1A0B0+A0B1B0按F1、F2和F3表達(dá)式可方便地用門電路實現(xiàn)比較器的邏輯功能。3.4組合邏輯電路中的冒險

前面分析組合邏輯電路時,沒有考慮門電路的延遲時間對電路的影響。實際上,由于門電路延遲時間的關(guān)系,在輸入信號變化的瞬間可能會使邏輯電路產(chǎn)生錯誤輸出。通常把這種現(xiàn)象稱為“冒險”。產(chǎn)生冒險的原因:≥11AF1=A+A=1理想情況AAF1實際情況由于A和A變化后到達(dá)或(與)門的時間不同。0冒險&1AF2=AA=0理想情況AAF2實際情況1冒險組合電路中冒險的分類1.靜態(tài)冒險:輸入變化的前后,輸出不應(yīng)該變化,但實際

上卻出現(xiàn)了0→1→0,或1→0→1的情況。2.動態(tài)冒險:輸入變化的前后,輸出是變化的,即0→1,

或1→0;但實際上卻出現(xiàn)了0→1→0→1,

或1→0→1→0短暫反復(fù)的情況。動態(tài)冒險通常是由前級電路的靜態(tài)冒險引起的靜態(tài)冒險的分類3.4.1功能冒險與消除方法

(1)多個輸入發(fā)生變化;

(2)由電路的邏輯功能決定,

無法通過修改邏輯設(shè)計來消除。

消除功能冒險的方法:

(1)增加選通脈沖;

(2)

在輸出端并聯(lián)電容器:邏輯電路在較慢速度下工作,

可以在輸出端到地間并聯(lián)一電容,該電容和邏輯門

的輸出電阻構(gòu)成RC低通網(wǎng)絡(luò),對窄脈沖起平滑作用。3.4.2邏輯冒險與消除方法

(1)通常是只有一個輸入發(fā)生變化;

(2)可以通過修改邏輯設(shè)計來消除。(1)

發(fā)現(xiàn)并消去互補(bǔ)變量例如:F=(A+B)(A+C)

在B=C=0時,F(xiàn)=AA.若直接根據(jù)這個邏輯表達(dá)式組成電路,就可能出現(xiàn)冒險。將上式寫成:F=AC+AB+BC,

已將AA去掉,則不會出現(xiàn)冒險。消除邏輯冒險的方法:(2)

增加乘積項例如:F=AC+BC,

當(dāng)A=B=1時,F(xiàn)=C+C.若直接根據(jù)這個邏輯表達(dá)式組成電路,就可能出現(xiàn)冒險。(3)增加選通脈沖;將上式寫成:F=AC+BC+AB,這樣,當(dāng)A=B=1時,不會出現(xiàn)F=C+C,所以C狀態(tài)的變化,不會影響輸出。(4)輸出端并聯(lián)電容器3.5硬件描述語言----Verilog

利用可編程邏輯器件(PLD,ProgrammableLogicDevice)來實現(xiàn)電路的設(shè)計

硬件描述語言(HDL,HardwareDescriptionLanguage)就是可以描述硬件電路的功能VHDL和VerilogHDL是應(yīng)用最為廣泛的國際標(biāo)準(zhǔn)電子設(shè)計語言3.5.1硬件描述語言Verilog語言一種用于數(shù)字系統(tǒng)設(shè)計的語言,它既是一種行為描述語言也是一種結(jié)構(gòu)描述語言。

運用VerilogHDL設(shè)計一個系統(tǒng)時,一般采用自頂向下的層次化、結(jié)構(gòu)化的設(shè)計方法。

一個復(fù)雜的數(shù)字電路系統(tǒng)的VerilogHDL模型通常是由若干個VerilogHDL模塊構(gòu)成,模塊(Module)是VerilogHDL的基本單元。Verilog于1995年成為IEEE標(biāo)準(zhǔn),稱為IEEEStandard1364-1995(Verilog-1995)IEEE“1364-2001”標(biāo)準(zhǔn)(Verilog-2001)也獲得通過,多數(shù)綜合器、仿真器都已支持Verilog-2001標(biāo)準(zhǔn)3.5.2Verilog基本語法1.標(biāo)識符和關(guān)鍵字

給對象(如模塊名、電路的輸入與輸出端口、變量等)取名所用的字符串稱為標(biāo)識符。標(biāo)識符通常由英文字母、數(shù)字、$或者下劃線組成,并且規(guī)定標(biāo)識符必須以英文字母或下劃線開始,不能以數(shù)字或$符開頭。

關(guān)鍵字是Verilog本身規(guī)定的特殊字符串,用來定義語言結(jié)構(gòu),每個關(guān)鍵字均有其特定的語法作用,用戶不能隨便將關(guān)鍵字當(dāng)標(biāo)識符來使用。關(guān)鍵詞均為小寫的英文字符串。2.注釋符和間隔符(1)單行注釋是以“//”開始到本行結(jié)束,注釋內(nèi)容只能寫在一行中;(2)多行注釋是以“/*”開始,到“*/”結(jié)束,注釋的內(nèi)容可以跨越多行。間隔符包括空格符、制表符、換行符及換頁符。Verilog支持單行注釋和多行注釋這兩種形式的注釋符:3.信號的值、整數(shù)和參數(shù)Verilog支持代表單位信號的標(biāo)量線網(wǎng)和變量,以及代表多位信號的向量。每個單位信號有四種可能的值:0(邏輯0、邏輯假);1(邏輯1、邏輯真);x或X(不確定的值);z或Z(高阻態(tài)、三態(tài))。Verilog中整數(shù)的表示有兩種,一種是簡單十進(jìn)制數(shù)的格式,例如:127

//有符號數(shù),用8位二進(jìn)制數(shù)表示為0111

1111-1

//有符號數(shù),用8位二進(jìn)制數(shù)表示為1111

1111-128

//有符號數(shù),用8位二進(jìn)制數(shù)表示為1000

0000Verilog中整數(shù)還可以用帶基數(shù)格式的形式表示,表示方法如下:

<+/-><位寬>'<進(jìn)制><數(shù)值>8'b10101100

//位寬為8的無符號二進(jìn)制數(shù)10101100-8'd5

//十進(jìn)制數(shù)-5,用8位二進(jìn)制補(bǔ)碼形式存儲,即111110116'o45

//位寬為6的八進(jìn)制數(shù),即1001018'hfx

//位寬為8的十六進(jìn)制數(shù),即1111xxxx

參數(shù)(parameter)是由一個標(biāo)識符和一個常數(shù)組成,通常出現(xiàn)在模塊內(nèi)部,僅在聲明該參數(shù)的模塊內(nèi)部起作用,一般用于指定傳輸延遲、變量的位寬等。例如:

parameterk=8;

parameterS0=2'b00,S1=2'b01,S2=2'b10,S3=2'b11;4.數(shù)據(jù)類型

Verilog的數(shù)據(jù)類型有四種邏輯狀態(tài)取值:0、1、x或X、z或Z,其中0、1、z是可綜合的,而x表示不定值,通常只用在仿真中。Verilog主要有兩種數(shù)據(jù)類型:net型、variable型。net型數(shù)據(jù)相當(dāng)于實際硬件電路中各種物理連接,最常用的可綜合的net型信號變量是wire型,定義格式如下:

wire[n-1:0]變量名1,變量名2,……,變量名n;例如:

wirea,b,y;

//聲明3個1位的wire型變量

wire[7:0]usb_data;

//聲明1個8位位寬的wire型變量在Verilog中最常用的可綜合的variable型信號變量是reg型,定義格式如下:

reg[n-1:0]變量名1,變量名2,……,變量名n;

例如:

regclock;

//聲明1個1位的reg型變量

reg[7:0]counter;

//聲明1個8位位寬的reg型變量

在Verilog模塊中如果沒有明確地定義輸入、輸出信號的數(shù)據(jù)類型,則默認(rèn)為是wire型;如果沒有明確地聲明wire型的位寬,則位寬為1位。variable型變量只能在過程語句中(例如:initial、always)被賦值,在下一條賦值語句再次給該變量賦值之前,變量的值保持不變。3.5.3Verilog運算符(1)算術(shù)運算符

+,-,*,/,%(取余數(shù))(2)邏輯運算符

&&(邏輯與),||(邏輯或),!(邏輯非)(3)位運算符

&(與),|(或),~(非),^(異或),

^~/~^(同或)(4)縮位運算符

&(縮位與),|(縮位或),~&(縮位與非)

~|(縮位或非),^(縮位異或),^~/~^(縮位同或)(5)關(guān)系運算符

>,<,>=,<=(6)相等運算符

==(相等),!=(不等),===(全等),!==(不全等)(7)條件運算符

?:

(信號=條件?

表達(dá)式1:表達(dá)式2)(8)移位運算符

<<(左移),>>(右移)(9)

拼接運算符

{}3.5.4

Verilog程序的基本結(jié)構(gòu)moduleaoi(a,b,c,d,f);inputa,b,c,d; outputf; assignf=~((a&b)|(~(c&d)));endmodule描述接口描述邏輯功能Verilog程序是由模塊構(gòu)成的。每個模塊的內(nèi)容都嵌在module和endmodule兩個關(guān)鍵字之間;每個模塊實現(xiàn)特定的功能。每個模塊首先要進(jìn)行端口定義,并說明輸入和輸出口(input、output或inout),然后對模塊的功能進(jìn)行定義。Verilog程序書寫格式自由,一行可以寫幾個語句,一個語句也可以分多行寫。除了endmodule等少數(shù)語句外,每個語句的最后必須有分號??捎?*……*/和//……對Verilog程序作注釋。

module

aoi(a,b,c,d,f);/*

模塊名為aoi,端口列表a,b,c,d,f

*/input

a,b,c,d; //模塊的輸入端口為a,b,c,doutputf; //模塊的輸出端口為fwire

a,b,c,d,f;//定義信號的數(shù)據(jù)類型assignf=~((a&b)|(~(c&d)));//邏輯功能描述endmodule1.模塊聲明模塊聲明包括模塊名字,模塊輸入、輸出端口列表。模塊定義格式如下:module

aoi(a,b,c,d,f);input

a,b,c,d; outputf; //Verilog1995標(biāo)準(zhǔn)module

aoi(inputa,b,c,d,outputf); //Verilog2001標(biāo)準(zhǔn)2.端口(Port)定義說明模塊的輸入輸出端口類型其格式為:input

端口名1,端口名2,……端口名n; //輸入端口output

端口名1,端口名2,……端口名n;

//輸出端口inout

端口名1,端口名2,……端口名n; //輸入輸出端口

多位端口定義:output[width-1:0]端口名1,端口名2,……端口名n;說明端口或內(nèi)部用到的信號類型常用的信號類型有線網(wǎng)型(wire)、寄存器型(reg)、整數(shù)型(integer)等。如果信號的數(shù)據(jù)類型沒有定義,則綜合器將其默認(rèn)為為wire型。其格式為:輸出端口可以聲明為reg型,但輸入和雙向端口信號不能聲明為reg型。3.信號類型聲明4.邏輯功能定義Verilog模塊中最核心的部分是邏輯功能定義。定義邏輯功能的幾種基本方法:結(jié)構(gòu)描述:調(diào)用元件(元件例化)數(shù)據(jù)流描述:用assign連續(xù)賦值語句定義行為描述:用always過程塊定義3.5.5

Verilog邏輯功能的描述方式1.結(jié)構(gòu)描述方式(門級)調(diào)用門元件的格式如下:

門元件名字<例化的門名字>(<端口列表>)普通門的端口列表按下面順序:

(輸出,輸入1,輸入2,輸入3……);例如:

andU1(out1,in1,in2,in3);//三輸入與門,名字為U1(可省略)常用的VerilogHDL的內(nèi)置門元件

and(與門)

;

nand(與非門);

or

(或門)

nor

(或非門);

xor(異或門)

xnor(同或門);

not(非門)

;

buf(緩沖器);

……moduleVrxnor_1(A,B,F);//Verilog-1995,定義模塊名為”Vrxnor_1”

inputA,B;//輸入端口聲明

outputF;//輸出端口聲明

wireF1,F2,F3;//電路內(nèi)部節(jié)點聲明

norU1(F1,A,B);//”nor”是Verilog

內(nèi)部定義的或非門,調(diào)用名U1可以省略

orU2(F2,A,F1);//”or”是Verilog

內(nèi)部定義的或門orU3(F3,B,F1);andU4(F,F2,F3);//”and”是Verilog

內(nèi)部定義的與門endmodule【例3.5】

用門級描述方式描述以下電路邏輯功能。F1F2F3

2.數(shù)據(jù)流描述方式

主要使用assign持續(xù)賦值,多用于描述組合邏輯電路。

moduleVrxnor_2(A,B,F);//Verilog-1995,定義模塊名為”Vrxnor_2”

inputA,B;//輸入端口聲明

outputF;//輸出端口聲明

wireF;//變量的數(shù)據(jù)類型聲明

assignF=(A|(~(A|B)))&(B|(~(A|B)));/*表達(dá)式中的“~”為非運算符、

“|”為

或運算、“&”為與運算符*/endmodule

【例3.6】

用數(shù)據(jù)流描述方式描述以下電路邏輯功能。moduleVrxnor_3(A,B,F);

inputA,B;//輸入端口聲明

outputF;

//輸出端口聲明

regF;//變量的數(shù)據(jù)類型聲明

always@(AorB)//電路的功能描述begin

case({A,B})//用case語句完成電路功能的描述

2'b00:F=1;2'b01:F=0;2'b10:F=0;2'b11:F=1;

default:F=0;

endcaseendendmodule3.行為描述方式【例3.7】用行為描述方式描述電路邏輯功能。

Verilog語言基本描述語句1.賦值語句(1)連續(xù)賦值語句格式:assign變量名=表達(dá)式;給線網(wǎng)型(wire)變量賦值;多用于組合邏輯電路的賦值;只要右邊表達(dá)式的值有變化,就給左邊變量重新賦值;不能給寄存器型(reg)變量賦值。(2)過程賦值語句分為阻塞賦值和非阻塞賦值兩類:非阻塞賦值:“<=”

例如:begina<=5;b<=a;c<=b;end并行執(zhí)行語句結(jié)果:a=5,b=a原來的值c=b原來的值既可以用來描述組合電路,也可以描述時序電路。阻塞賦值:“=”

例如:begina=5;b=a;c=b;end順序執(zhí)行語句結(jié)果:a=b=c=5只能給寄存器型(reg)變量賦值;用于always和initial語句內(nèi)賦值;2.結(jié)構(gòu)說明語句(1)always語句

格式:always@(敏感事件列表);always@(*);程序一開始就執(zhí)行,不斷重復(fù),直至程序結(jié)束;一個模塊可以有多個always說明語句;always塊中的輸出必須是reg類型;敏感事件可以是電平觸發(fā),也可以是邊沿觸發(fā)。

(上升沿:posedge

下降沿:negedge)(2)initial語句格式:initialbegin……end程序一開始就執(zhí)行,只執(zhí)行一次;主要用于初始化和波形生成。3.條件語句(1)if-else語句格式:if(條件表達(dá)式1)

語句1;elseif(條件表達(dá)式2)語句2;……else語句m;根據(jù)某個條件來確定是否執(zhí)行其后的語句(2)case語句格式:case(條件表達(dá)式)

分支1:語句1;分支2:語句2;……default:語句m;

endcase4.循環(huán)語句(1)for語句格式:for(i=0;i<=3;i++)

語句;用來控制執(zhí)行語句的執(zhí)行次數(shù)(2)while語句格式:while(條件表達(dá)式)

語句;(3)repeat語句格式:repeat(循環(huán)次數(shù))

語句;(4)forever語句格式:forever

語句;moduleVrmux2to1(S,F,W1,W0);

inputS,W1,W0;

outputF;

regF;

always@(SorW1orW0

)if

(S==0)

F=W0;

else

F=W1;

endmodule【例3.8】用if-else語句描述一個2選1數(shù)據(jù)選擇器的Verilog代碼。

moduleVrmux4to1(S,F,W);

input[3:0]W;

input[1:0]S;

outputF;

regF;

always@(*

)if

(S==2'b00)

F=W[0];elseif

(S==2'b01)

F=W[1];elseif

(S==2'b10)

F=W[2];else

F=W[3];

endmodule【例3.9】用多重if語句描述一個4選1數(shù)據(jù)選擇器的Verilog代碼。

moduleVrmux4to1_2(S,F,W3,W2,W1,W0);

inputW3,W2,W1,W0;

input[1:0]S;

outputF;

regF;

always@(*

)begin

case(S)

2'b00:F=W0;

2'b01:F=W1;

2'b10:F=W2;

2'b11:F=W3;

default:F=W0;

endcase

endendmodule【例3.10】用case語句描述一個4選1數(shù)據(jù)選擇器的Verilog代碼。

moduleVrvoter7(S,F);

input[7:1]S;

outputF;

regF;

reg[2:0]SUM;

integerk;

always@(S

)begin

溫馨提示

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

評論

0/150

提交評論