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

下載本文檔

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

文檔簡(jiǎn)介

第3章組合邏輯電路

組合邏輯電路:電路在任一時(shí)刻的輸出狀態(tài)僅由該時(shí)刻的輸入信號(hào)決定,與電路在此信號(hào)輸入之前的狀態(tài)無(wú)關(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è)計(jì)一般步驟:(1)由實(shí)際邏輯問(wèn)題列出真值表;(2)由真值表寫出邏輯表達(dá)式;(3)化簡(jiǎn)、變換輸出邏輯表達(dá)式;(4)畫出邏輯圖。例3.3試用與非門設(shè)計(jì)一個(gè)三變量表決電路,表決規(guī)則為少數(shù)服從多數(shù).解:(1)列真值表設(shè):由A、B、C表示三個(gè)輸入變量,F(xiàn)表示表決結(jié)果。并設(shè)A、B、C為1表示贊成,為0表示反對(duì);F為1表示表決通過(guò),為0表示不通過(guò)。ABCF000000100100011100010111011111(2)化簡(jiǎn)、求最簡(jiǎn)函數(shù)表達(dá)式ABC01000111101111F=AB+AC+BC=AB·AC·BC(3)畫出電路圖ABCF&&&&例3.4設(shè)計(jì)一個(gè)兩位二進(jìn)制數(shù)比較器。解設(shè)被比較的數(shù)分別為A=A1A0,B=B1B0;比較的結(jié)果為:A1A0>B1B0時(shí),輸出F1=1;A1A0=B1B0時(shí),輸出F2=1;A1A0<B1B0時(shí),輸出F3=1.列真值表:A1A0B1B0

F1

F2

F3

A1A0B1B0

F1

F2

F30000010100010000010011001100001000110100100011001101100101001001100100010101011011000110001111010001110011111010畫卡諾圖化簡(jiǎn):A1A0B1B00001111000011110111111F1F1=A1B1+A1A0B0+A0B1B0A1A0B1B000011110000111101111F2F2=A1A0B1B0+A1A0B1B0+A1A0B1B0+

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

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

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

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

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

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

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

無(wú)法通過(guò)修改邏輯設(shè)計(jì)來(lái)消除。

消除功能冒險(xiǎn)的方法:

(1)增加選通脈沖;

(2)

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

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

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

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

(2)可以通過(guò)修改邏輯設(shè)計(jì)來(lái)消除。(1)

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

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

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

增加乘積項(xiàng)例如:F=AC+BC,

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

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

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

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

一個(gè)復(fù)雜的數(shù)字電路系統(tǒng)的VerilogHDL模型通常是由若干個(gè)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)也獲得通過(guò),多數(shù)綜合器、仿真器都已支持Verilog-2001標(biāo)準(zhǔn)3.5.2Verilog基本語(yǔ)法1.標(biāo)識(shí)符和關(guān)鍵字

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

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

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

1111-1

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

1111-128

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

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

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

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

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

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

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

參數(shù)(parameter)是由一個(gè)標(biāo)識(shí)符和一個(gè)常數(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)于實(shí)際硬件電路中各種物理連接,最常用的可綜合的net型信號(hào)變量是wire型,定義格式如下:

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

wirea,b,y;

//聲明3個(gè)1位的wire型變量

wire[7:0]usb_data;

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

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

例如:

regclock;

//聲明1個(gè)1位的reg型變量

reg[7:0]counter;

//聲明1個(gè)8位位寬的reg型變量

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

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

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

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

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

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

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

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

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

?:

(信號(hào)=條件?

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

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

拼接運(yùn)算符

{}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)成的。每個(gè)模塊的內(nèi)容都嵌在module和endmodule兩個(gè)關(guān)鍵字之間;每個(gè)模塊實(shí)現(xiàn)特定的功能。每個(gè)模塊首先要進(jìn)行端口定義,并說(shuō)明輸入和輸出口(input、output或inout),然后對(duì)模塊的功能進(jìn)行定義。Verilog程序書寫格式自由,一行可以寫幾個(gè)語(yǔ)句,一個(gè)語(yǔ)句也可以分多行寫。除了endmodule等少數(shù)語(yǔ)句外,每個(gè)語(yǔ)句的最后必須有分號(hào)??捎?*……*/和//……對(duì)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;//定義信號(hào)的數(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)定義說(shuō)明模塊的輸入輸出端口類型其格式為:input

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

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

//輸出端口inout

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

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

Verilog邏輯功能的描述方式1.結(jié)構(gòu)描述方式(門級(jí))調(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é)點(diǎn)聲明

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】

用門級(jí)描述方式描述以下電路邏輯功能。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á)式中的“~”為非運(yùn)算符、

“|”為

或運(yùn)算、“&”為與運(yùn)算符*/endmodule

【例3.6】

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

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

outputF;

//輸出端口聲明

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

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

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

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

default:F=0;

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

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

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

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

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

(上升沿:posedge

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

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

分支1:語(yǔ)句1;分支2:語(yǔ)句2;……default:語(yǔ)句m;

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

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

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

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

語(yǔ)句;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語(yǔ)句描述一個(gè)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語(yǔ)句描述一個(gè)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語(yǔ)句描述一個(gè)4選1數(shù)據(jù)選擇器的Verilog代碼。

moduleVrvoter7(S,F);

input[7:1]S;

outputF;

regF;

reg[2:0]SUM;

integerk;

always@(S

)begin

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論