




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、前言為什么要學(xué)數(shù)字電路篇:數(shù)字電路是 FPGA 的敲門磚、墊腳石,為什么這樣說呢,因?yàn)閿?shù)字電路主要的內(nèi)容就是邏輯和時序,而邏輯與時序就是 FPGA 設(shè)計的。邏輯無非就是與門、或門、非門,時序無非就是鎖存器、觸發(fā)器、寄存器等等,再復(fù)雜的設(shè)計也就是用這些基本 電路搭起來的,那么我們只有知道了這些基本電路的功能才能搭建出想要的電路。數(shù)字電路篇包含了哪些內(nèi)容:該篇是從數(shù)字邏輯最基礎(chǔ)的 0 和 1 入手,以邏輯代數(shù)為基礎(chǔ)詳細(xì)來講解與門、或門、非門等基本門電路的功能,又以基本的門電路為基礎(chǔ),進(jìn)一步學(xué)習(xí)了組合 邏輯電路,其中不同的與或非門組合,可構(gòu)造出不同的組合邏輯電路,例如編碼器、譯碼器、數(shù) 據(jù)選擇器等。
2、接下來在組合邏輯電路的基礎(chǔ)上,我們又進(jìn)一步了解學(xué)習(xí)時序邏輯電路,時序邏輯 電路不同于組合邏輯電路,時序邏輯電路能做到組合電路做不到的事情,那就是讓電路具有“記 憶”功能,如寄存器、計數(shù)器等。最后,我們深入探討讀者最為關(guān)心的可編程器件的內(nèi)部結(jié)構(gòu)和原理,為進(jìn)一步學(xué)習(xí) FPGA 原理打下了基礎(chǔ)。目錄第一章 數(shù)字電路的基礎(chǔ)知識1§1.1 數(shù)字電路和模擬電路3§1.2 數(shù)制與編碼 3§1.3 邏輯代數(shù) 4§1.4 硬件描述語言 5第二章 組合邏輯電路的分析與設(shè)計11§2.1 組合邏輯電路的分析方法13§2.2 公式化簡和卡諾圖化簡 142.2.
3、1 公式化簡法152.2.2 卡諾圖化簡法162.2.3 格雷碼19§2.3 組合邏輯電路的設(shè)計方法 20§2.4 競爭與 212.4.12.4.22.4.3現(xiàn)象的產(chǎn)生21邏輯功能的識別與消除24的識別與消除26第三章 組合邏輯電路的應(yīng)用29§3.1 編碼器313.1.1 編碼器的原理313.1.2 編碼器的使用方法333.1.3 利用 Verilog 來描述編碼器 35§3.2 譯碼器373.2.1 譯碼器的原理373.2.2 譯碼器的使用方法383.2.3 利用 Verilog 來描述譯碼器 393.2.4 譯碼器的應(yīng)用40§3.3 數(shù)據(jù)選
4、擇器413.3.1 數(shù)據(jù)選擇的原理413.3.2 數(shù)據(jù)選擇器的使用方法433.3.3 利用 Verilog 來描述數(shù)據(jù)選擇器 44§3.4 數(shù)值比較器443.4.1 數(shù)值比較器的原理453.4.2 數(shù)值比較器的使用方法453.4.3 利用 Verilog 來描述數(shù)值比較器 46§3.5 加法器473.5.1 加法器的原理473.5.2 加法器的使用方法493.5.3 利用 Verilog 來描述加法器 49第四章 時序邏輯電路的基礎(chǔ)知識51§4.1 鎖存器534.1.1 RS 鎖存器 534.1.2 門控 RS 鎖存器584.1.3 D 鎖存器594.1.4 空翻
5、現(xiàn)象61§4.2 觸發(fā)器 624.2.1 觸發(fā)器的原理624.2.2 利用 Verilog 來描述觸發(fā)器 64§4.3 寄存器 664.3.1 寄存器的原理664.3.2 寄存器的應(yīng)用674.3.3 利用 Verilog 來描述寄存器 69§4.4 計數(shù)器 704.4.1 計數(shù)器的原理704.4.2 計數(shù)器的應(yīng)用724.4.3 計利用 Verilog 來描述計數(shù)器 73第五章 時序邏輯電路的設(shè)計與分析75§5.1 時序邏輯電路的分析方法775.1.1 摩爾型電路的分析方法785.1.2 米里型電路的分析方法80§5.2 時序邏輯電路的設(shè)計方法
6、82第六章 可編程邏輯器件85§6.1 第一階段:器876.1.1 只讀器876.1.2 可編程只讀器 896.1.3 隨機(jī)存取器90§6.2 第二階段:可編程邏輯陣列和可編程陣列邏輯 906.2.1 可編程邏輯陣列906.2.2 可編程陣列邏輯91§6.3 第三階段:FPGA 和 CPLD 926.3.1 復(fù)雜可編程邏輯器件926.3.2 現(xiàn)場可編程門陣列94文檔修訂歷史99. 102學(xué)習(xí)交流105 第一章數(shù)字電路的基礎(chǔ)知識第一章數(shù)字電路的基礎(chǔ)知識§1.1 數(shù)字電路和模擬電路在學(xué)習(xí)數(shù)字電路之前,首先我們要了解什么是數(shù)字電路,想要弄明白什么是數(shù)字電路,那
7、不 得不提及一下數(shù)字信號和模擬信號這兩個概念。如圖 1.1 所示。所謂模擬信號,就是指隨時間連續(xù)變化的信號。比如溫度、速度等信號。所謂數(shù)字信號,就是指該信號無論從時間上還是從大小上看其變化都是不連續(xù)的,比如人數(shù)、數(shù)等信號。模擬信號數(shù)字信號vvttOO圖 1.1 模擬信號和數(shù)字信號當(dāng)我們知道了數(shù)字信號和模擬信號,我們對數(shù)字電路和模擬電路就比較容易理解拉,所謂數(shù)字電路就是處理數(shù)字信號的電路,所謂模擬電路也就是處理模擬信號的電路。由于 FPGA 只能處理數(shù)字信號,所以我們這里只需要學(xué)習(xí)數(shù)字電路就可以了,對模擬電路感查找資料進(jìn)行學(xué)習(xí)。的讀者可以§1.2 數(shù)制與編碼我們知道了什么是數(shù)字電路之后
8、,接下來我們再來說一說數(shù)字電路中的數(shù)制與編碼。首先我 們介紹的是數(shù)制。所謂數(shù)制,指的是進(jìn)位計數(shù)制,也就是我們通常說的二進(jìn)制、十進(jìn)制、十六進(jìn) 制等常用進(jìn)制,對于這些常用進(jìn)制,我相信大家還是能夠理解的,我們就不在進(jìn)一步剖開去講了。 我們在這里講一講它們在 FPGA 中是如何表示的,這里我們就以 Verilog 語言為例。在 Verilog 中,我們想要表示一個二進(jìn)制,首先我們要給出二進(jìn)制數(shù)的長度,其次我們還要給出二進(jìn)數(shù)的標(biāo)識,最后我們才能給出二進(jìn)制數(shù)值,比如(8b1000,這里我們表示的是 8 位的二進(jìn)制數(shù) 1000)。如果我們想要表示一個十進(jìn)制數(shù),那么我們只需要將二進(jìn)制數(shù)的標(biāo)識換成十進(jìn)制數(shù)即可,
9、比如(8d8),十六進(jìn)制也是如此,比如(8h8)。這里讀者有兩點(diǎn)要注意的,第一點(diǎn)就是位數(shù)和標(biāo)識是可以省略的,默認(rèn)的位數(shù)是 32 位,默認(rèn)的進(jìn)制是十進(jìn)制;第二點(diǎn)就是數(shù)值決數(shù)的長度,我們知道數(shù)字電路的眼里只有二進(jìn)制,盡管我們表示的是十進(jìn)制,十六進(jìn)制,但是存入到數(shù)字電路里的仍是二進(jìn)制。我們知道了二進(jìn)制,知道了十進(jìn)制,也知道了十六進(jìn)制,但是我們不知道十進(jìn)制是如何變成 二進(jìn)制的,也不知道十六進(jìn)制是如何變成十進(jìn)制的,沒關(guān)系,不要怕,接下來我們就來解決這個4數(shù)字電路篇§1問題。由于我們這里學(xué)習(xí)數(shù)字電路不是為了應(yīng)付學(xué)校,而是為了能夠更好、更快的解決實(shí)際問題,所以我們就不需要閉卷、悶頭寫公式了,我們可
10、以查找資料,也可以借助工具,什么方法效率高,我們就用什么方法唄。在這里,我們就不介紹書本上的轉(zhuǎn)換方法拉,比如按權(quán)展開法, 就不在介紹了,我們這里介紹的是 Windows 自帶的程序員計算器,沒錯,就是它,我們的好朋友:程序員計算器。我們打開程序員計算器,只需要輕輕敲打幾下鍵盤,點(diǎn)幾下鼠標(biāo),就可以從容不迫的進(jìn)行轉(zhuǎn)換拉。說完了進(jìn)制,下面我們再來說一說編碼,所謂編碼就是以若干二進(jìn)制數(shù)表示一個十進(jìn)制,這 種二進(jìn)制編碼稱為二進(jìn)制編碼的十進(jìn)制數(shù),簡稱二-十進(jìn)制編碼,也可以稱為 BCD 碼(BinaryCoded Decimal)。常見的幾種編碼如表 1.1 所示。表 1.1常見編碼000000000000
11、000110010100010001000101000110200100010001001010111300110011001101100101401000100010001110100501011000101110001100601101001110010011101701111010110110101111810001011111010111110910011100111111001010上述的編碼規(guī)則各不相同,最常用的就屬 8421 碼,它的編碼規(guī)則其實(shí)就是將二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù),在這里,大家并不需要刻意的去背它,在后面我們用的多了,就自然而然的記住了。 其余的編碼這里大家混個臉熟,留
12、下點(diǎn)印象即可,在后面的學(xué)習(xí)中我們會對用到的編碼進(jìn)行詳細(xì)說明。§1.3 邏輯代數(shù)接下來感到害怕,一般要學(xué)習(xí)的邏輯代數(shù)是數(shù)字電路中的重點(diǎn)知識,聽到重點(diǎn)也許大家會重點(diǎn)知識就是比較難的知識,不過這里的邏輯代數(shù)知識同前面的基礎(chǔ)知識一樣,都是比較簡單的基礎(chǔ)知識。在邏輯代數(shù)中有三種基本的邏輯運(yùn)算,它們分別是:與、或、非。這三種基本的邏輯運(yùn)算可以組任意的復(fù)雜邏輯運(yùn)算。我們在實(shí)際應(yīng)用中為了減少邏輯運(yùn)算的數(shù)目,使數(shù)字電路的設(shè)計方便,我們通常還使用其他四種組合運(yùn)算,它們分別是:與非、或非、異或、同或。下面我們就對這些邏輯運(yùn)算進(jìn)行介紹。為了能讓大家更好的對比學(xué)習(xí)這些邏輯運(yùn)算,我將它們制作成了表格,如表 1.
13、2 所示。Zircon Opto-Electronic Technology CO.,.十進(jìn)制8421 碼5421 碼2421 碼余 3 碼余 3 循環(huán)碼§1數(shù)字電路的基礎(chǔ)知識5表 1.2 常見的門電路幾種表示方法通過表格我們可以知道這些邏輯運(yùn)算的邏輯符號、邏輯表達(dá)式和真值表。由于國外的電路符合和我們國內(nèi)的電路符號稍微有點(diǎn)不同,所以這里這兩種符號都列了出來,方便讀者對比學(xué)習(xí)??赐炅诉@個表格,相信大家對這些邏輯運(yùn)算都有了一定的了解。下面我們來看一下它們在FPGA 中是如何實(shí)現(xiàn)和使用的,在介紹它們是如何實(shí)現(xiàn)和使用之前,這里我們就先來了解一下硬件描述語言。§1.4 硬件描述語言在
14、 FPGA 的設(shè)計中,我們有多種設(shè)計方式,如繪制原理圖、編寫描述語言代碼等。早期的工程師對原理圖的設(shè)計方式情有獨(dú)鐘,這種輸入方式能夠很直觀的看出電路的結(jié)構(gòu)并快速理解 電路。隨著邏輯規(guī)模的不斷攀升,邏輯電路也越來越復(fù)雜,這種輸入方式就會顯得力不從心,應(yīng)付簡單的邏輯電路還算實(shí)用,應(yīng)付起復(fù)雜的邏輯電路就。因此取而代之的便是編寫描述語言代碼的方式,現(xiàn)今的絕大多數(shù)設(shè)計都是采用代碼來完成的。目前主流的硬件描述語言有兩種: 一種是 VHDL,另一種是 Verilog。VHDL 發(fā)展較早,語法嚴(yán)謹(jǐn);Verilog 類似 C 語言,語法風(fēng)格比較自由。對于初入 FPGA 的新手而言,掌握一種硬件描述語言是必要的。
15、如果有選擇癥的讀者,這里就要開始猶豫了,到底選擇哪一種硬件描述語言呢?那么這里我們就給出一些參考意見,若之前你有一定的 C 語言基礎(chǔ),那么不妨先學(xué) Verilog 硬件描述語言,這有助于加快對語法本身的理解。在將其中一門語言學(xué)精、用熟之后,最好也能夠著手掌握 另一門語言。如果沒有 C 語言基礎(chǔ)但是你想快速入門,那么這里我們?nèi)酝扑]學(xué)習(xí) Verilog,因?yàn)?VHDL 硬件描述語言比較難,不容易學(xué)習(xí),而 Verilog 硬件描述語言則相對比較容易學(xué)習(xí),能夠快速入門。至于到底先學(xué)哪一門,還需要讀者根據(jù)自身的情況做考量。本書主要以 Verilog 硬件描述語言為主,模塊是 Verilog HDL 的基
16、本描述,用于描述每個設(shè)計的功能或結(jié)構(gòu),以及與其他模塊通信的外部接口。一個模塊可以包括整個設(shè)計模塊或者設(shè)計模型的一部分,模塊的定義總是以般語法結(jié)構(gòu)如代碼 1.1 所示。module 開始,以endmodule 結(jié)尾,它的一輸出輸入 與(AND) 或(OR) 非(NOT) 與非(NAND) 或非(NOR) 異或(XOR) 同或(XNOR) 0 00 11 01 10001011111001110100001101001電路符號國內(nèi) & 1 1 & 1 =1 = 國外6數(shù)字電路篇§1代碼 1.1一般的 Verilog 語法結(jié)構(gòu)看到這里,有的讀者也許會皺起眉頭接受不了,因?yàn)樯?/p>
17、面給出的這個語法結(jié)構(gòu)不簡單呀,可以說的上是非常復(fù)雜的結(jié)構(gòu)了。大家不要著急。這個語法結(jié)構(gòu)看似復(fù)雜,其實(shí)它并不復(fù)雜,我們 只要理解了它,自然而然也就覺得不復(fù)雜了。下面我們就來詳細(xì)的介紹一下上面的語法結(jié)構(gòu):(1) “模塊名”是模塊唯一的標(biāo)示符,括號中以逗號分隔列出的端口名是該模塊的輸入、輸 出端口。(2) “端口類型說明”為 input(輸入)、output(輸出)、inout(雙向端口)三種類型,凡是在模塊名后面圓括號中出現(xiàn)的端口名都必須明確地說明其端口類型。(3) “參數(shù)定義”是將常量用符號常量代替,以增加程序的可讀性和可修改性,它是一個可 選擇的語句,用不到可以省略。(4) “數(shù)據(jù)類型定義”部
18、分用來指定模塊內(nèi)所用的數(shù)據(jù)對象是寄存器類型(reg 等)還是連線類型(wire 等)。剩下的三個語法:實(shí)例低層次模塊和基本門級元件、連續(xù)賦值語句和過程塊描述,如果我們再去講解它們,那么我相信大家一定會飛上了天,云里霧里的不知所措。下面我們就不在給 出概念了,直接以門電路為例,來看下我們是如何利用 Verilog 描述出一個門電路的。在數(shù)字邏輯中,我們想要表示一個與門,只需要 Y=A·B,或 Y=AB 就可以了。在 Verilog中,如果我們想要表示一個與門,那么我們只需要利用&&符號便可實(shí)現(xiàn),如果我們想要將結(jié)果輸出給 Y,那么我們只需要輸入 Y=A&&
19、B 便可實(shí)現(xiàn),下面我們給出與門電路的 Verilog 完整代碼,如代碼 1.2 所示。Zircon Opto-Electronic Technology CO.,.123456789101112131415161718module 模塊名(端口名 1,端口名 2,端口名 3,);端口類型說明(input,output,inout); 參數(shù)定義(可選);數(shù)據(jù)類型定義(wire,reg 等);/-以上為描述接口說明部分/-以下為描述邏輯功能部分/實(shí)例低層次模塊和基本門級元件; 連續(xù)賦值語句(assign);過程賦值語句(initial 和 always)功能描述語句; 任務(wù)和函數(shù);endmodul
20、e§1數(shù)字電路的基礎(chǔ)知識7代碼 1.2 與門電路的 Verilog 完整代碼下面我們就來簡單的介紹一下這段代碼,我們從代碼中可以看出,這個模塊是以關(guān)鍵字module 開始,以關(guān)鍵字 endmodule 結(jié)尾,module 后面的模塊名是 yumen,這個模塊名名是沒有限制的,不過我們這里建議大家,盡量用能夠描述整個模塊功能的名字去命名它。接下來 我們再來看一下端口,從代碼中我們可以看出這里有三個端口,分別是 A,B,Y。盡管我們知道了有三個端口,但是我們現(xiàn)在并不知道這三個端口是什么類型的,接著往下看,我們便能看到 端口類型說明,這時,我們便知道了 A 和 B 端口為輸入端口,Y 端口
21、為輸出端口。按照上面的語法結(jié)構(gòu),下面就到了數(shù)據(jù)類型定義,我們再次查看代碼會發(fā)現(xiàn),我們代碼中沒有數(shù)據(jù)類型定義,這是怎么回事?在這里,是因?yàn)?input 或者 output 默認(rèn)的數(shù)據(jù)類型是 wire 型,所以數(shù)據(jù)類型定義給省去了,當(dāng)然,我們也可以給它們再一次定義。比如:wire A,wire B,wire Y;這里大家要注意了,input 類型只能是 wire,我們一般對 input 類型不做任何數(shù)據(jù)類型定義。接下來我們接著看參數(shù)定義,由于我們這個 yumen 模塊代碼比較簡單,在這里我們就同樣也將參數(shù)定義給省去了。以上我們就將代碼中的接口說明部分給介紹完了,接下來我們接著介紹邏輯功能部分。在邏
22、輯功能部分相信大家看看之前的語法結(jié)構(gòu),在看看下面的與門代碼,相信大家已經(jīng)猜個不離十了,下面代碼中用的就是連續(xù)賦值語句 assign,賦值語句 assign 是wire 型變量的一種賦值語句,wire 型變量一般對應(yīng)到 FPGA 中的一根線,由于 wire 型的值是會隨著驅(qū)動源的變化而變化的,所以我們也將 assign 稱為“連續(xù)”賦值語句。小提示:如果大家想要實(shí)現(xiàn)其他運(yùn)算,那么我們只需要利用或(|)符號和非(!)符號就可以了,那如果我們想要實(shí)現(xiàn)一個與非運(yùn)算,是不是也只需要一個符號就可以實(shí)現(xiàn)與非了呢,是不行的,Verilog 中是沒有與非、或非、異或和同或這些組合邏輯運(yùn)算符號的,既然它們是組合邏
23、輯運(yùn)算,我們只需要利用與、或、非運(yùn)算將它們組合出來就可以了,比如這里我們想要實(shí)現(xiàn) 一個與非,那么我們就可以這樣 Y=!(A&&B)就可以實(shí)現(xiàn)與非運(yùn)算,其他組合邏輯運(yùn)算也都可以一一實(shí)現(xiàn)。為了讓大家能夠更好的理解,我們也將其他的兩種描述方法給出,讓大家能夠?qū)Ρ葘W(xué)習(xí)。首先我們給出的是低層次模塊的基本門級元件。如代碼 1.3 所示。1module yumen2(3A,B,Y4);56 input A;7 input B;8 output Y;910assign Y = A && B;1112endmodule8數(shù)字電路篇§1代碼 1.3低層次模塊的描述方法實(shí)現(xiàn)
24、與門電路小提示:Verilog HDL 內(nèi)置 26 個基本元件,其中 14 個是門級元件,12 個為開關(guān)級元件,這里只介紹 7 個基本門,and(與)、nand(與非)、or(或)、nor(或非)、not(非)、xor(異或)、 nxor(同或)。接下來我們給出的是過程塊描述方法,如代碼 1.4 所示。代碼 1.4 利用過程賦值語句來描述與門電路小提示:Verilog 中讓人困惑的地方就是 reg 和 wire 的使用,雖然reg 和 wire 的規(guī)則很簡單,但是很多新手總是難以理解,不知道什么時候用 reg 類型、什么時候用 wire 類型。其實(shí)它們的使用規(guī)則很簡單。在 Verilog 中,
25、任何過程賦值的左側(cè)變量必須為 reg,除此之外使用的變量必須這個問題的為 wire,沒有其他例外的情況。Verilog 為什么要區(qū)分 reg 和 wire 類型呢?和數(shù)據(jù)類型檢查有關(guān)。如果有人嘗試對同一個變量既做連續(xù)賦值,又做過程賦值,那么連續(xù)賦值要求用 net,過程賦值,要求用 reg 賦值。但是把同一個變量同時為兩種類型,就是語法錯誤,所以這就保證了設(shè)計者不能同一變量使用兩種不同類型賦值。always 和 assign 相對來說,還是 assign 比較容易理解,這里我將 always (A,B)詳細(xì)講Zircon Opto-Electronic Technology CO.,.12345
26、6789101112131415module yumen (A,B,Y);input A;input B; output Y;regY;always (A,B) /always (*) Y = A && B;endmodule123456789101112module yumen (A,B,Y);input A;input B; output Y;and (Y,A,B);endmodule§1數(shù)字電路的基礎(chǔ)知識9解一下,是等待語句,意思是 always 不斷循環(huán)等待 A 和 B 兩個敏感變量變化,不管 A和 B 是從高變低,還是從低變高,都將會執(zhí)行 always 下面
27、的 Y=A&&B 語句。如果 A 和 B 都沒有變化,那么 always 也將不往下執(zhí)行,將一直循環(huán)等待。新標(biāo)準(zhǔn)可以這樣書寫 always (*),其解釋如下:always (*)是個組合邏輯電路的描述方式;是為了防止你在設(shè)計時考慮不周全帶來一些操作,所以敏感表用*(表示全部的敏感變量),只要有任何輸入信號變化,其輸出立即發(fā)生變化。看到這里,我們問大家,上面的代碼理解了嗎?大家會說,理解了,這么簡單,不就是描述一個與門嘛。如果我們這么問:上面的代碼會了嗎?也許大家會說,。大概有這么兩條,1 是關(guān)鍵字記不住,2 是不知道關(guān)鍵字的語法結(jié)構(gòu),很可能寫出來的代碼不符合編譯器的要求。這是
28、正?,F(xiàn)象,因?yàn)槲覀儧]有學(xué)習(xí)過 Verilog 語言嘛。也許會有的讀者問,我們是不是要將這些關(guān)鍵字背下來才能學(xué)會 Verilog 語言。這是沒有必要的,我們還是那句話,用多了自然而然就會了,不管是 Verilog 語言還是 C 語言,或者是 JAVA 語言,它們的語法是死的。單從語法本身來說,學(xué)習(xí) Verilog 并不,常用的語法屈指可數(shù)(input、output、wire、reg、assign、always、if、else、case、begin、end),上面的這些關(guān)鍵字相信大家都有見過,它們在我們的后面的例程中也會反反復(fù)復(fù)出現(xiàn)。因此,我們在學(xué)習(xí) Verilog 語法的時候并不需要花費(fèi)太多功夫
29、,只要跟隨著我們的例程一步步走,我們給出的代碼例程都看懂、理解了,那么在語法方面就已經(jīng)足夠了,無論多么牛逼的工程師,在他的代碼里無非也就是上面一些語法而已。不過我們在這里要重點(diǎn)強(qiáng)調(diào)的是:Verilog 硬件描述語言和我們的 C 語言是大大的不同滴,我們寫 C 語言代碼是編程,我們寫 Verilog 代碼是描述。事實(shí)上,我們也可以從硬件描述語言的名稱中也是可以看出的,大家注意硬件描述語言名稱中的“描述”兩個字,它為什么是描述而不是設(shè)計呢?其主要就是硬件描述語言確實(shí)不是用來設(shè)計電路的,而僅僅是電路的。描述這個詞精確地反映了硬件描述語言的本質(zhì)。我們在寫 Verilog 代碼的時候,大腦里要先想好完成
30、的具體功能應(yīng)該用什么樣的物理電路去實(shí)現(xiàn),然后再用 Verilog 語言將該電路描述出來,而不能憑空地去寫代碼,只有存在的電路才是可物理實(shí)現(xiàn)的,Verilog 語言只不過是將這種設(shè)計轉(zhuǎn)化為文字表達(dá)形式而已。還記得我們之前說過的在出現(xiàn)硬件描述語言之前,電路設(shè)計一般通過原理圖輸入的方式實(shí) 現(xiàn),這種設(shè)計過程就是我們心中先有了電路,然后再用一種計算機(jī)能夠識別的方式進(jìn)行描述,現(xiàn) 在的 Verilog 語言只是相當(dāng)于我們有了更先進(jìn)的描述方法,可以從更高的抽象層次對電路進(jìn)行描述,不需要用傳統(tǒng)的設(shè)計方法從門級電路搭起,但是其過程原理還是依然不變的,心中先有電路, 再將它描述成 Verilog 代碼。我們只有這樣
31、,才能真正的做到代碼在屏中,電路在心中。那么接下來問題來了,我們怎么樣才能做到心中先有電路呢?我們現(xiàn)在學(xué)習(xí)的數(shù)字電路便能夠很好的 解答這個問題。我們只有把數(shù)字電路基礎(chǔ)知識學(xué)好才能做到心中先有電路。這里我們再一次提醒大家,本書中的 Verilog 只求理解不求死磕,如果有的讀者在學(xué)習(xí)本書時卡在了 Verilog 代碼處,那么你可以跳過該小節(jié),它影響到你后續(xù)的學(xué)習(xí)。第二章組合邏輯電路的分析與設(shè)計第二章組合邏輯電路的分析與設(shè)計在數(shù)字電路中,根據(jù)邏輯功能的不同,我們可以將數(shù)字電路分成兩大類,一類叫做組合邏輯 電路、另一類叫做時序邏輯電路。我們學(xué)習(xí)數(shù)字電路,其實(shí)就是學(xué)習(xí)組合邏輯電路和時序邏輯電路。接下來
32、我們就來看一看什么是組合邏輯電路,如圖 2.1 所示。X1X2 X3Y1Y2Y3圖 2.1 組合邏輯電路的示意圖我們從圖中可以看出,左側(cè)的 X1 到 Xn 是表示它的輸入變量,右側(cè)的Y1 到Y(jié)n 是表示它的輸出變量,對于這種電路,它的輸出Y1 到Y(jié)n 僅僅與當(dāng)時的輸入 X1 到 Xn 有關(guān)系,而與之前的輸入X1 到 Xn 是沒有關(guān)系的,像這種電路,我們就稱它為組合邏輯電路。§2.1 組合邏輯電路的分析方法我們知道了組合邏輯電路之后,接下來我們學(xué)習(xí)的是如何分析一個組合邏輯電路,這里我們先不給出分析方法,我們直接給出一個電路圖來進(jìn)行現(xiàn)場分析,大家可以跟著我們的思路一步步學(xué)習(xí),當(dāng)我們分析完
33、了整個電路,大家也就自然而然的明白了整個分析過程,在這時,我們給出組合邏輯電路的分析方法,大家也就能夠理解,并且融會貫通。下面我們給出組合邏輯電路圖, 如圖 2.2 所示。P2&A B CP3P1&1L&&P4圖 2.2 組合邏輯電路圖首先,我們先將邏輯電路圖轉(zhuǎn)換成我們比較容易計算的邏輯表達(dá)式,如何轉(zhuǎn)換呢,我們可以先寫出邏輯電路 P1 的邏輯表達(dá)式,然后依次再寫出 P2 、 P3 、 P4 的邏輯表達(dá)式,它們的表達(dá)式分別如下:P1 = ABCP3 = BP1 = BABCP2 = AP1 = AABC P4 = CP1 = CABC組合邏輯電路14數(shù)字電路篇
34、167;2最終我們便可以得出:L = P2 + P3 + P4 = AABC + BABC + CABC = ABC + ABC從邏輯圖一直到邏輯表達(dá)式相信讀者還都能夠理解,但是到了邏輯表達(dá)式化簡相信讀者就 有點(diǎn)摸不著頭腦了,這里讀者不用擔(dān)心,我們分析完電路圖之后,將會詳細(xì)說明如何化簡。在這 里讀者還是先將注意力放在分析電路上。寫出了邏輯表達(dá)式經(jīng)過化簡后,接下來我們就需要根據(jù) 邏輯表達(dá)式畫出真值表,下面我們給出已經(jīng)畫好的真值表,如表 2.1 所示。表 2.1真值表00010010010001101000101011001111從表中我們可以看出三個變量 A,B,C 它們總共有 8 種情況,然后
35、我們只需要將這 8 種情況依次代入化簡后的表達(dá)式中,便可得出結(jié)果 L。接下來就是最后一步,也是最難的一步,我們需要從真值表中分析出電路的功能。此電路當(dāng)三個輸入變量 A、B、C 全為 0 或者全為 1 的時候 L 才為 1,因此我們就可以根據(jù)真值表總結(jié)出電路功能,只有當(dāng)三個變量一致時,輸出才為 1,當(dāng)三個變量不一致時,輸出就為 0,故稱此電路為“一致電路”。經(jīng)過前面的電路分析,即使我不給出分析方法,相信讀者們也都已經(jīng)知道了分析方法是什么,下面我們給出組合邏輯電路的分析方法流程圖,如圖 2.3 所示?;喿儞Q圖 2.3 組合邏輯電路的分析方法接下來我們就來說一說化簡,在邏輯電路的分析和設(shè)計中,我們
36、經(jīng)常會遇到邏輯函數(shù)化簡問 題,化簡這一過程本身并不是很難,難點(diǎn)在于除了需要掌握大量的基本公式以外,還需要能夠靈 活、交替地運(yùn)用各種方法,方可求得最簡結(jié)果。這里我們需要說明的是,新手在入門學(xué)習(xí) FPGA 的時候,基本上是用不到化簡的,如果有看到公式就會感到頭疼的讀者可以跳過化簡這一小節(jié)直 接進(jìn)入下一小節(jié)的學(xué)習(xí),當(dāng)然,你也可以快速大致瀏覽一遍,在以后的 FPGA 設(shè)計中,如果我們碰到需要化簡的時候,我們還可以回過頭來再來學(xué)習(xí)一下化簡。§2.2 公式化簡和卡諾圖化簡在學(xué)習(xí)化簡之前,也許有的讀者會有這么一個疑問,為什么要化簡,我們知道同樣功能的邏Zircon Opto-Electronic
37、Technology CO.,.邏輯功能真值表最簡表達(dá)式邏輯表達(dá)式組合邏輯電路ABCL§2組合邏輯電路的分析與設(shè)計15輯函數(shù)可以有繁有簡不同的表示形式,當(dāng)表達(dá)式復(fù)雜時,其對應(yīng)的數(shù)字電路所使用的元器件就會 相應(yīng)地多一些。當(dāng)表達(dá)形式簡單時,其對應(yīng)的數(shù)字電路所使用的元器件就會相應(yīng)地少一些;因此, 一個簡潔的數(shù)字電路既有利于節(jié)省元器件、降低成本、也有利于減少元器件的故障率、提高電路 的可靠性,給制作帶來了方便。為了得到更加簡潔的數(shù)字電路,我們很有必要對待實(shí)現(xiàn)的邏輯函數(shù)首先進(jìn)行一下化簡操作。2.2.1 公式化簡法想要確保化簡的結(jié)果是正確的,那么我們在化簡中應(yīng)該遵循化簡的基本定律和邏輯代數(shù)的 三
38、條規(guī)則。下面我們就進(jìn)一步詳細(xì)講解基本定律和三條規(guī)則。為了方便大家學(xué)習(xí),我將九條基本定律做成了表格,如表 2.2 所示。表 2.2 九條基本定律這些邏輯代數(shù)中的基本定律和我們數(shù)學(xué)中學(xué)過的代數(shù)很相似,這些定律都很簡單,也是比較 容易理解的。下面我們就來看一看邏輯代數(shù)中的三條規(guī)則,邏輯代數(shù)有三條重要的規(guī)則,它們分別是代入規(guī)則、反演規(guī)則和對偶規(guī)則,下面我們分別進(jìn)行介紹。首先我們介紹的是代入規(guī)則,這里同樣我們不在給出另人抓狂的且還看不懂的定義,我們直接舉例進(jìn)行說明,已知等式 A + B = A× B ,有函數(shù) F = B + C ,若 F 代入此等式中的 B ,則有 A + (B + C) =
39、 A× B + C ,這就是我們所說的代入規(guī)則。接下來我們介紹的是反演規(guī)則,同代入規(guī)則一樣,我們直接上例子, F1 = A + (B + C) ,如果我們 F1 中的所有的運(yùn)算符、常量及變量作如下變換× ® + 、+ ®× 、0 ®1、1 ® 0 、原變量®反變量、反變量®原變量,那么 F 2 = A×(B ×C), F1 與 F 2 互為反函數(shù),這個就是我們所說的反演規(guī)則。最后要介紹的就是對偶規(guī)則了,下面我們給出對偶的例子,F(xiàn)1 = A× B + C ,如果我們 F1 中的
40、所有的運(yùn)算符、常量及變量作如下變換× ® + 、+ ®× 、0 ®1、1 ® 0 這里注意了變量是不變,那么 F 2 = A + B × C , F1 與 F 2 互為對偶式,這個就是我們所說的對偶規(guī)則,這時我們在返回去看九條定律,你會發(fā)現(xiàn)每一條定律的兩個式子都是互為對偶式的,所以,有了對偶規(guī)則, 使得我們需要記憶的公式數(shù)目就減少了一版。這里我們要注意一點(diǎn),一般情況下, F ' ¹ F ,其中 F ' 是 F 的對偶式, F 是 F 的反函數(shù),0-1定律 自等律 重疊律 互補(bǔ)律 交換律 結(jié)合律 分配
41、律 反演律 還原律 16數(shù)字電路篇§2只有在某些特殊情況下, F ' = F ,例如異或表達(dá)式 F = AB + AB , F ' = (A + B)(A + B) ,而F = (A + B)(A + B) ,所以 F ' = F ??赐炅嘶径珊腿龡l規(guī)則,我們?nèi)匀徊荒苓M(jìn)行化簡,因?yàn)槲覀冞€要學(xué)習(xí)一些公式化簡的方法,公式化簡中常用的幾種方法總結(jié)如下。(1) 并項(xiàng)法:利用公式 AB + AB = A ,將兩項(xiàng)合并為一項(xiàng),并消去因子 B 和 B 。(2) 吸收法:利用公式 A + AB = A,消去多余項(xiàng)。(3) 消項(xiàng)法:利用公式 AB + AC + BC = A
42、B + AC ,消去多余項(xiàng)。(4) 消因子法:利用公式 A + AB = A + B ,消去多余的變量因子 A 。(5) 配項(xiàng)法:利用 A×1 = A和 A + A = 1,為某項(xiàng)配上一個變量,以便用其它方法進(jìn)行化簡。至此,公式化簡法就已經(jīng)講完拉,在實(shí)際應(yīng)用中可能遇到比較復(fù)雜的函數(shù)式,只要熟練掌握 邏輯代數(shù)的定律和規(guī)則,并且靈活運(yùn)用上述方法,總能把函數(shù)化簡成最簡。下面我們就以分析電路的邏輯表達(dá)式為例進(jìn)行練手,看一看是如何化簡的:L = AABC + BABC + CABC(利用分配律)= ABC( A + B + C) (利用反演律)= ABC + ABC看到這里,相信讀者能夠理解最
43、后一步是如何得到的,并且已經(jīng)知道了上述定律規(guī)則和方法的重要性,不理解的也不要灰心,公式化簡法可不是看一遍就能夠?qū)W會的,它需要大量的實(shí)戰(zhàn)練 習(xí)才能融會貫通、收放自如。2.2.2 卡諾圖化簡法通過上面的公式化簡學(xué)習(xí),我們可以看出公式化簡法使用不方便、不易是否已簡化到最簡形式,技巧性較高,對使用者的要求較高,并且它還只能用于一些邏輯表達(dá)式比較簡單的函數(shù)。 接下來我們介紹的卡諾圖化簡法可以更簡單、直接的得到邏輯函數(shù)的最簡表達(dá)式,因此邏輯函數(shù) 的卡諾圖化簡法在實(shí)際分析、設(shè)計電路時有很廣泛的應(yīng)用。在講解卡諾圖之前,我們需要了解一 下最小項(xiàng)。所謂最小項(xiàng),就是該乘積項(xiàng)在輸入隨機(jī)的情況下,結(jié)果為 1 的可能性最
44、小,下面我們舉例進(jìn)行說明,有兩個變量 A 、 B ,它們可以許多乘積項(xiàng),在它們的乘積項(xiàng)中有四個乘積項(xiàng)需要我們特別注意,它們分別是 AB 、AB 、AB 、AB ,這四個乘積項(xiàng)就是我們所說得最小項(xiàng), 對于上述的四個乘積項(xiàng)來說,輸入的組合情況有 4 種,但是對于每一個最小項(xiàng)來說,僅有 1 種輸入情況能夠使其為 1。通過上面的例子我們可以總結(jié)出以下 3 條規(guī)律:2n 個最小項(xiàng)。(1)n 個變量最多可(2) n 個變量的每個最小項(xiàng),一定是包含 n 個因子的乘積項(xiàng)。(3) 在各個最小項(xiàng)中,每個變量必須以原變量或反變量形式作為因子僅出現(xiàn)一次。根據(jù)上面的規(guī)律我們很容易的就能寫出三個變量 A 、B 、C 的所
45、有最小項(xiàng)。下面我們給出三變量全部最小項(xiàng),如表 2.3 所示。Zircon Opto-Electronic Technology CO.,.§2組合邏輯電路的分析與設(shè)計17表 2.3 三變量最小項(xiàng)的真值表 00010000000 00101000000 01000100000 01100010000 10000001000 10100000100 11000000010 11100000001為了便于書寫和識別,我們對最小項(xiàng)進(jìn)行了如上編號,通過上表我們可以看出以下 4 條性質(zhì):(1) 每個最小項(xiàng)只有對應(yīng)的一組變量取值能使其值為 1。(2)(3)n 個變量的全體最小項(xiàng)之和恒為 1。n 個
46、變量的任意兩個不同的最小項(xiàng)之積恒為 0。(4) 相鄰的兩個最小項(xiàng)之和,可以合并成一項(xiàng),并消去一個因子。對于第(4)條性質(zhì),這里我們需要重點(diǎn)說明一下,因?yàn)樵诳ㄖZ圖化簡中我們會用的到,這 里的相鄰不是幾何位置的相鄰,而是指邏輯上相鄰。這里我們舉例進(jìn)行說明, 三變量最小項(xiàng)ABC 和 ABC 它們的幾何位置上是不相鄰的,但是它們的邏輯上是相鄰的,因?yàn)樗鼈冎兄挥幸粋€因子不同,前項(xiàng)中有 A ,后項(xiàng)中有 A ,其余因子完全相同,于是這兩項(xiàng)相加可以合并成一項(xiàng),并消去那個不同的因子, ABC + ABC = BC 。至此,最小項(xiàng)的概念已經(jīng)講完了,不過有一點(diǎn)我們要在這里提一下,有最小項(xiàng),同樣就會有 最大項(xiàng),由于
47、最大項(xiàng)在我們這里并不實(shí)用,這里我們就不在進(jìn)行講解。下面我們就要進(jìn)行卡諾圖 的講解,所謂卡諾圖,就是把真值表中的最小項(xiàng)重新排列,把它們排列成矩陣形式,并且矩陣的橫方向和縱方向上的布爾變量需要按照格雷碼的順序進(jìn)行排列,這樣的圖形就是卡諾圖,對于格雷碼會在講解完卡諾圖之后進(jìn)行詳細(xì)說明。下面我們分別給出了二變量、三變量和四變量的卡諾圖,如圖 2.4 所示。BBCCCDAB00A01A00011110AB0101111000000011010111111010圖 2.4二變量、三變量和四變量卡諾圖 編號 18數(shù)字電路篇§2老樣子,我們還是先舉例子然后在分析,這里我們就以 F = m3 + m4
48、 + m5 + m6 + m7 。首先我們根據(jù)邏輯表達(dá)式 F 畫出其對應(yīng)的卡諾圖,如圖 2.5(a)所示。CCAB01AB010000010111111010(a)圖 2.5 (a)沒有化簡的卡諾圖(b)(b)化簡后的卡諾圖得到卡諾圖以后,我們便可以在卡諾圖中畫出其相鄰變量,具體操作如圖 2.5(b)所示,畫出了相鄰變量后,我們便可以進(jìn)行邏輯化簡了,首先我們先來看一看圖中的大圈,從圖中我們便可以看出大圈中的 4 個最小項(xiàng)最終合并成 A ,不知道技巧的讀者想要看出 A 來還是有難度的, 下面我們就來簡單說明一下這個小技巧,由于這個大圈只覆蓋了 AB 變量的 11 和 10 取值, C變量的 0
49、和 1 取值,那么其他地方的取值我們就不需要觀察了,又由于 AB 變量中 11 和 10 取值是相鄰變量,那么只有相同的才會保留,相反的將會合并掉,所以 AB 變量將保留 A 變量,消去 B 變量。而C 變量同 AB 變量方法相同,因此只留下了 A 變量。如果小技巧不太容易理解,那么我們還可以利用下面的方法進(jìn)行合并相鄰項(xiàng)。從大圈中我們 可以得到 4 個最小項(xiàng),它們分別是 m6 + m7 + m4 + m5 ,即 ABC + ABC + ABC + ABC ,我們將相鄰變量進(jìn)行合并可以得出: AB(C + C) + AB(C + C) = AB + AB = A(B + B) = A 。接著我們
50、利用同樣的方法將小圈中的相鄰項(xiàng)進(jìn)行化簡,由于小圈只覆蓋了 AB 變量的 01 和11 取值,C 變量的 1 取值,那么在 AB 變量中合并最小項(xiàng)可得出 B ,而 C 變量只有 1 取值,所以最終結(jié)果便為 BC ,最后將大圈得出的結(jié)果或上小圈得出的結(jié)果就是邏輯表達(dá)式的最簡結(jié)果, 即 F = A + BC 。通過前面的學(xué)習(xí)我們可以知道,卡諾圖化簡法其難度主要在如何圈出相鄰項(xiàng),那么下面我們 便給出如何圈出相鄰項(xiàng)的口訣,只要遵循這個口訣就能得出最簡邏輯表達(dá)式,其口訣就是“圈子 要少,圈子要大”,所謂“圈子要少、圈子要大”就是利用最少、最大的圓圈來覆蓋掉所有為 1 的最小項(xiàng)。除了遵循上面所講的化簡口訣和化簡步驟以外,我們還需要注意一下幾個問題:(1) 所有的圈必須覆蓋全部標(biāo) 1 方格。(2) 每個圈中包含的相鄰小方格數(shù),必須為 2 的整數(shù)次冪。(3) 為了得到盡可能大的圈,圈與圈之間可以重疊一個或 n 個標(biāo) 1 方格。(4) 每個圈中至少有一個標(biāo) 1 方格未被其它圈所覆蓋。下面我們給出了幾個典型的卡諾圖畫圈參考圖,在碰到不知道如何畫圈的時
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 供應(yīng)合同范本寫
- 240鉆機(jī)租賃合同范本
- epc工程合同使用合同范本
- 人工加材料合同范本
- 全新貨車購車合同范例
- 保險公司擔(dān)保貸款合同范本
- it 顧問合同范本
- 分公司發(fā)票合同范本
- 代招合同范本
- 出租摩托協(xié)議合同范本
- 2025年江蘇商貿(mào)職業(yè)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 科技與教育的融合小學(xué)科學(xué)探究式學(xué)習(xí)的實(shí)踐案例
- 2025年浙江紹興杭紹臨空示范區(qū)開發(fā)集團(tuán)有限公司招聘筆試參考題庫附帶答案詳解
- 煤礦隱蔽致災(zāi)因素普查
- 2025年春季1530安全教育記錄主題
- DBJ33T 1271-2022 建筑施工高處作業(yè)吊籃安全技術(shù)規(guī)程
- 2025年3月日歷表(含農(nóng)歷-周數(shù)-方便記事備忘)
- 消化內(nèi)鏡護(hù)理講課
- 《中國人口老齡化》課件
- 靜脈采血最佳護(hù)理實(shí)踐相關(guān)知識考核試題
- 檢驗(yàn)檢測中心檢驗(yàn)員聘用合同
評論
0/150
提交評論