基于FPGA的科研訓(xùn)練范例-薛冰許德新_第1頁
基于FPGA的科研訓(xùn)練范例-薛冰許德新_第2頁
基于FPGA的科研訓(xùn)練范例-薛冰許德新_第3頁
基于FPGA的科研訓(xùn)練范例-薛冰許德新_第4頁
基于FPGA的科研訓(xùn)練范例-薛冰許德新_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、基于FPGA的科研訓(xùn)練范例8.1 可編程邏輯器件基本知識可編程邏輯器件(Programmable Logic Device,PLD)起源于20世紀(jì)70年代,是在專用集成電路(ASIC)的基礎(chǔ)上發(fā)展起來的一種新型邏輯器件,是當(dāng)今數(shù)字系統(tǒng)設(shè)計的主要平臺,其主要特點是完全由用戶通過軟件進(jìn)行配置和編程,從而完成特定的功能,且可以反復(fù)擦寫。8.1.1 可編程邏輯器件的發(fā)展及分類可編程邏輯器件根據(jù)集成密度可分為低密度可編程邏輯器件(LDPLD)和高密度可編程邏輯器件(HDPLD)兩類。LDPLD主要是指早期發(fā)展起來的PLD,它包括PROM、PLA、PAL和GAL四種,其集成密度一般小于700門/片,這里的

2、門是指PLD等效門。HDPLD包括EPLD、CPLD和FPGA三種,其集成密度大于700門/片。隨著集成工藝的發(fā)展,HDPLD的集成密度不斷增加,性能不斷提高。目前集成度最高的HDPLD可達(dá)數(shù)百萬門/片。目前,常用的可編程邏輯器件都是從與或陣列和門陣列發(fā)展起來的,所以可以從結(jié)構(gòu)上將其分為兩大類:(1) 陣列型PLD。(2) 現(xiàn)場可編程門陣列FPGA。陣列型PLD的基本結(jié)構(gòu)由與陣列和或陣列組成。簡單PLD(PROM、PLA、PAL和GAL)、EPLD和CPLD都屬于陣列型PLD。可擦除可編程邏輯器件EPLD(Erasable PLD) 是Altera公司推出的基于E2CMOS編程工藝的PLD,其

3、基本邏輯單元是宏單元。宏單元由可編程的與或陣列、可編程寄存器和可編程I/O三部分組成;復(fù)雜可編程邏輯器件CPLD(Complex PLD)是上個世紀(jì)80年代末Lattice公司提出在系統(tǒng)可編程(ISP,In System Programmability)技術(shù)以后于90年代初出現(xiàn)的。它是在EPLD的基礎(chǔ)上發(fā)展起來的,采用E2CMOS工藝制作,與EPLD相比,增加了內(nèi)部連線,對邏輯宏單元和I/O單元也有重大的改進(jìn)。現(xiàn)場可編程門陣列FPGA(Field Programmable Gate Array)是Xilinx公司1985年推出的,采用CMOS-SRAM編程工藝制作。其內(nèi)部由可構(gòu)造邏輯模塊(CL

4、B)、可構(gòu)造輸入輸出塊(IOB)和可編程互連資源(IR)組成。具有集成密度高、編程速度快、設(shè)計靈活及可再配置等特點。FPGA基于SRAM的架構(gòu),集成度高,以LE(包括查找表、觸發(fā)器及其他)為基本單元,有內(nèi)嵌Memory、DSP等,支持IO標(biāo)準(zhǔn)豐富。具有易揮發(fā)性,需要有上電加載過程。在實現(xiàn)復(fù)雜算法、隊列調(diào)度、數(shù)據(jù)處理、高性能設(shè)計、大容量緩存設(shè)計等領(lǐng)域中有廣泛應(yīng)用,如Altera公司的 Stratix、cyclone系列。盡管FPGA和CPLD都是可編程ASIC器件,有很多共同特點,但CPLD和FPGA結(jié)構(gòu)上的差異使它們具有各自的特點:1.CPLD更適合完成各種算法和組合邏輯,F(xiàn)PGA更適合于完成

5、時序邏輯。換句話說,F(xiàn)PGA更適合于觸發(fā)器豐富的結(jié)構(gòu),而CPLD更適合于觸發(fā)器有限而乘積項豐富的結(jié)構(gòu)。2.FPGA的集成度比CPLD高,具有更復(fù)雜的布線結(jié)構(gòu)和邏輯實現(xiàn)。3. 在編程方式上,CPLD主要是基于E2PROM或FLASH存儲器編程,編程次數(shù)可達(dá)1萬次以上,優(yōu)點是系統(tǒng)斷電時編程信息也不丟失。FPGA大部分是基于SRAM編程,編程信息在系統(tǒng)斷電時丟失,每次上電時,需從器件外部將編程數(shù)據(jù)重新寫入SRAM中。其優(yōu)點是可以編程任意次,可在工作中快速編程,從而實現(xiàn)板級和系統(tǒng)級的動態(tài)配置。8.1.2 Verilog HDL語言簡介Verilog硬件描述語言是描述電子電路行為和結(jié)構(gòu)的一種語言是一種I

6、EEE標(biāo)準(zhǔn)(IEEEStd.1364-1995)。Verilog用于模擬從隨機(jī)和純行為到門級和開關(guān)級的抽象范圍等層次的數(shù)字電子電路功能也用于從許多抽象(寄存器傳輸級)描述合并(即自動產(chǎn)生)門級描述Verilog。一般用于支持高層次的設(shè)計)或基于語言的設(shè)計),其中電子設(shè)計在用自動合并工具進(jìn)行詳細(xì)設(shè)計前要通過高層次的完全抽象仿真來檢驗。Verilog也廣泛應(yīng)用于IC的門級檢驗,包括仿真故障仿真和定時檢驗。Verilog 最初是在1984年由Gateway Design Automation公司開發(fā)Verilog-XL仿真器的時候一起開發(fā)出來。1989年Cadence Design Systems公

7、司并購Gateway公司,同時擁有對Verilog語言和Verilog-X仿真器的權(quán)力。1990年Cadence將Verilog語言不是Verilog-XL放到公共領(lǐng)域。為了使Verilog語言通過IEEE標(biāo)準(zhǔn)化過程一個非贏利性組織,Open Verilog International OVI將它不斷推進(jìn)結(jié)果,在1995年Verilog 成為一個IEEE標(biāo)準(zhǔn)。用Verilog HDL描述的電路設(shè)計就是該電路的Verilog HDL模型,也稱為模塊,是Verilog的基本描述單位。模塊描述某個設(shè)計的功能或結(jié)構(gòu)以及與其他模塊通信的外部接口,一般來說一個文件就是一個模塊,但并不絕對如此。模塊是并行運

8、行的,通常需要一個高層模塊通過調(diào)用其他模塊的實例來定義一個封閉的系統(tǒng),包括測試數(shù)據(jù)和硬件描述。一個模塊的基本架構(gòu)如下: module module_name (port_list) /聲明各種變量、信號 reg /寄存器 wire/線網(wǎng) parameter/參數(shù) input/輸入信號 output/輸出信號 inout/輸入輸出信號 function/函數(shù) task/任務(wù) /程序代碼 initial assignment always assignment module assignment gate assignment UDP assignment continous assignment

9、 endmodule 說明部分用于定義不同的項,例如模塊描述中使用的寄存器和參數(shù)。語句用于定義設(shè)計的功能和結(jié)構(gòu)。說明部分可以分散于模塊的任何地方,但是變量、寄存器、線網(wǎng)和參數(shù)等的說明必須在使用前出現(xiàn)。一般的模塊結(jié)構(gòu)如下: module <模塊名> (<端口列表>) <定義> <模塊條目> endmodule其中,<定義>用來指定數(shù)據(jù)對象為寄存器型、存儲器型、線型以及過程塊。<模塊條目>可以是initial結(jié)構(gòu)、always結(jié)構(gòu)、連續(xù)賦值或模塊實例。下面給出一個簡單的Verilog模塊,實現(xiàn)了一個二選一選擇器。例8.1 二選

10、一選擇器(見圖8.1)的Verilog實現(xiàn)圖8.1例8.1所示的二選一電路module muxtwo(out, a, b, s1); input a, b, s1; output out; reg out; always (s1 or a or b) if (!s1) out = a; else out = b; endmodule 模塊的名字是muxtwo,模塊有個端口:三個輸入端口a、b和s1,一個輸出端口out。由于沒有定義端口的位數(shù),所有端口大小都默認(rèn)為位;由于沒有定義端口a, b, s1的數(shù)據(jù)類型,這3個端口都默認(rèn)為線網(wǎng)型數(shù)據(jù)類型。輸出端口out定義為reg類型。如果沒有明確的說明,

11、則端口都是線網(wǎng)型的,且輸入端口只能是線網(wǎng)型的。8.1.3 Quartus II軟件開發(fā)流程Quartus II開發(fā)軟件是Altera公司的第四代可編程邏輯器件集成開發(fā)環(huán)境,提供從設(shè)計輸入到器件編程的全部功能。Quartus II軟件的開發(fā)流程可以基本概括為以下步驟:設(shè)計輸入、對工程進(jìn)行設(shè)置和約束、設(shè)計編譯與綜合、布局布線、設(shè)計仿真、設(shè)計時序分析和器件編程。(1) 設(shè)計輸入Quartus II工程包括在可編程器件中最終實現(xiàn)設(shè)計需要的所有設(shè)計文件,軟件源文件和其他相關(guān)文件。使用修訂,可以比較工程多個版本的設(shè)置和分配,更快、更有效地滿足設(shè)計要求。使用Quartus II 模塊編輯器、文本編輯器、Me

12、gaWizard插件管理器和EDA 設(shè)計輸入工具可以建立包括Altera宏功能模塊、參數(shù)化模塊庫(LPM) 功能和知識產(chǎn)權(quán)(IP) 功能在內(nèi)的設(shè)計。(2) 對工程進(jìn)行設(shè)置和約束建立工程和設(shè)計之后,可以使用Quartus II軟件中的Settings對話框、Assignment Editor 、Pin Planner以及Design Partitions 等窗口指定初始設(shè)計約束條件,例如:引腳分配、器件選項、邏輯選項和時序約束條件。(3) 設(shè)計編譯與綜合Quartus II的編譯器(Compiler)完成對設(shè)計文件的分析和綜合,其主要功能有:檢查設(shè)計錯誤、對邏輯進(jìn)行綜合、提取定時信息、在指定的A

13、ltera系列器件中進(jìn)行適配分割,產(chǎn)生的輸入文件將用于設(shè)計仿真、定時分析及器件編程。(4) 布局布線Quartus II的適配器(Fitter)完成對設(shè)計進(jìn)行布局布線,在Quartus II 軟件中是指“fitting( 適配)”。Fitter 使用由前一階段分析和綜合建立的數(shù)據(jù)庫,將工程的邏輯和時序要求與器件的可用資源相匹配。它將每個邏輯功能分配給最佳邏輯單元位置,進(jìn)行布線和時序分析,并選定相應(yīng)的互連路徑和引腳分配。(5) 設(shè)計仿真可以使用EDA 仿真工具或Quartus II仿真器(Simulator)對設(shè)計進(jìn)行功能與時序仿真,用以驗證設(shè)計系統(tǒng)的功能或者時序是否正確。(6) 設(shè)計定時分析Q

14、uartus II TimeQuest 時序分析器和標(biāo)準(zhǔn)時序分析器(Classic Timing Analyzer)可用于分析設(shè)計中的所有邏輯,并有助于指導(dǎo)Fitter 達(dá)到設(shè)計中的時序要求??梢允褂脮r序分析器產(chǎn)生的信息來分析、調(diào)試并驗證設(shè)計的時序性能。還可以使用快速時序模型進(jìn)行時序分析,驗證最佳情況( 最快速率等級的最小延時) 條件下的時序。(7) 器件編程使用Quartus II 軟件成功編譯工程之后,就可以對Altera公司的CPLD/FPGA器件進(jìn)行編程或配置。Quartus II Compiler 中的Assembler 模塊將生成最終的編程文件,結(jié)合Altera 編程硬件(Byte

15、Blaster MV/II,MasterBlaster,USB-Blaster以及EthernetBlaster等),可以使用Quartus II 編程器(Programmer)對器件進(jìn)行編程或配置。8.1.4 SOPC設(shè)計開發(fā)流程SOPC(System On Programmable Chip,可編程片上系統(tǒng))是Altera公司提出的一種靈活、高效的SOC(System On Chip,片上系統(tǒng))解決方案,是一種新的軟硬件協(xié)同設(shè)計的系統(tǒng)設(shè)計技術(shù)。它將處理器、存儲器、I/O接口、LVDS和CDR等系統(tǒng)設(shè)計需要的功能模塊集成到一個可編程器件上,構(gòu)成一個可編程片上系統(tǒng)。SOPC是PLD和ASIC技

16、術(shù)融合的結(jié)果。SOPC是一種特殊的嵌入式系統(tǒng),該系統(tǒng)由單個芯片完成整個系統(tǒng)的主要邏輯功能,同時該系統(tǒng)靈活方便,屬于可編程系統(tǒng),用戶可以方便地對系統(tǒng)進(jìn)行擴(kuò)展和升級。一個SOPC系統(tǒng)一般具備了以下幾個主要的特征:(1)嵌入式處理器內(nèi)核;(2)豐富的IP CORE資源;(3)片內(nèi)高速RAM資源;(4)處理器調(diào)試接口以及FPGA編程接口;(5)片上可編程邏輯資源。SOPC設(shè)計包括以32位Nios II軟核處理器為核心的嵌入式系統(tǒng)的硬件配置、硬件設(shè)計、硬件仿真、軟件設(shè)計以及軟件調(diào)試等。SOPC系統(tǒng)設(shè)計的基本軟件工具有:(1)Quartus II:用于完成Nios II系統(tǒng)的綜合、硬件優(yōu)化、適配、編程下載

17、以及硬件系統(tǒng)調(diào)試等;(2)SOPC Builder:Altera Nios II嵌入式處理器開發(fā)軟件包,用于實現(xiàn)Nios II系統(tǒng)的配置、生成;(3)Modelsim:用于對SOPC生成的Nios II系統(tǒng)的HDL描述進(jìn)行系統(tǒng)功能仿真;(4)Nios II IDE:用于進(jìn)行軟件開發(fā)、調(diào)試,以及向目標(biāo)開發(fā)板進(jìn)行Flash下載。SOPC系統(tǒng)設(shè)計流程如圖8.2所示,可以分為兩大部分:SOPC Builder進(jìn)行處理器及組件的生成,Quartus II軟件綜合布局布線。SOPC Builder需要完成整個開發(fā)中的大部分工作,其中最主要的是Nios II CPU的相關(guān)配置,在SOPC Builder中,

18、軟件提供了專用的Nios II IDE來輔助開發(fā),設(shè)計人員通過該軟件進(jìn)行Nios II系統(tǒng)開發(fā)模塊的驅(qū)動程序,用戶應(yīng)用程序的開發(fā)。IDE提供了C/C+語言的完整開發(fā)環(huán)境,可以完全按照軟件開發(fā)的模式進(jìn)行代碼的開發(fā)及調(diào)試。SOPC Builder完成整個嵌入式系統(tǒng)的所有組件配置及各組件之間的連接,并生成相關(guān)文件。Quartus II軟件根據(jù)SOPC Builder生成的HDL文件,以及其他模塊及IP完成整個工程的連接及綜合、布局布線。完成布局布線之后,可以進(jìn)行整個系統(tǒng)的驗證調(diào)試,用戶會根據(jù)需要開發(fā)相關(guān)配套軟件進(jìn)行驗證,當(dāng)驗證功能正確之后,進(jìn)行板級調(diào)試完成整個工程的開發(fā)。圖8.2 SOPC系統(tǒng)設(shè)計開

19、發(fā)流程8.2 LED燈控制顯示實驗8.2.1 設(shè)計內(nèi)容 本實驗主要學(xué)習(xí)如何連接簡單的輸入、輸出設(shè)備到一個FPGA芯片,并且用這些器件實現(xiàn)一個電路。我們將用DE2開發(fā)板上的撥碼開關(guān)SW17-0作為輸入,用LED燈作為輸出。8.2.2 軟件設(shè)計 1)設(shè)計一個8位的2選1多路選擇器用Verilog設(shè)計一個多路選擇器有很多種方法。但是在這個實驗里,要求只能用門級電路描述。比如:assign m=(s&x)|(s&y);這里x和y是輸入,s是選擇信號,m是輸出。X被定義為SW 0到7,Y被定義為SW 8到15,S被定義為SW17,M被定義為綠色的LEDG 0到7。這部分的完整代碼如下:

20、module mux2to1_8(LEDR,LEDG,SW); input 17:0SW; output 17:0LEDR; output 7:0LEDG; wire s; wire 7:0X,Y,M; assign S=SW17; assign X=SW7:0; assign Y=SW15:8; assign LEDR=SW; assign LEDG=M; mux2to1 m7(S,X7,Y7,M7); mux2to1 m6(S,X6,Y6,M6); mux2to1 m5(S,X5,Y5,M5); mux2to1 m4(S,X4,Y4,M4); mux2to1 m3(S,X3,Y3,M3);

21、 mux2to1 m2(S,X2,Y2,M2); mux2to1 m1(S,X1,Y1,M1); mux2to1 m0(S,X0,Y0,M0); endmodule /1-bit 2-to1 multiplexer module mux2to1(s,x,y,m); input s,x,y; output m; assign m=(s&x)|(s&y); endmodule在這段代碼里,有一個小技巧。將程序RTL代碼分成2部分。1個主模塊和1個多路選擇器模塊(mux2to1(s,x,y,m))。通過調(diào)用多選器模塊,可以很容易的實現(xiàn)設(shè)計。2)設(shè)計一個3位的5選1多路選擇器3位5選1

22、多路選擇器的設(shè)計比較簡單,可以使用4個3位的2選1的多路選擇器組合而成,如圖8.3所示。圖8.3 5選1多路選擇器完整代碼如下: assign m21 = (S1&m01)|(S1 module mux_3bit_5to1(S,U,V,W,X,Y,M); input2:0S,U,V,W,X,Y; output2:0M; wire2:0m0,m1,m2; / Leftmost 2 to 1 Multiplexers /Top assign m00 = (S0&U0)|(S0&V0); assign m01 = (S0&U1)|(S0&V1); assign

23、 m02 = (S0&U2)|(S0&V2); /Bottom assign m10 = (S0&W0)|(S0&X0); assign m11 = (S0&W1)|(S0&X1); assign m12 = (S0&W2)|(S0&X2); /Middle Multiplexer assign m20 = (S1&m00)|(S1&m10); &m11); assign m22 = (S1&m02)|(S1&m12); /Last Multiplexer assign M0 = (S2&a

24、mp;m20)|(S2&Y0); assign M1 = (S2&m21)|(S2&Y1); assign M2 = (S2&m22)|(S2&Y2); endmodule 生成的3位5選1多路選擇器框圖如圖8.4所示。將“選擇輸入端”S2:0連接到撥碼開關(guān)SW1715,剩下的15個撥碼開關(guān)SW140 平均分配給“3位輸入端” U2:0 到Y(jié)2:0, 將撥碼開關(guān)對應(yīng)連接到紅色LED燈LEDR上 并將輸出端M 2:0連接到綠色LED燈LEDG20上,編譯完成并分配管腳后將程序下載到FPGA芯片中,觀察撥動撥碼開關(guān)時LED燈的亮滅變化,驗證每個“3位輸入端”

25、U2:0 到Y(jié)2:0都可以通過“選擇輸入端”S2:0輸出到M 2:0。圖8.4 3位5選1多路選擇器框圖8.2.3 進(jìn)一步擴(kuò)展與提高根據(jù)上面的實驗設(shè)計一個1位8選1多路選擇器,將控制端S2:0的所有可能狀態(tài)全部用上,觀察撥動撥碼開關(guān)時LED燈的亮滅變化情況,驗證設(shè)計的正確性。8.3數(shù)碼管顯示實驗8.3.1設(shè)計內(nèi)容本實驗要求用七段數(shù)碼管來顯示H、E、L、O,七段數(shù)碼管的控制如圖8.5所示,圖中c2c1c0為控制端,數(shù)碼管上的標(biāo)號代表控制此段數(shù)碼管亮滅所對應(yīng)的序號。DE2開發(fā)板上的七段碼數(shù)碼管是共陽極(當(dāng)接收到邏輯電平位“0”時數(shù)碼管亮,“1”時數(shù)碼管滅),圖中的7-segment decoder

26、實際上是一個3-8線譯碼器。圖8.5 七段數(shù)碼管控制框圖8.3.2軟件設(shè)計1)1個數(shù)碼管顯示實驗七段數(shù)碼管的譯碼真值表見表8.1。表8.1 譯碼真值表控制端c2c1c0顯示字符對應(yīng)譯碼0.6000H1001000001E0110000010L1110001011O0000001100空1111111可以使用卡諾圖對表達(dá)式進(jìn)行化簡,例如如seg6(對應(yīng)譯碼0.6的最右邊的一列),化簡過程如圖8.6所示:圖8.6 卡諾圖化簡過程對于七段數(shù)碼管的每一段的表達(dá)式都可以根據(jù)真值表先進(jìn)行化簡(當(dāng)然Quartus軟件的綜合工具會自動化簡,但是如果考綜合工具化簡,每個表達(dá)式就會很長),化簡后的程序代碼如下:m

27、odule hello_7seg(SW,LEDR,HEX0); input 2:0 SW; output 2:0 LEDR; output 0:6 HEX0; assign LEDR=SW; /Seven Segment Decoder for "HELO" assign HEX00 = SW2|SW0; assign HEX01=SW2|(SW1&SW0)|(SW1&SW0); assign HEX02=SW2|(SW1&SW0)|(SW1&SW0); assign HEX03 = SW2|(SW1&SW0); assign HEX

28、04 = SW2; assign HEX05 = SW2; assign HEX06 = SW2|SW1; endmodule2)5個數(shù)碼管顯示實驗本實驗要求用5個數(shù)碼管循環(huán)顯示HELLO,涉及對前面實驗中程序代碼的引用。5個數(shù)碼管循環(huán)顯示的控制方式如圖8.7所示。圖8.7 5個數(shù)碼管循環(huán)顯示的控制方式可以引用實驗8.2.2中的多路選擇器作為每一個七段數(shù)碼管的顯示控制器,不同的多路選擇器連接不同的數(shù)碼管,每個數(shù)碼管都可以循環(huán)顯示不同的字符它們都受SW17.15的控制。將實驗8.2.2中2)和8.3.2中1)的代碼稍修改就可直接引用至本程序。程序代碼如下:module hello_5_7seg(

29、SW,HEX4,HEX3,HEX2,HEX1,HEX0); input 17:0SW; output 0:6 HEX4,HEX3,HEX2,HEX1,HEX0; wire 2:0 M4,M3,M2,M1,M0; mux_3bit_5to1 N4(SW17:15,SW14:12,SW11:9, SW8:6,SW5:3,SW2:0,M4); mux_3bit_5to1 N3(SW17:15,SW11:9,SW8:6, SW5:3,SW2:0,SW14:12,M3); mux_3bit_5to1 N2(SW17:15,SW8:6,SW5:3, SW2:0,SW14:12,SW11:9,M2); mu

30、x_3bit_5to1 N1(SW17:15,SW5:3,SW2:0, SW14:12,SW11:9,SW8:6,M1); mux_3bit_5to1 N0(SW17:15,SW2:0,SW14:12, SW11:9,SW8:6,SW5:3,M0); char_7seg H4(M4,HEX4); char_7seg H3(M3,HEX3); char_7seg H2(M2,HEX2); char_7seg H1(M1,HEX1); char_7seg H0(M0,HEX0); endmodule /implements a 7_segment decoder for H,E,L,O,and b

31、lank module char_7seg(c,display); input 2:0c; output 0:6display; /Seven Segment Decoder for "HELO" assign display0 = c2|c0; assign display1 = c2|(c0&c1)|(c1&c2&c0); assign display2 = c2|(c0&c1)|(c0&c1&c2); assign display3 = c2|(c1&c0); assign display4 = c2; assi

32、gn display5 = c2; assign display6 = c2|c1; endmodule /3BIT 5 to 1 Multiplexer Module module mux_3bit_5to1(S,U,V,W,X,Y,M); input2:0S,U,V,W,X,Y; output2:0M; wire2:0m0,m1,m2; / Leftmost 2 to 1 Multiplexers /Top assign m00 = (S0&U0)|(S0&V0); assign m01 = (S0&U1)|(S0&V1); assign m02 = (S0

33、&U2)|(S0&V2); /Bottom assign m10 = (S0&W0)|(S0&X0); assign m11 = (S0&W1)|(S0&X1); assign m12 = (S0&W2)|(S0&X2); /Middle Multiplexer assign m20 = (S1&m00)|(S1&m10); assign m21 = (S1&m01)|(S1&m11); assign m22 = (S1&m02)|(S1&m12); /Last Multiplexe

34、r assign M0 = (S2&m20)|(S2&Y0); assign M1 = (S2&m21)|(S2&Y1); assign M2 = (S2&m22)|(S2&Y2); endmodule8.3.3 進(jìn)一步擴(kuò)展與提高設(shè)計一個程序,使用8個數(shù)碼管循環(huán)顯示HELLO,如圖8.8所示。圖8.8 8個數(shù)碼管循環(huán)顯示HELLO8.4 2進(jìn)制數(shù)到10進(jìn)制數(shù)的轉(zhuǎn)換8.4.1 設(shè)計內(nèi)容本實驗要求在數(shù)碼管HEX3到HEX0上顯示SW15-0的值。SW15-12,SW11-8,SW7-4,SW3-0分別對應(yīng)于HEX3,HEX2,HEX1,HEX0。在數(shù)

35、碼管上顯示0-9,忽略開關(guān)表示的數(shù)值1010-1111。本實驗的目的是手工推導(dǎo)數(shù)碼管顯示的邏輯,要求只用賦值語句和布爾表達(dá)式實現(xiàn),并完成2進(jìn)制數(shù)到10進(jìn)制數(shù)之間的轉(zhuǎn)換。8.4.2 軟件設(shè)計1)2進(jìn)制數(shù)字的顯示2進(jìn)制數(shù)字的顯示程序比較簡單,只要推導(dǎo)出撥碼開關(guān)與數(shù)碼管顯示之間的邏輯關(guān)系即可,其程序代碼如下:module bin_7seg(HEX3,HEX2,HEX1,HEX0,SW);input 15:0SW;output 0:6HEX3,HEX2,HEX1,HEX0;btd H3(SW15:12,HEX3);btd H2(SW11:8,HEX2);btd H1(SW7:4,HEX1);btd H

36、0(SW3:0,HEX0);endmodule/binary-to-decimalmodule btd(s,seg);input 3:0s;output 0:6seg;assign seg6=s3&s2&s1|s2&s1&s0;assign seg5=s3&s2&s0|s2&s1|s1&s0;assign seg4=s0|s2&s1;assign seg3=s3&s2&s1&s0|s2&s1&s0|s2&s1&s0;assign seg2=s2&s1&

37、s0;assign seg1=s2&s1&s0|s2&s1&s0;assign seg0=s2&s1&s0|s3&s2&s1&s0;endmodule 2)2進(jìn)制數(shù)轉(zhuǎn)換為10進(jìn)制數(shù)將4位二進(jìn)制數(shù)V=v3v2v1v0轉(zhuǎn)換成2位十進(jìn)制數(shù)D=d1d0,在HEX1和HEX0上分別顯示d1和d0,輸出值與輸入值的對應(yīng)關(guān)系如表8.2:表8.2 二進(jìn)制與十進(jìn)制對應(yīng)關(guān)系圖8.9給出了電路的部分設(shè)計。比較器comparator用來檢測V9,電路A用來將9的輸入轉(zhuǎn)換成對應(yīng)的個位的BCD碼電路B用來將位二進(jìn)制的輸入轉(zhuǎn)換為對應(yīng)的BCD碼顯示。圖8

38、.9 二進(jìn)制到十進(jìn)制轉(zhuǎn)換電路對應(yīng)的程序代碼:module bin2dec(V,HEX1,HEX0);input 3:0V;output 0:6HEX1,HEX0;wire z; /comparator outputwire 2:0a; /circuit A outputwire 3:0m; /multiplexer outputcomparator C(V,z);circuita A(V2:0,a);mux_4b_2to1 M(V,1'b0,a,z,m);circuitb B(z,HEX1);btd D(m,HEX0);endmodule module circuitb(z,seg);

39、input z;output 0:6seg;assign seg6=1;assign seg5=z;assign seg4=z;assign seg3=z;assign seg2=0;assign seg1=0;assign seg0=z;endmodulemodule mux_4b_2to1(x,y,s,m);input 3:0x;input 3:0y;input s;output 3:0m;mux_2to1 u3(x3,y3,s,m3);mux_2to1 u2(x2,y2,s,m2);mux_2to1 u1(x1,y1,s,m1);mux_2to1 u0(x0,y0,s,m0);endmo

40、dule module mux_2to1(a,b,s,m);input a,b,s;output m;assign m=s?b:a;endmodulemodule circuita(v,a);input 2:0v;output 2:0a;assign a2=v2&v1;assign a1=v2&v1;assign a0=(v1&v0)|(v2&v0);endmodule/circuit comparatormodule comparator(v,z);input 3:0v;output z;assign z=(v3&v2)|(v3&v1);end

41、module8.4.3 進(jìn)一步擴(kuò)展與提高根據(jù)上面的實驗,設(shè)計一個將7位二進(jìn)制數(shù)V= v6v5v4v3v2v1v0轉(zhuǎn)換成3位十進(jìn)制數(shù)D= d2d1d0的程序。8.5 BCD碼加法器8.5.1 設(shè)計內(nèi)容本實驗學(xué)習(xí)利用FPGA硬件來實現(xiàn)加法的原理,主要包括基本的全加器以及行波進(jìn)位加法器的設(shè)計,并在此基礎(chǔ)上學(xué)習(xí)1位BCD加法器的設(shè)計。8.5.2 軟件設(shè)計1)行波進(jìn)位加法器行波進(jìn)位加法器的框圖如圖8.10所示:圖8.10 行波進(jìn)位加法器框圖圖8.10a 給出了一位全加器的電路圖,其輸入端為加數(shù)a,b以及來自低位的進(jìn)位端,輸出端為和s和向高位的進(jìn)位端。圖8.10b和圖8.10c分別給出了一位全加器的表示符

42、號和真值表,兩個一位二進(jìn)制數(shù)求和由 s = a + b + 計算,由四個一位全加器按照圖8-10d的連接方式便可以構(gòu)成一個4位的行波進(jìn)位加法器。程序代碼如下:module four_rc_adder(SW,LEDR,LEDG);input 8:0SW;output 8:0LEDR;output 4:0LEDG;wire 3:0a,b;wire cin;wire 3:0s;wire cout;wire 3:1c;assign LEDR=SW;assign cin=SW8;assign a=SW7:4;assign b=SW3:0;assign LEDG4=cout;assign LEDG3:0=

43、s;fadder fao(cin,a0,b0,s0,c1);fadder fa1(c1,a1,b1,s1,c2);fadder fa2(c2,a2,b2,s2,c3);fadder fa3(c3,a3,b3,s3,cout);endmodule/full addermodule fadder(ci,a,b,s,co);input ci,a,b;output s,co;assign s=ciab,co=(ab)?ci:b;endmodule2)1位BCD加法器BCD(Binary-Coded Decimal)碼也叫做二進(jìn)碼十進(jìn)數(shù)或二-十進(jìn)制代碼。用4位二進(jìn)制數(shù)來表示1位十進(jìn)制數(shù)中的09這10個數(shù)

44、碼。是一種二進(jìn)制的數(shù)字編碼形式, BCD碼這種編碼形式利用四個二進(jìn)制位元來儲存一個十進(jìn)制的數(shù)碼,使二進(jìn)制和十進(jìn)制之間的轉(zhuǎn)換得以快捷的進(jìn)行。例如十進(jìn)制數(shù)59的BCD碼為0101 1001。本實驗設(shè)計一個十進(jìn)制求和電路,輸入為兩個1位BCD碼加數(shù)A和B,低位進(jìn)位端carry-in,輸出為兩個加數(shù)的和(用兩位BCD碼表示)S1S0,注意處理和的最大值:S1S0=9+9+1=19。程序代碼如下:/circuit Amodule circuit_A(s,ao);input 3:0s;output 3:0ao;assign ao3=s3&s2&s1,ao2=(s3&s2&s

45、1)|(s3&s2&s1),ao1=(s3&s2&s1)|(s3&s2&s1),ao0=(s3&s2&s0)|(s3&s2&s0)|(s2&s1&s0);endmodule /4-bit 2-to-1 multiplexermodule mux2to1_4b(x,y,s,m);input 3:0x,y;input s;output 3:0m;mux_2to1 u3(x3,y3,s,m3);mux_2to1 u2(x2,y2,s,m2);mux_2to1 u1(x1,y1,s,m1);mux_2to1

46、 u0(x0,y0,s,m0);endmodule /2to1 multiplexermodule mux_2to1(a,b,s,m);input a,b,s;output m;assign m=s?b:a;endmodule /circuit Bmodule circuit_B(z,seg);input z;output 0:6seg;assign seg6=1;assign seg5=z;assign seg4=z;assign seg3=z;assign seg2=0;assign seg1=0;assign seg0=z;endmodule /7-segment decodermodu

47、le btd(s,seg);input 3:0s;output 0:6seg;assign seg6=s3&s2&s1|s2&s1&s0;assign seg5=s3&s2&s0|s2&s1|s1&s0;assign seg4=s0|s2&s1;assign seg3=s3&s2&s1&s0|s2&s1&s0|s2&s1&s0;assign seg2=s2&s1&s0;assign seg1=s2&s1&s0|s2&s1&

48、;s0;assign seg0=s2&s1&s0|s3&s2&s1&s0;endmodule /4-bit full addermodule fa_4b(a,b,s,cin,cout);input 3:0a,b;input cin;output 3:0s;output cout;wire 3:1c;fadder fao(cin,a0,b0,s0,c1);fadder fa1(c1,a1,b1,s1,c2);fadder fa2(c2,a2,b2,s2,c3);fadder fa3(c3,a3,b3,s3,cout);endmodule/full adde

49、rmodule fadder(ci,a,b,s,co);input ci,a,b;output s,co;assign s=ciab,co=(ab)?ci:b;endmodule /circuit comparatormodule comparator(v,z);input 3:0v;output z;assign z=(v3&v2)|(v3&v1);endmodule / top-level filemodule bcd_adder(SW,LEDR,LEDG,LEDG8,HEX6,HEX4,HEX1,HEX0);input 8:0SW; /Cin,A,Boutput 8:0L

50、EDR;output 4:0LEDG;output 0:6HEX6,HEX4,HEX1,HEX0;output LEDG8;wire 3:0sum; /sumwire co; /coutwire 3:0ao; /circuit_A outputwire 3:0m; /mux2to1_4b outputwire z; /comparator outputwire bi; /circuit_B inputwire va,vb; /A,B comparator outputassign LEDR=SW,LEDG4=co,LEDG3:0=sum,LEDG8=va|vb;assign bi=co|z;

51、fa_4b u0(SW7:4,SW3:0,sum,SW8,co);circuit_A u1(sum,ao);comparator u7(sum,z);mux2to1_4b u2(sum,ao,bi,m);btd u3(m,HEX0);circuit_B u4(bi,HEX1);btd u5(SW7:4,HEX6);btd u6(SW3:0,HEX4);comparator u8(SW7:4,va),u9(SW3:0,vb);endmodule8.5.3 進(jìn)一步擴(kuò)展與提高根據(jù)上面的實驗,設(shè)計一個2位BCD加法器。輸入為兩個2位BCD碼加數(shù)A和B,低位進(jìn)位端carry-in,輸出為兩個加數(shù)的和(用

52、三位BCD碼表示)S2S1S0,注意處理和的最大值:S2S1S0=99+99+1=199。8.6觸發(fā)器和鎖存器8.6.1 設(shè)計內(nèi)容本實驗學(xué)習(xí)觸發(fā)器的原理及其功能與應(yīng)用。觸發(fā)器(Flip Flop,簡寫為FF)是具有記憶功能的單元電路,由門電路構(gòu)成,專門用來接收存儲輸出0、1代碼。 它有雙穩(wěn)態(tài)、 單穩(wěn)態(tài)和無穩(wěn)態(tài)觸發(fā)器(多諧振蕩器)等幾種。它有兩個穩(wěn)定狀態(tài),“0”和“1”。在輸入信號作用下,兩個穩(wěn)態(tài)可相互轉(zhuǎn)換。8.6.2 軟件設(shè)計1)RS鎖存器圖8.11描述了門控RS鎖存器電路,可用門級電路或表達(dá)式來描述。圖8.11 門控鎖存器電路圖觸發(fā)器有兩個穩(wěn)定狀態(tài)。Qn為觸發(fā)器的原狀態(tài)(現(xiàn)態(tài)),即觸發(fā)信號輸入前的狀態(tài); Qn+1為觸發(fā)器的新狀態(tài)(次態(tài)),即觸發(fā)信號輸入后的狀態(tài)。其功能表見表8.3:ClkRSQn+1功能100

溫馨提示

  • 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

提交評論