基于FPGA數(shù)字門(mén)電路的實(shí)現(xiàn)
來(lái)源 |?硬禾學(xué)堂
二次編排?| strongerHuang
在數(shù)字電路中,門(mén)電路是最基本的構(gòu)成單位,可以說(shuō),任何復(fù)雜的數(shù)字電路系統(tǒng)都可以通過(guò)我們耳熟能詳?shù)呐c門(mén),非門(mén),或門(mén),與非門(mén),異或門(mén)等等組合實(shí)現(xiàn)。
對(duì)于各種門(mén)電路的邏輯特征,想必大家都掌握得爐火純青,腦海里可以毫無(wú)壓力地隨時(shí)浮現(xiàn)著各種0和1的組合。
然而,搭建一個(gè)門(mén)電路實(shí)驗(yàn)卻并不容易!我們以下面的與非門(mén)電路為例。
圖1 與非門(mén)電路
表1 與非門(mén)真值表
X |
Y |
Z |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
- 熱愛(ài)模電的朋友們可以通過(guò)MOS管+面包板+電源+跳線以及若干小時(shí)的反復(fù)調(diào)試。
- 土豪朋友們對(duì)此不屑一顧,直接拍幾千塊買(mǎi)一臺(tái)數(shù)字電路實(shí)驗(yàn)儀。
當(dāng)然,既沒(méi)有那么熱愛(ài)模電,也沒(méi)有那么多軟妹紙的朋友門(mén)仍然有更合適的辦法,那就是通過(guò)邏輯芯片。比如大家熟悉的7400系列的邏輯芯片,只需要接上電源,再配上開(kāi)關(guān),LED等器件,就可以通過(guò)實(shí)驗(yàn)方式對(duì)與非門(mén)的邏輯和電氣特性進(jìn)行直觀地學(xué)習(xí),比如采用7400 Quad2的與非門(mén)邏輯芯片。
圖2 與非門(mén)邏輯芯片
的后浪,肯定不能滿(mǎn)足于這個(gè)簡(jiǎn)單的實(shí)驗(yàn)?,F(xiàn)在,在上一個(gè)練習(xí)的基礎(chǔ)上,我們來(lái)嘗試構(gòu)建以下門(mén)電路組合。
圖3 組合門(mén)電路
以下是某位同學(xué)獨(dú)特的實(shí)現(xiàn)方式:
圖4
雖然我們還通過(guò)軟件仿真的方式構(gòu)建上述電路并觀察波形,然而和電路上進(jìn)行實(shí)打?qū)嵉牟僮飨啾冉K究是有質(zhì)的差別。畢竟靠著模擬飛車(chē)駕齡20年資歷上路還是要被警察叔叔帶走的。
不難看出,畫(huà)門(mén)電路容易,對(duì)門(mén)電路進(jìn)行實(shí)驗(yàn)很難,對(duì)各式各樣奇葩組合的門(mén)電路進(jìn)行實(shí)驗(yàn)更是難上加難。然而這一切在FPGA面前都只是談笑風(fēng)生。
FPGA,英文全稱(chēng)Field Programmable Gate Array,是一種可以通過(guò)某百科或搜索引擎查找到并且看了之后不明覺(jué)厲的東西。在此,我們主要介紹一下FPGA的部分特點(diǎn),以及如何使其與數(shù)字電路實(shí)驗(yàn)進(jìn)行結(jié)合。
首先問(wèn)大家一個(gè)問(wèn)題:我們?cè)谟?jì)算3x7=21或者5x8=40的時(shí)候,有誰(shuí)是通過(guò)最原始的乘法原理推導(dǎo)并計(jì)算出來(lái)的,如果有,請(qǐng)?jiān)诘撞苛粞圆@得所有人的膜拜。相信大部分人都可以在半秒內(nèi)給出準(zhǔn)確答案,為什么?因?yàn)槲覀兌急尺^(guò)九九乘法表,只要是在這個(gè)范圍內(nèi)的任意乘法我們的大腦都可以瞬間對(duì)應(yīng)出計(jì)算結(jié)果。相信大家對(duì)當(dāng)年的112=121,122=144,132=169…等等還歷歷在目。
之所以我們可以在一定范圍內(nèi)進(jìn)行準(zhǔn)確和快速的計(jì)算,是因?yàn)槲覀兊拇竽X里儲(chǔ)存了一個(gè)擁有大量數(shù)據(jù)的查找表,在一定范圍內(nèi)的輸入數(shù)據(jù)我們都可以迅速在表中找到對(duì)應(yīng)答案。其實(shí),F(xiàn)PGA的運(yùn)算處理方式就類(lèi)似于我們的大腦。它擁有一個(gè)可以?xún)?chǔ)存大量數(shù)據(jù)的查找表,只要我們通過(guò)程序定義出輸入與輸出之間的邏輯關(guān)系,F(xiàn)PGA就可以按照該邏輯關(guān)系自行對(duì)其內(nèi)部結(jié)構(gòu)進(jìn)行重新定義,直白地說(shuō),就是我們可以隨時(shí)給FPGA進(jìn)行洗腦,而后者可以永遠(yuǎn)不計(jì)回報(bào),心甘情愿地被洗腦。
接下來(lái),我們就快速展示一下如何通過(guò)FPGA展示圖3所示的門(mén)電路。既然要對(duì)FPGA進(jìn)行洗腦,肯定需要語(yǔ)言。在這里我們采用簡(jiǎn)單通俗的Verilog語(yǔ)言,通過(guò)描述門(mén)電路的方式,以16行代碼輕松在FPGA上搭建上述門(mén)電路。
module custblock ( input?wire?A, //定義輸入A input?wire?B, //定義輸入B input?wire?C, //定義輸入C input?wire?D, //定義輸入D output?wire?Y1, //定義輸出Y1 output?wire?Y2 //定義輸出Y2 ); wire??s1,s2,s3; //定義中間變量 nand?(s1,A,B); //(輸出,輸入,輸入) or (s2,C,D); //?調(diào)用基本門(mén)電路 xnor?(Y1,s1,C); and (s3,C,s2); xor?(Y2,C,s3); endmodule
將上述代碼導(dǎo)入FPGA之后,就等于在FPGA上構(gòu)建出了一個(gè)模塊,輸入端分別是A,B,C,D,輸出端分別是Y2,Y1,且內(nèi)部結(jié)構(gòu)和圖3中所示的功能完全一樣。
圖5
圖6 小腳丫FPGA核心板
從示意圖中可以看出,小腳丫FPGA帶有多個(gè)板載外設(shè),如開(kāi)關(guān),LED和數(shù)碼管等,可以對(duì)絕大部分?jǐn)?shù)字電路進(jìn)行生動(dòng)的實(shí)驗(yàn)操作。小腳丫配有USB下載器,可以通過(guò)一根USB線實(shí)現(xiàn)供電和程序下載。板上的36個(gè)多功能I/O接口可以進(jìn)行項(xiàng)目擴(kuò)展,且封裝采用DIP40尺寸,因此可以與面包板完美結(jié)合。
以下是通過(guò)我們小腳丫FPGA對(duì)該電路進(jìn)行的實(shí)驗(yàn)。我們采用板載的4個(gè)撥碼開(kāi)關(guān)和2個(gè)LED(低電平亮)分別作為模塊的4路輸入和2路輸出,并且通過(guò)調(diào)節(jié)輸入來(lái)觀察輸出結(jié)果。上下兩圖分別所對(duì)應(yīng)的輸入分別為:0001和0101,我們也觀察到了在兩種情況下的LED狀態(tài)。
圖7 實(shí)驗(yàn)結(jié)果
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!