賀雪莉
(興義民族師范學(xué)院物聯(lián)網(wǎng)工程專業(yè),興義 562400)
《數(shù)字邏輯電路》課程作為電子信息專業(yè)的必修課程之一,在電子電路專業(yè)學(xué)科人才培養(yǎng)中占據(jù)重要的地位。傳統(tǒng)的數(shù)字邏輯電路實(shí)驗(yàn)教學(xué)多基于Logisim、Multisim等仿真工具來(lái)完成,主要培養(yǎng)學(xué)生重現(xiàn)邏輯電路和驗(yàn)證分析電路功能的能力,對(duì)組合邏輯電路內(nèi)部的邏輯關(guān)聯(lián)和電路應(yīng)用分析能力培養(yǎng)不足。此外,隨著電子科學(xué)技術(shù)的飛速發(fā)展,現(xiàn)階段手工設(shè)計(jì)電子產(chǎn)品已經(jīng)不再適應(yīng)社會(huì)的需求。電子設(shè)計(jì)自動(dòng)化(electronic design automation,EDA)技術(shù)是以計(jì)算機(jī)為工作平臺(tái)[1],實(shí)現(xiàn)電子電路技術(shù)、計(jì)算機(jī)技術(shù)和智能化技術(shù)的綜合應(yīng)用,并以此來(lái)達(dá)到電子線路系統(tǒng)功能的技術(shù)手段。目前,EDA已成為電子領(lǐng)域的主要趨勢(shì),因此,在數(shù)字電路課程設(shè)計(jì)中引入EDA技術(shù)是數(shù)字邏輯電路實(shí)驗(yàn)及課程設(shè)計(jì)的教學(xué)改革方向[2]。EDA以大規(guī)??删幊踢壿嬈骷樵O(shè)計(jì)載體,來(lái)實(shí)現(xiàn)集成電子系統(tǒng)功能。而現(xiàn)場(chǎng)可編程門陣列(field programmable gate array,F(xiàn)PAG)因其具有運(yùn)算速度快、存儲(chǔ)容量大、擴(kuò)展性強(qiáng)和可無(wú)限重復(fù)編程等特點(diǎn),在安防及工業(yè)領(lǐng)域、醫(yī)療檢測(cè)分析儀器、軟件無(wú)線電等各個(gè)領(lǐng)域均有應(yīng)用,是當(dāng)前主流的可編程邏輯器件之一。將基于EDA技術(shù)的FPGA設(shè)計(jì)開發(fā)應(yīng)用到數(shù)字邏輯電路實(shí)驗(yàn)課程的教學(xué)中來(lái),通過(guò)實(shí)操實(shí)驗(yàn)及綜合應(yīng)用實(shí)驗(yàn),幫助學(xué)生更好地理解并掌握邏輯門電路的結(jié)構(gòu)特點(diǎn)和時(shí)序邏輯,結(jié)合FPGA開發(fā)板的可擴(kuò)展性和可重復(fù)編程特點(diǎn),讓學(xué)生自主設(shè)計(jì)邏輯電路解決實(shí)際工程問(wèn)題,以此培養(yǎng)學(xué)生的創(chuàng)造性,調(diào)動(dòng)學(xué)生的積極性。
基于FPGA的數(shù)字邏輯電路實(shí)驗(yàn)設(shè)計(jì),主要通過(guò)XC7A35T-2FFG484開發(fā)板來(lái)完成,開發(fā)板如圖1所示。
開發(fā)板上集成有DDR3存儲(chǔ)顆粒、數(shù)碼管、通用按鍵、通用LED燈、OLED/攝像頭模塊、千兆以太網(wǎng)接口、HDMI接口和足量的擴(kuò)展接口等,能夠滿足常規(guī)數(shù)字邏輯電路實(shí)驗(yàn)的設(shè)計(jì)要求。實(shí)驗(yàn)基于Vivado工具實(shí)現(xiàn),通過(guò)Verilog硬件描述語(yǔ)言編寫程序設(shè)計(jì),結(jié)合Notepad++編輯器和Modelsim仿真工具來(lái)完成各項(xiàng)實(shí)驗(yàn)工程的搭建和驗(yàn)證分析。研究基于FPGA的數(shù)字邏輯電路實(shí)驗(yàn)方法具有很大的發(fā)展前景,在實(shí)驗(yàn)教學(xué)上具有推廣的價(jià)值和意義[3]。
各系列數(shù)字邏輯電路教材內(nèi)容基本大同小異,雖因不同專業(yè)培養(yǎng)方案不同,教學(xué)中的側(cè)重點(diǎn)會(huì)稍有差異,但是核心知識(shí)點(diǎn)基本一致,主要章節(jié)分布一般為數(shù)字邏輯概述、邏輯化簡(jiǎn)、組合邏輯電路、觸發(fā)器和時(shí)序邏輯電路等幾個(gè)模塊。無(wú)論是純仿真的實(shí)驗(yàn)還是基于FPGA的設(shè)計(jì)實(shí)驗(yàn),在實(shí)驗(yàn)教學(xué)中均是圍繞重點(diǎn)章節(jié)展開。本文研究的基于FPGA的數(shù)字邏輯電路實(shí)驗(yàn)設(shè)計(jì),主要通過(guò)和理論知識(shí)重點(diǎn)章節(jié)映射完成實(shí)驗(yàn)設(shè)計(jì)規(guī)劃,具體設(shè)計(jì)思路如表1所示。其中觸發(fā)器和計(jì)數(shù)器的設(shè)計(jì)實(shí)驗(yàn)可綜合在顯示譯碼器實(shí)驗(yàn)中完成,在此不再贅述,實(shí)驗(yàn)五綜合應(yīng)用實(shí)驗(yàn)可根據(jù)不同專業(yè)培養(yǎng)方案做調(diào)整,達(dá)到考查學(xué)生綜合應(yīng)用能力的目的即可,本文重點(diǎn)對(duì)實(shí)驗(yàn)一至實(shí)驗(yàn)四做詳細(xì)分析。
表1 基于FPGA的數(shù)字電路實(shí)驗(yàn)設(shè)計(jì)規(guī)劃表
基于FPGA的數(shù)字邏輯電路實(shí)驗(yàn)設(shè)計(jì),實(shí)施分為四個(gè)步驟來(lái)完成,即分析、設(shè)計(jì)、仿真和實(shí)測(cè)驗(yàn)證。每個(gè)實(shí)驗(yàn)均通過(guò)分析邏輯電路的功能特點(diǎn)擬定設(shè)計(jì)思路,再結(jié)合Verilog硬件描述語(yǔ)言完成設(shè)計(jì),接著通過(guò)仿真檢驗(yàn)設(shè)計(jì)的邏輯性和功能性,最后通過(guò)JTAG下載接口實(shí)現(xiàn)工程的實(shí)測(cè)驗(yàn)證。
本文研究的基于FPGA設(shè)計(jì)的數(shù)字邏輯電路均是基于芯片型號(hào)為xc7a35tfgg484-2達(dá)芬奇FPGA開發(fā)板來(lái)實(shí)現(xiàn),考慮到圖片的顯示問(wèn)題,文中給出的FPGA設(shè)計(jì)原理圖部分為不完整的縮減圖。在設(shè)計(jì)中賦值操作均通過(guò)非阻塞賦值完成,因此在FPGA設(shè)計(jì)仿真波形圖顯示中,結(jié)果均要比輸入數(shù)據(jù)晚一個(gè)系統(tǒng)時(shí)鐘周期。
無(wú)論是組合邏輯電路、觸發(fā)器還是時(shí)序邏輯電路,其最基本的邏輯元器件構(gòu)成都是基本邏輯門電路?;具壿嬮T電路指實(shí)現(xiàn)簡(jiǎn)單邏輯關(guān)系的電路[4],比如“與”邏輯、“或”邏輯和“非”邏輯。三種基本的邏輯門電路可以組成例如“與非”“或非”“與或非”“同或”和“異或”等多種符合邏輯運(yùn)算,也可以搭配構(gòu)成復(fù)雜的組合邏輯電路,多種不同類型的觸發(fā)器電路和各類時(shí)序邏輯電路。圖2的(a)、(b)、(c)圖依次表示二端口“與”邏輯、“或”邏輯和“非”邏輯的中國(guó)國(guó)標(biāo)符號(hào),其邏輯表達(dá)式分別為Y=A·B,Y=A+B和Y=Aˉ。
基于FPGA設(shè)計(jì)基本的邏輯門電路可根據(jù)門電路的邏輯運(yùn)算關(guān)系,通過(guò)簡(jiǎn)單的算術(shù)運(yùn)算來(lái)實(shí)現(xiàn)。圖3所示為FPGA工程的原理圖。為了便于觀察結(jié)果,實(shí)測(cè)中將端口輸入數(shù)據(jù)data_a和data_b通過(guò)按鍵控制輸入,三個(gè)邏輯門的輸出接在LED引腳,通過(guò)LED燈的亮滅來(lái)觀察邏輯門電路的輸出結(jié)果狀態(tài)。
圖4所示為FPGA設(shè)計(jì)的邏輯門電路的仿真波形圖,所有輸出數(shù)據(jù)在復(fù)位信號(hào)高電平無(wú)效狀態(tài)和時(shí)鐘上升沿到來(lái)時(shí)刻觸發(fā)有效。分析波形圖可以看出,當(dāng)邏輯門電路的數(shù)據(jù)以00、01、10、11、00輸入時(shí)(其中“or”邏輯只有一個(gè)輸入端口data_a),仿真輸出結(jié)果與邏輯表達(dá)式Y(jié)=A·B、Y=A+B和Y=Aˉ計(jì)算結(jié)果一致。
2.2.1 二進(jìn)制加法器
數(shù)字邏輯電路中的加法器分為半加器、全加器和n位加法器三大類。其中半加器位最基礎(chǔ)的二進(jìn)制加法器,只需要考慮當(dāng)前位的計(jì)算結(jié)果即可;全加器在計(jì)算本位結(jié)果的同時(shí)需要考慮運(yùn)算后是否產(chǎn)生進(jìn)位問(wèn)題;而n位加法器是一種全加器的級(jí)聯(lián)擴(kuò)展模式。因此本文研究的基于FPGA的加法器設(shè)計(jì)主要針對(duì)全加器來(lái)完成。全加器的邏輯電路圖和邏輯符號(hào)如圖5所示。
基于FPGA設(shè)計(jì)的全加器原理圖如圖6所示。設(shè)計(jì)包括脈沖產(chǎn)生、動(dòng)態(tài)顯示和全加器三個(gè)模塊,輸入信號(hào)A和B通過(guò)開發(fā)板的按鍵輸入實(shí)現(xiàn),運(yùn)算后的sum值和進(jìn)位C的值通過(guò)數(shù)碼管顯示。仿真結(jié)果如圖7所示。全加器依次輸入00-01-10-11-00的數(shù)值,對(duì)應(yīng)的和值S依次顯示0-1-1-0-0數(shù)值,進(jìn)位C依次顯示0-0-0-1-0數(shù)值,全加器功能驗(yàn)證完成。
2.2.2 數(shù)值比較器
數(shù)電中的數(shù)值比較器是指用來(lái)比較兩個(gè)二進(jìn)制數(shù)大小的邏輯電路,輸入變量是兩個(gè)n位二進(jìn)制數(shù)值,輸出變量有Y(A>B)、Y(A=B)和Y(A<B)三個(gè)狀態(tài)[4]。數(shù)值比較器邏輯符號(hào)如圖8所示,其中輸入端A、B可以是多位二進(jìn)制數(shù)。工作原理為當(dāng)兩個(gè)多位二進(jìn)制數(shù)相比較時(shí),應(yīng)從高位到低位逐位比較,如果最高位不相等,則可立即判斷兩個(gè)數(shù)值的大??;如果最高位相等,則需比較次高位,以此類推,直到最低位。
基于FPGA設(shè)計(jì)數(shù)值比較器,結(jié)合開發(fā)板的數(shù)碼顯示模塊、按鍵模塊和LED燈模塊來(lái)完成。由于本文設(shè)計(jì)用到的達(dá)芬奇Artix-7 FPGA開發(fā)板只包含4個(gè)獨(dú)立按鍵,因此實(shí)測(cè)設(shè)計(jì)時(shí)以2 bit輸入端為例完成實(shí)驗(yàn),并通過(guò)LED亮滅來(lái)表示輸入端按鍵的狀態(tài),比較器輸出結(jié)果通過(guò)數(shù)碼管顯示。實(shí)驗(yàn)設(shè)計(jì)的原理如圖9所示。
圖10所示為數(shù)值比較器仿真波形圖。其中輸入數(shù)據(jù)data_1和data_2由按鍵控制輸入,由于開發(fā)板按鍵是低電平有效,因此需要引入一個(gè)按鍵標(biāo)志信號(hào)key_flag來(lái)表示正邏輯下的按鍵狀態(tài)數(shù)值,并通過(guò)LED亮滅來(lái)顯示按鍵通斷狀態(tài);輸出結(jié)果result表示,初始狀態(tài)為“00”,當(dāng)data_1<data_2時(shí)輸出“01”;當(dāng)data_1>data_2時(shí)輸出“10”;data_1=data_2時(shí)輸出“11”。觀察波形圖可以看到,2bit數(shù)值比較器的功能正常實(shí)現(xiàn)。
基于FPGA實(shí)現(xiàn)數(shù)值邏輯電路編碼器的設(shè)計(jì),主要設(shè)計(jì)二進(jìn)制編碼器。所謂二進(jìn)制編碼器,即將數(shù)值通過(guò)編碼轉(zhuǎn)換為計(jì)算機(jī)能夠識(shí)別的二進(jìn)制形式。編碼器是組合邏輯電路中最基礎(chǔ)的電路之一,基于FPGA設(shè)計(jì)編碼器,只需要將編碼器的輸入和輸出接入FPGA的相應(yīng)控制管腳即可,在實(shí)操中等同于實(shí)現(xiàn)了按鍵控制LED的實(shí)驗(yàn),操作較簡(jiǎn)單。本文重點(diǎn)分析譯碼器設(shè)計(jì),對(duì)編碼器不做詳細(xì)分析。譯碼是編碼的逆過(guò)程,即將具有特定含義的一組代碼“翻譯”出來(lái)的過(guò)程,其原理框圖如圖11所示。
基于FPGA的譯碼器設(shè)計(jì)包括譯碼器設(shè)計(jì)和顯示譯碼兩個(gè)模塊,其原理圖如圖12所示。按鍵控制譯碼器輸入,數(shù)碼管輸入端接譯碼器輸出端,通過(guò)數(shù)碼管顯示出譯碼器的輸出結(jié)果,由于本文所使用的開發(fā)板只有六個(gè)數(shù)碼管,因此對(duì)于3-8線的譯碼器實(shí)現(xiàn),需要結(jié)合2位的LED來(lái)表示數(shù)值6和7。
數(shù)碼管實(shí)際上是由七個(gè)發(fā)光管組成“8”字形構(gòu)成的,加上小數(shù)點(diǎn)就是8個(gè),這些段分別由字母a,b,c,d,e,f,g,dp來(lái)表示,八個(gè)發(fā)光二極管有共陰極和共陽(yáng)極兩種接法,如圖13所示,前者某一段接高電平時(shí)發(fā)光,后者某一段接低電平時(shí)發(fā)光。達(dá)芬奇Artix-7 FPGA開發(fā)板上集成有六個(gè)八段數(shù)碼管,LED數(shù)碼管由多個(gè)發(fā)光二極管封裝在一起組成“8”字形的器件,引線已在內(nèi)部連接完成,只需引出它們的各個(gè)筆劃,公共電極,其原理圖如圖14所示。
圖15所示為譯碼器設(shè)計(jì)仿真圖,按鍵控制輸入,按鍵輸入的數(shù)值從000~111變化,對(duì)應(yīng)的顯示譯碼值從7~0變化,當(dāng)數(shù)值為7和6時(shí),通過(guò)LED燈的狀態(tài)表示輸出結(jié)果;當(dāng)數(shù)值為5~0時(shí),通過(guò)數(shù)碼管的位選信號(hào)LED_SEL表示結(jié)果,并在對(duì)應(yīng)的數(shù)碼管上顯示數(shù)值1,表示當(dāng)前數(shù)碼管被選通。
2.4.1 數(shù)據(jù)選擇器
數(shù)據(jù)選擇器是一種多路調(diào)制器,主要由地址譯碼和多路數(shù)字開關(guān)組成[4]。數(shù)據(jù)選擇器是數(shù)字邏輯電路中常見(jiàn)的一種組合邏輯電路,主要功能是通過(guò)地址選通控制數(shù)據(jù)的多路輸入單路輸出,其邏輯框圖如圖16所示。當(dāng)選擇器有nbit的地址輸入控制時(shí),則允許的最多數(shù)據(jù)輸入端為2n路,根據(jù)地址來(lái)選擇可以輸出的數(shù)據(jù)通路。
基于FPGA設(shè)計(jì)多路數(shù)據(jù)選擇器原理圖如圖17所示。實(shí)驗(yàn)設(shè)計(jì)地址輸入為3 bit,通過(guò)按鍵控制輸入,考慮到開發(fā)板的可顯示資源情況,實(shí)測(cè)分析中僅利用了4路輸入數(shù)據(jù)端口,并通過(guò)開發(fā)板的LED指示信號(hào)表示當(dāng)前被選通的輸入端,輸出端結(jié)果通過(guò)數(shù)碼管顯示。
圖18 所示為多路數(shù)據(jù)選擇器仿真波形圖。地址控制端由key_flag表示,輸入為3 bit,可用于實(shí)現(xiàn)8路數(shù)據(jù)的選通,綜合考慮達(dá)芬奇Artix-7 FPGA開發(fā)板資源情況,假設(shè)數(shù)據(jù)輸入端有4路數(shù)據(jù),即iC0~iC3。分析仿真波形,當(dāng)?shù)刂愤x路key_flag從1~4變化時(shí),對(duì)應(yīng)的輸出端Z依次輸出iC0~iC3的數(shù)據(jù),數(shù)據(jù)選擇器的功能得到驗(yàn)證。LED_SEG和LED_SEL為數(shù)碼管的段選和位選信號(hào),通過(guò)查看共陽(yáng)極數(shù)碼管的顯示數(shù)值表可知,數(shù)碼管顯示數(shù)值LED_SEG依次為1、2、4、8,即為輸入端iC0~iC3的數(shù)據(jù)0001、0010、0100、1000所對(duì)應(yīng)的十進(jìn)制數(shù)值。
2.4.2 數(shù)據(jù)分配器
數(shù)據(jù)分配器實(shí)現(xiàn)的即為數(shù)據(jù)選擇器的逆過(guò)程,將1路輸入數(shù)據(jù)信號(hào)通過(guò)地址控制端,從不同的輸出端口輸出數(shù)據(jù),其原理框圖如圖19所示。
數(shù)據(jù)分配器設(shè)計(jì)原理和思路與數(shù)據(jù)選擇器一致,不再重復(fù)描述,其FPGA設(shè)計(jì)原理圖如圖20所示。
新時(shí)代高校的人才培養(yǎng)目標(biāo)隨著科技的發(fā)展不斷進(jìn)行著變革和更新,高素質(zhì)、高技能的綜合實(shí)踐型人才是現(xiàn)今高等院校為中國(guó)特色社會(huì)主義主要輸送的人才類型[5]。在數(shù)字邏輯課程中運(yùn)用FPGA技術(shù),一方面可以將理論教學(xué)知識(shí)點(diǎn)和實(shí)驗(yàn)教學(xué)的知識(shí)點(diǎn)實(shí)現(xiàn)一一映射,讓學(xué)生不僅對(duì)數(shù)字邏輯電路的內(nèi)部結(jié)構(gòu)知其然而且要知其所以然,真正地弄懂、學(xué)透組合邏輯的知識(shí),并能熟練地應(yīng)用組合邏輯電路來(lái)解決實(shí)際問(wèn)題;另一方面,F(xiàn)PGA作為在各個(gè)行業(yè)均能發(fā)揮重要作用的技術(shù),懂?dāng)?shù)字邏輯電路設(shè)計(jì)、FPGA的專業(yè)人才也備受用人單位的青睞[6],讓學(xué)生學(xué)習(xí)并掌握FPGA的應(yīng)用也能讓其在職業(yè)生涯上多一個(gè)選擇的機(jī)會(huì),這也是高校培養(yǎng)計(jì)算機(jī)專業(yè)學(xué)生創(chuàng)新能力和實(shí)踐能力的一種有效方式。