可編程邏輯器件實(shí)驗(yàn)指導(dǎo)書(shū)V1.5(精編)_第1頁(yè)
可編程邏輯器件實(shí)驗(yàn)指導(dǎo)書(shū)V1.5(精編)_第2頁(yè)
可編程邏輯器件實(shí)驗(yàn)指導(dǎo)書(shū)V1.5(精編)_第3頁(yè)
可編程邏輯器件實(shí)驗(yàn)指導(dǎo)書(shū)V1.5(精編)_第4頁(yè)
可編程邏輯器件實(shí)驗(yàn)指導(dǎo)書(shū)V1.5(精編)_第5頁(yè)
已閱讀5頁(yè),還剩76頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、實(shí)驗(yàn)1 開(kāi)關(guān)、發(fā)光二極管和多路器本實(shí)驗(yàn)的目的是學(xué)習(xí)如何連接一個(gè)簡(jiǎn)單的外部輸入、輸出器件到fpga芯片以及如何在fpga器件上實(shí)現(xiàn)邏輯電路控制簡(jiǎn)單外部器件??紤]使用de2開(kāi)發(fā)板上撥動(dòng)開(kāi)關(guān)sw17-0(toggle switch)作為電路的輸入。使用發(fā)光二極管(light emitting diodes,leds)和7段顯示數(shù)碼管(7-segment display)作為電路的輸出。第1部分de2開(kāi)發(fā)板提供了18個(gè)撥動(dòng)開(kāi)關(guān),分別被命名為sw17-0,這些開(kāi)關(guān)可以用作為電路的輸入。de2開(kāi)發(fā)板同時(shí)還提供了18個(gè)紅色的led,被命名為ledr17-0,用于顯示電路的輸出值。圖1所示一個(gè)簡(jiǎn)單的veril

2、og hdl模塊,用led來(lái)顯示這些開(kāi)關(guān)的狀態(tài)。因?yàn)閾軇?dòng)開(kāi)關(guān)sw和led都是18個(gè),在verilog hdl代碼中,將它們表示成向量的形式更為方便,這樣我們可以在編程的時(shí)候使用一個(gè)賦值語(yǔ)句來(lái)代替以下的18個(gè)賦值語(yǔ)句。assign ledr17 = sw17;assign ledr16 = sw16;assign ledr0 = sw0;在de2開(kāi)發(fā)板上,fpga器件與撥動(dòng)開(kāi)關(guān)和發(fā)光二極管之間已經(jīng)正確連接。為了正確使用sw17-0和ledr17-0,必須在quartus ii工程中正確的進(jìn)行引腳分配(pin assignment)。關(guān)于引腳分配可以參考de2 user manual。例如,在de

3、2 user manual中已經(jīng)指明,撥動(dòng)開(kāi)關(guān)sw0被連接到fpga的n25引腳,ledr0被連接到ae23引腳。最好的引腳分配方式是在quartus ii軟件中導(dǎo)入de2_pin_assignments.csv文件,該文件可以在de2 system cd上或者altera公司的大學(xué)計(jì)劃網(wǎng)站上獲得。引腳分配過(guò)程在quartus ii introduction using verilog design中有詳細(xì)描述,該文件也可以從altera公司網(wǎng)站上獲得。注意:只有在verilog hdl代碼中使用的端口名與de2_assignments.csv使用的名字完全一致時(shí),向quarutus ii工程

4、導(dǎo)入de2_assignments.csv才是有效的。在de2_assignments.csv中對(duì)撥動(dòng)開(kāi)關(guān)和發(fā)光二極管的命名分別為sw0,sw17和ledr0,ledr17。這也是在例1中使用sw和ledr作為模塊端口的原因。例1 de2開(kāi)發(fā)板上使用撥動(dòng)開(kāi)關(guān)和發(fā)光二極管的verilog代碼/連接撥動(dòng)開(kāi)關(guān)sw和紅色的發(fā)光二極管ledr的簡(jiǎn)單的verilog hdl模塊module part1(sw,ledr);input 17:0 sw;output 17:0 ledr;assign ledr = sw;endmodule執(zhí)行以下步驟在de2開(kāi)發(fā)板上實(shí)現(xiàn)例1的電路:1、 新建quartus ii

5、工程,選擇cyclone ii ep2c35f672c6作為目標(biāo)芯片,該芯片是de2開(kāi)發(fā)板上的fpga芯片;2、 將例1所示的verilog hdl代碼加入到quaruts ii工程;3、 引腳分配,并編譯工程該工程;4、 將編譯好的電路下載到fpga器件。扳動(dòng)撥動(dòng)開(kāi)關(guān)觀察相應(yīng)的發(fā)光二極管顯示,驗(yàn)證電路功能是否正確;第2部分圖2(a)給出是2選1數(shù)據(jù)選擇器(multiplexer) 有時(shí)也稱(chēng)為多路器的電路原理圖,2選1數(shù)據(jù)選擇有多種實(shí)現(xiàn)方式。圖2(a)給出的是積之和(sum-of-product)形式,其中輸入s代表選擇輸入(select input)。如果s = 0,則多路器的輸出m等于輸入

6、x,如果s = 1則輸出等于y。圖2(b)給出了2選1數(shù)據(jù)選擇器的真值表(true table),圖2(c)給出的是2選1數(shù)據(jù)選擇器的電路符號(hào)。圖2 二選一的數(shù)據(jù)選擇器2選1數(shù)據(jù)選擇器可以使用verilog hdl的連續(xù)賦值語(yǔ)句語(yǔ)句描述assign m = (s & x) | (s & y);本部分要求編寫(xiě)verilog hdl模塊實(shí)現(xiàn)圖3(a)所示的電路,該模塊包含8個(gè)類(lèi)似于上面連續(xù)賦值語(yǔ)句。電路包括2個(gè)8位輸入x和y,產(chǎn)生一個(gè)8位的輸出m。如果s=0,那么m =x,如果s = 1,則m=y。通常稱(chēng)具有上述功能的邏輯電路為8位寬的2選1數(shù)據(jù)選擇器。圖3(b)給出了8位2選1數(shù)據(jù)選擇器的電路符

7、號(hào),其中x,y稱(chēng)為8位寬的數(shù)據(jù)輸入端,m是8位寬的數(shù)據(jù)輸出端。按如下步驟完成本實(shí)驗(yàn):圖3 8位寬的數(shù)據(jù)選擇器1、 新建quartus ii工程;2、 在工程中加入8位寬的2選1數(shù)據(jù)選擇器verilog hdl代碼。使用de2開(kāi)發(fā)板上的sw17作為輸入s,開(kāi)關(guān)sw7-0作為輸入x,sw15-8作為輸入y。連接撥動(dòng)開(kāi)關(guān)sw到紅色的發(fā)光二極管ledr,同時(shí)連接輸出m到綠色的發(fā)光二極管ledg7-0。3、 引腳分配,確保作為電路的輸入端口的cyclone ii fpga的引腳正確連接到撥動(dòng)開(kāi)關(guān)sw,作為電路輸出的ppga引腳正確與ledr和ledg連接;4、 編譯;5、 將編譯好的電路下載到fpga器

8、件。通過(guò)扳動(dòng)撥動(dòng)開(kāi)關(guān)sw改變電路輸入,同時(shí)觀察ledr和ledg的顯示是否與之匹配,測(cè)試8位寬的2選1數(shù)據(jù)選擇器的功能是否正確。第3部分圖2給出的2選1數(shù)據(jù)選擇器,可以從2個(gè)輸入x和y中選擇一個(gè)作為輸出。本部分考慮一個(gè)稍微復(fù)雜的電路5選1數(shù)據(jù)選擇器,5選1數(shù)據(jù)選擇器從5個(gè)輸入信號(hào)u,v,w,x和y選擇一個(gè)作為輸出m的值。圖4(a)給出如何通過(guò)2選1數(shù)據(jù)選擇器構(gòu)建5選1數(shù)據(jù)選擇器。電路使用3個(gè)數(shù)據(jù)選擇位作為輸入s2s1s0,圖4(b)給出了電路真值表。圖4(c)給出5選1數(shù)據(jù)選擇器的電路符號(hào)。第2部分曾經(jīng)介紹了8位寬的2選1數(shù)據(jù)選擇器,通過(guò)實(shí)例化8個(gè)2選1數(shù)據(jù)選擇器可以容易地實(shí)現(xiàn)8位寬的2選1數(shù)

9、據(jù)選擇器。按照類(lèi)似的思路,圖5給出的3位寬的5選1數(shù)據(jù)選擇器,可以通過(guò)實(shí)例化3個(gè)1位寬的5選1數(shù)據(jù)選擇器實(shí)現(xiàn)。圖4 1位寬5選1數(shù)據(jù)選擇器圖5 三位寬5選1數(shù)據(jù)選擇器按照以下步驟實(shí)現(xiàn)3位寬的5選1數(shù)據(jù)選擇器:1、 新建quartusii工程;2、 編寫(xiě)3位寬的5選1數(shù)據(jù)選擇器的verilog hdl源文件。使用撥動(dòng)開(kāi)關(guān)sw17-15作為5選1數(shù)據(jù)選擇器的選擇輸入,使用其余的15個(gè)撥動(dòng)開(kāi)關(guān)sw14-0作為5個(gè)3位寬的輸入u,v,w,x和y。連接撥動(dòng)開(kāi)關(guān)sw到紅色發(fā)光二極管ledr,同時(shí)連接輸出m到綠色發(fā)光二極管ledg2-0。3、 引腳分配,編譯該工程;4、 下載編譯好的電路到fpga芯片。扳動(dòng)

10、撥動(dòng)開(kāi)關(guān)改變電路的輸入,觀察leds顯示情況測(cè)試3位寬的5選1數(shù)據(jù)選擇器是否工作正常。確保每個(gè)輸入都能被輸出m正確選擇。第4部分圖6給出一個(gè)具有3個(gè)輸入c2,c1,c0的7段顯示譯碼電路模塊。該譯碼電路具有7個(gè)輸出用于在驅(qū)動(dòng)7段顯示數(shù)碼管顯示字符。表1列出每個(gè)輸入c2,c1,c0的值所對(duì)應(yīng)的顯示字符。為了使本實(shí)驗(yàn)不至太復(fù)雜,表1中只列出了4個(gè)字符(另外如果輸入為100-111,數(shù)碼管顯示“blank”,即不顯示)。圖6 每個(gè)數(shù)碼管共有7個(gè)筆段,分別標(biāo)注為0-6。當(dāng)與每個(gè)筆段連接的信號(hào)被驅(qū)動(dòng)成邏輯0時(shí),相應(yīng)的筆段就會(huì)被點(diǎn)亮(共陰極數(shù)碼管)。本實(shí)驗(yàn)要求采用verilog hdl設(shè)計(jì)顯示譯碼電路,其

11、功能是根據(jù)輸入值的不同產(chǎn)生相應(yīng)的顯示編碼,用于驅(qū)動(dòng)數(shù)碼管顯示合適的字符(表1)。要求:只能使用連續(xù)賦值語(yǔ)句實(shí)現(xiàn)該電路。表1具體操作步驟如下:1. 新建quartus ii工程;2. 編寫(xiě)7段顯示譯碼電路的verilog hdl文件。連接撥動(dòng)開(kāi)關(guān)sw2-0到譯碼電路的輸入c2,c1,c0,連接譯碼電路的輸出到de2開(kāi)發(fā)板上的數(shù)碼管hex0。數(shù)碼管的每個(gè)筆段分別叫做hex00,hex01,hex06,如圖6所示。代碼中需要聲明7位寬的輸出端口output 6:0hex0;這樣可以保證電路輸出名與de2 user manual和de2_pin_assignments.csv中的文件名匹配。3. 引腳

12、賦值,并編譯該工程;4. 下載編譯好的電路到fpga芯片,扳動(dòng)撥動(dòng)開(kāi)關(guān)改變電路的輸入,觀察數(shù)碼管顯示是否正確。第5部分考慮圖7所示的電路。3位寬的5選1數(shù)據(jù)選擇器用于從5個(gè)需要在數(shù)碼管顯示的字符中選擇1個(gè)。第4部分設(shè)計(jì)的7段顯示譯碼電路可以顯示5個(gè)字符“h”,“e”,“l(fā)”,“o”以及“blank”中任意1個(gè)。字符顯示對(duì)應(yīng)的編碼通過(guò)撥動(dòng)開(kāi)關(guān)sw14-0設(shè)置,具體需要顯式哪個(gè)字符通過(guò)撥動(dòng)開(kāi)關(guān)sw17-15選擇。圖7 圖7所示電路對(duì)應(yīng)的verilog hdl代碼的框架如圖8所示。注意該實(shí)現(xiàn)中使用了第3部分和第4部分設(shè)計(jì)的電路。本部分要求對(duì)圖8所示的電路進(jìn)行擴(kuò)展,使用5個(gè)5選1數(shù)據(jù)選擇器和5個(gè)7段顯

13、示譯碼電路,每個(gè)譯碼電路連接1個(gè)數(shù)碼管。改變撥動(dòng)開(kāi)關(guān)sw17-15時(shí),以循環(huán)滾動(dòng)的在5個(gè)數(shù)碼管上顯示字符。例如,如果顯示字符“hello”,那么電路顯示模式如表2所示。表2按照如下步驟完成實(shí)驗(yàn)1. 新建quartus ii工程;2. 編寫(xiě)電路的verilog hdl代碼,并將其包含到quartus ii工程中。連接撥動(dòng)開(kāi)關(guān)sw17-15到5個(gè)3位寬5選1數(shù)據(jù)選擇器的選擇輸入端。按照表2的方式,將撥動(dòng)開(kāi)關(guān)sw14-0連接的每個(gè)3位寬5選1數(shù)據(jù)選擇器的數(shù)據(jù)輸入端。分別連接數(shù)據(jù)選擇器的輸出到5個(gè)7段顯示數(shù)碼管hex4,hex3,hex2,hex1和hex0。3. 引腳分配,編譯整個(gè)工程;4. 下載編

14、譯好的電路到fpga器件。正確設(shè)置開(kāi)關(guān)sw14-0的值,扳動(dòng)撥動(dòng)開(kāi)關(guān)sw17-15改變電路輸入,觀察電路工作是否正常。第6部分對(duì)第5部分設(shè)計(jì)的電路進(jìn)行擴(kuò)展,使用de2開(kāi)發(fā)板上的全部8個(gè)數(shù)碼管至少顯示5個(gè)字符。當(dāng)撥動(dòng)開(kāi)關(guān)sw17-15變化時(shí),顯示模式可以循環(huán)滾動(dòng)。如果希望顯示“hello”,電路的顯示如表3所示。表3具體操作過(guò)程如下:1. 新建quartus ii工程,選擇cyclone ii ep2c35f672c6作為目標(biāo)芯片;2. 設(shè)計(jì)電路的verilog hdl源文件,并將其加入到工程中。連接撥動(dòng)開(kāi)關(guān)sw17-15到8個(gè)3位寬5選1數(shù)據(jù)選擇器的選擇輸入端。按照表3的方式,將撥動(dòng)開(kāi)關(guān)sw1

15、4-0連接的每個(gè)3位寬5選1數(shù)據(jù)選擇器的數(shù)據(jù)輸入端。分別連接數(shù)據(jù)選擇器的輸出到8個(gè)7段顯示數(shù)碼管hex7,hex6,hex5,hex4,hex3,hex2,hex1和hex0。提示:(1)數(shù)據(jù)選擇器的某些輸入必須選擇字符“blank”;(2)使用8選1數(shù)據(jù)選擇器,不能使用5選1數(shù)據(jù)選擇器;3. 引腳分配;4. 下載電路的fpga芯片,扳動(dòng)撥動(dòng)開(kāi)關(guān)改變電路輸入,觀察顯示字符是否正確;實(shí)驗(yàn)2 數(shù)碼和顯示本試驗(yàn)的目的是練習(xí)設(shè)計(jì)組合邏輯電路,試驗(yàn)的主要內(nèi)容是二進(jìn)制-十進(jìn)制譯碼器和bcd碼加法器等組合邏輯電路。第1部分考慮將撥動(dòng)開(kāi)關(guān)sw15-0所代表的值顯示在7段顯示數(shù)碼管hex3-hex0上。即分別將

16、開(kāi)關(guān)sw15-12,sw11-8,sw7-4和sw3-0所表示的十進(jìn)制數(shù)顯示在數(shù)碼管hex3,hex2,hex1,hex0上。要求設(shè)計(jì)電路顯示數(shù)碼0-9。把數(shù)值1010-1111處理為dont care。inputoutputabcdhexn6hexn5hexn4hexn3hexn2hexn1hexn0000010000000001111100100100100100001101100000100001100101010010010011000000100111111100010000000000100100110001010xxxxxxx1011xxxxxxx1100xxxxxxx1101x

17、xxxxxx1110xxxxxxx1111xxxxxxx1、 新建quartus ii工程,在de2開(kāi)發(fā)板實(shí)現(xiàn)該電路。本試驗(yàn)的目的是用手動(dòng)方式設(shè)計(jì)7段顯示譯碼電路。要求只能使用連續(xù)賦值語(yǔ)句,將輸出定義為關(guān)于輸入的邏輯表達(dá)式。2、 編寫(xiě)電路的verilog hdl源文件,并將其包含到quartus工程。將fpga引腳連接到相應(yīng)的撥動(dòng)開(kāi)關(guān)和7段顯示數(shù)碼管。(參考user manual for the de2 board)。引腳分配過(guò)程也可以參考quartus ii introduction using verilog design,該文件可以在altera公司網(wǎng)站大學(xué)計(jì)劃網(wǎng)站的de2 system

18、 cd上找到。3、 編譯,并且將編譯好的電路下載到fpga中;4、 扳動(dòng)撥動(dòng)開(kāi)關(guān)改變電路輸入,觀察數(shù)碼管顯示并分析電路功能是否正確;第2部分本部分設(shè)計(jì)一個(gè)數(shù)碼轉(zhuǎn)換電路,功能是將四位二進(jìn)制數(shù)v=v3v2v1v0轉(zhuǎn)換為其相應(yīng)的十進(jìn)制數(shù)d=d1d0,其輸出輸入關(guān)系如表1所示。本設(shè)計(jì)的一部分電路如圖1所示。表2 該設(shè)計(jì)包含一個(gè)比較器(comparator),比較輸入值v是否大于9,如果大于9則輸出高電平,否則輸出低電平。比較器的輸出控制數(shù)碼管顯示。本試驗(yàn)要求編寫(xiě)該電路的verilog hdl源代碼。整個(gè)代碼包括比較器、數(shù)據(jù)選擇器、電路a(不包括電路b或者7段顯示譯碼器)。電路一個(gè)包含4位寬的輸入v,4

19、位寬的輸出m和一個(gè)1位輸出z。要求只使用boolean表達(dá)式來(lái)表示需要的邏輯功能(只使用assign語(yǔ)句)。在設(shè)計(jì)中不能包含任何if-else,case或者類(lèi)似的verilog語(yǔ)句。具體步驟如下:1、 新建quartusii工程;2、 編譯,功能仿真;驗(yàn)證比較器、數(shù)據(jù)選擇器和電路a的功能是否正確;3、 編寫(xiě)電路b和7段顯示譯碼電路的verilog hdl代碼。使用de2開(kāi)發(fā)板上開(kāi)關(guān)sw3-0代表輸入v,使用hex1和hex0顯示數(shù)字d1和d0。確保引腳分配正確;4、 編譯,下載編譯好電路到fpga芯片中;5、 撥動(dòng)撥動(dòng)開(kāi)關(guān)sw3-0改變收入值v,觀察輸出顯示以測(cè)試電路的正確性;圖1 二進(jìn)制十進(jìn)

20、制轉(zhuǎn)換電路框圖第3部分全加器電路的原理圖如圖2(a)所示,其中a,b和ci為輸入,s和co為輸出。圖2(b)和(c)分別給出了全加器的電路符號(hào)和真值表,全加器電路為2位co, s= a + b + ci。圖2(d)給出了1個(gè)4位全加器原理圖,通過(guò)實(shí)例4個(gè)1位全加器可以實(shí)現(xiàn)4位全加器。這種類(lèi)型加法器被稱(chēng)為行波進(jìn)位加法器,因?yàn)檫M(jìn)位信號(hào)是從一個(gè)全加器依次傳遞到另一個(gè)全加器。設(shè)計(jì)電路的verilog hdl代碼,具體步驟如下:、 新建quartus ii工程,編寫(xiě)全加器子電路的verilog hdl文件,然后編寫(xiě)頂層設(shè)計(jì)模塊,在頂層模塊中實(shí)例化4個(gè)1位全加器全加器構(gòu)成1個(gè)四位全加器。、 使用開(kāi)關(guān)sw7

21、-4和sw3-0分別表示輸入a和b。使用sw8代表加法器的進(jìn)位ci,連接sw開(kāi)關(guān)到相應(yīng)的ledr,連接全加器輸出信號(hào)cout和s到綠色的ledg。、 在project中作必要的引腳分配,編譯,然后下載編譯好的電路到fpga芯片。、 通過(guò)輸入不同的值a,b和ci以測(cè)試電路的正確性。圖2第4部分第2部分討論了二進(jìn)制到十進(jìn)制數(shù)的轉(zhuǎn)換問(wèn)題。有些情況下,構(gòu)建十進(jìn)制加法電路更有意義,十進(jìn)制一般可以采用bcd碼表示。例如,十進(jìn)制數(shù)59的bcd表示為0101 1001。本部分要求設(shè)計(jì)一個(gè)bcd碼加法電路。電路的輸入是bcd碼a、b和進(jìn)位標(biāo)志cin。輸出是二個(gè)bcd碼和s1s0。注意本試驗(yàn)要求處理的最大和是s1

22、s0 = 9 + 9 + 1 = 19。執(zhí)行以下步驟:1. 為bcd碼加法電路新建quartus ii工程。利用第3部分的4位全加器電路計(jì)算輸入信號(hào)a和b的和sum以及進(jìn)位cout。再將4位寬的sum和1位的進(jìn)位標(biāo)志cout轉(zhuǎn)換成bcd碼,bcd轉(zhuǎn)換電路的設(shè)計(jì)與第2部分設(shè)計(jì)的bcd碼轉(zhuǎn)換電路非常相似。要求使用簡(jiǎn)單的assign語(yǔ)句來(lái)完成邏輯的設(shè)計(jì),設(shè)計(jì)中不允許使用像if-else和case等行為描述語(yǔ)句。2. 使用開(kāi)關(guān)sw7-4和開(kāi)關(guān)sw3-0代表輸入a和b,使用sw8作為進(jìn)位標(biāo)志,同時(shí)連接撥動(dòng)開(kāi)關(guān)sw到紅色發(fā)光二極管ledr,連接由輸入a+b產(chǎn)生的四位和以及進(jìn)位標(biāo)志到綠色的發(fā)光二極管ledg

23、,在7段顯示數(shù)碼管hex6和hex4上顯示a和b,在hex1和hex0上顯示求和結(jié)果s1s0。3. 因?yàn)殡娐分惶幚韇cd碼,檢查當(dāng)輸入a和b大于9的情況下的結(jié)果如何。如果出這種情況出現(xiàn),通過(guò)點(diǎn)亮綠色發(fā)光二極管ledg8來(lái)指示這種情況。4. 引腳分配,編譯你所設(shè)計(jì)的工程,下載編譯好的電路到fpga器件;5、通過(guò)改變不同的輸入值a,b和cin,測(cè)試電路功能是否正確。第5部分設(shè)計(jì)一個(gè)2位bcd碼加法電路,a1a0和b1b0相加產(chǎn)生3個(gè)bcd碼的和s2s1s0。實(shí)例第4部分設(shè)計(jì)bcd碼加法電路兩次。執(zhí)行步驟如下:1. 使用開(kāi)關(guān)sw15-8和sw7-0分別代表2個(gè)bcd碼數(shù)字a1a0和b1b0。a1a0

24、的值顯示在7段顯示數(shù)碼管hex7和hex6上,而b1b0顯示在hex5和hex4上。而bcd的和s2s1s0則分別顯示在7段顯示數(shù)碼管hex2,hex1和hex0。2. 引腳分配和編譯;3. 下載電路到fpga芯片,然后測(cè)試其正確性;第6部分第5部分通過(guò)實(shí)例化第4部分設(shè)計(jì)的bcd碼加法器電路實(shí)現(xiàn)了一個(gè)2位bcd碼加法電路。根據(jù)以下提供的算法(偽代碼),可以采用另外的一種方法設(shè)計(jì)2位bcd碼加法電路??紤]使用什么樣的電路實(shí)現(xiàn)這些偽代碼。第1, 9, 10和18行代表加法器,第2-8行和11-17相應(yīng)于數(shù)據(jù)選擇器,測(cè)試條件t0 9和t1 9則需要比較器來(lái)實(shí)現(xiàn)。試驗(yàn)要求你寫(xiě)verilog代碼來(lái)實(shí)現(xiàn)這

25、些偽碼。要求:對(duì)于第第9行和18行所示的減法操作,要求在verilog hdl代碼使用加法操作,不能使用減法操作。在代碼中使用if-else語(yǔ)句、以及verilog hdl操作符“”和“+”,依靠verilog hdl編譯器(compiler) 給出實(shí)際的電路實(shí)現(xiàn),本實(shí)驗(yàn)的目的是考慮verilog hdl編譯器對(duì)于電路設(shè)計(jì)的影響。1. 新建quartus ii工程,使用與第5部分相同的開(kāi)關(guān)、發(fā)光二極管和7段顯示數(shù)碼管設(shè)置,然后編譯你設(shè)計(jì)的電路。2. 使用quartus ii軟件的rtl viewer工具檢查電路結(jié)構(gòu),并比較該電路與第4部分設(shè)計(jì)的電路。3、下載編譯好的電路到de2開(kāi)發(fā)板,測(cè)試其正

26、確性通過(guò)改變輸入a1a0和b1b0。第7部分設(shè)計(jì)組合電路,轉(zhuǎn)換6位二進(jìn)制數(shù)碼為2位以bcd碼表示的十進(jìn)制數(shù)碼。使用開(kāi)關(guān)sw5-0代表輸入的二進(jìn)制數(shù)碼,使用7段顯示數(shù)碼管hex1和hex0顯示十進(jìn)制數(shù)。在de2開(kāi)發(fā)板上實(shí)現(xiàn)該電路并驗(yàn)證其功能是否正確。試驗(yàn)3 鎖存器、觸發(fā)器和寄存器本試驗(yàn)的目的是學(xué)習(xí)鎖存器(latches)、觸發(fā)器(flip-flops)和寄存器(registers)的設(shè)計(jì)。第1部分altera公司的fpga器件內(nèi)部包含觸發(fā)器單元可以用來(lái)實(shí)現(xiàn)所設(shè)計(jì)的電路。本試驗(yàn)的第4部分演示如何使用觸發(fā)器設(shè)計(jì)電路。本實(shí)驗(yàn)首先研究在不使用fpga內(nèi)部的專(zhuān)用觸發(fā)器情況下,如何在fpga器件內(nèi)部實(shí)現(xiàn)這些

27、存儲(chǔ)元件(鎖存器、觸發(fā)器等)。圖3-1 rs鎖存器電路圖3-1給出了rs鎖存器電路的門(mén)級(jí)實(shí)現(xiàn)的原理圖??梢允褂脙煞N風(fēng)格的verilog hdl代碼描述該rs鎖存器電路,代碼如圖3-2所示。圖3-2(a)給出的是rs鎖存器的門(mén)級(jí)描述。圖3-2(b)采用連續(xù)賦值語(yǔ)句(邏輯表達(dá)式)實(shí)現(xiàn)該rs鎖存器電路,兩種描述方式實(shí)現(xiàn)的電路結(jié)構(gòu)是一樣的。如果在包含4輸入查找表的fpga內(nèi)部實(shí)現(xiàn)該rs鎖存器,只需要1個(gè)4輸入查找表實(shí)現(xiàn)該rs存儲(chǔ)器,如圖3-3(a)所示。盡管使用1個(gè)4輸入查找可以正確實(shí)現(xiàn)該鎖存器電路,但是這種實(shí)現(xiàn)方式無(wú)法觀察rs觸發(fā)器的內(nèi)部信號(hào),比如r_g和s_g,因?yàn)檫@些內(nèi)部信號(hào)不是lut的輸出信號(hào)

28、。為了在電路中保持這些內(nèi)部信號(hào),必須在verilog hdl代碼中包含一些編譯指令。圖3-2中指令/* synthesis keep */使quartus ii軟件編譯器為每個(gè)信號(hào)r_q,s_q,qa和qb使用獨(dú)立的邏輯單元。編譯后的電路會(huì)使用4個(gè)4輸入查找表實(shí)現(xiàn)該電路,如圖3-3(b)所示。圖2 (a) 圖2 (b)圖3-3新建quartus ii工程,執(zhí)行如下操作:1. 新建quartus ii工程實(shí)現(xiàn)該rs鎖存器電路,選擇目標(biāo)器件為cyclone ii ep2c35f672c6。2. 按照?qǐng)D3-2(a)或者圖3-2(b)新建verilog hdl文件,然后將該文件包含到工程中。注意:兩個(gè)

29、版本的verilog hdl代碼產(chǎn)生的電路結(jié)構(gòu)是相同的。3. 編譯。使用quartus ii軟件的rtl viewer工具觀察兩種描述方式產(chǎn)生的門(mén)級(jí)電路結(jié)構(gòu),使用technology viewer工具驗(yàn)證quartus ii軟件實(shí)現(xiàn)的電路結(jié)構(gòu)是否與圖3-3(b)一致。4. 新建vector waveform file(.vwf)文件,在vwf文件包含電路的輸入和輸出,在quarutsii軟件中畫(huà)出電路輸入r和s的波形,使用quartus ii仿真器仿真該電路。驗(yàn)證電路的功能和時(shí)序是否正確。第2部分圖3-4給出d鎖存器電路的門(mén)級(jí)實(shí)現(xiàn)。圖3-4按以下步驟完成本實(shí)驗(yàn)1. 新建quartus ii工程

30、。按照?qǐng)D3-2(b)的風(fēng)格設(shè)計(jì)d鎖存器的verilog hdl文件。使用/*synthesis keep*/綜合指令,以確保信號(hào)r,s_g,r_g,qa和qb使用獨(dú)立的邏輯單元實(shí)現(xiàn)。2. 選擇cyclone ii ep2c35f672c6作為目標(biāo)芯片,編譯該工程。使用technology veiwer工具查看電路結(jié)構(gòu)。3. 功能仿真驗(yàn)證電路功能是否正確,執(zhí)行時(shí)序仿真驗(yàn)證d鎖存器的時(shí)序是否正確;4. 新建quartus ii工程,在de2開(kāi)發(fā)板上實(shí)現(xiàn)d鎖存器電路。在該工程的頂層文件中需要為d鎖存器電路設(shè)計(jì)合適的輸入和輸出端口,在頂層模塊中實(shí)例d鎖存器模塊。使用sw0代表d鎖存器的輸入,sw1表示

31、d鎖存器的時(shí)鐘輸入。連接輸出q到ledr0。5. 重新編譯,下載電路到de2開(kāi)發(fā)板;6. 撥動(dòng)撥動(dòng)開(kāi)關(guān)sw改變電路輸入,觀察輸出q,測(cè)試電路功能是否正確;第3部分主從d觸發(fā)器的門(mén)級(jí)實(shí)現(xiàn)如圖3-5所示。圖3-5完成如下操作:1. 新建quartus ii工程。設(shè)計(jì)主從d觸發(fā)器的verilog hdl模塊,主要部分是實(shí)例2個(gè)第2部分設(shè)計(jì)的d鎖存器;2. 在quartus ii工程中包括恰當(dāng)?shù)妮斎胼敵龆丝?。使用sw0表示數(shù)據(jù)輸入d,使用sw1表示clk,連接輸出q到ledr0;3. 編譯;4. 使用technology viewer觀察d觸發(fā)器電路,功能仿真驗(yàn)證電路實(shí)現(xiàn)是否正確;第4部分圖3-6給出

32、的電路包括3個(gè)存儲(chǔ)元件:d鎖存器、上升沿觸發(fā)d觸發(fā)器和下降沿觸發(fā)的d觸發(fā)器。按如下步驟在quartus ii軟件中實(shí)現(xiàn)并仿真圖3-6所示的電路:1. 新建quartus ii工程;2. 編寫(xiě)verilog hdl文件實(shí)例這3個(gè)存儲(chǔ)元件。本部分要求不能使用/*synthesis keep*/綜合指令。圖3-7給出了d鎖存器(圖3-4)的行為級(jí)描述。d鎖存器可以采用1個(gè)4輸入查找表實(shí)現(xiàn)。使用圖3-7所示的行為級(jí)描述描述圖3-6所示的電路。3. 編譯該工程,使用technology viewer觀察實(shí)現(xiàn)的電路。驗(yàn)證使用1個(gè)查找表實(shí)現(xiàn)的鎖存器以及fpga提供的觸發(fā)器的功能。4. 新建vector wa

33、veform file(.vwf),該文件中包含電路的輸入和輸出,按圖3-6畫(huà)出輸入d和clk信號(hào)。仿真產(chǎn)生電路的輸出信號(hào),比較3個(gè)存儲(chǔ)元件的不同行為。圖3-6module d_latch(d, clk, q) input d,clk; output reg q; always(d, clk)if(clk) q = d;endmodule圖3-7第5部分本實(shí)驗(yàn)希望在4個(gè)7段顯示數(shù)碼管hex7-4上顯式16位數(shù)a的值(十進(jìn)制),在4個(gè)7段顯示數(shù)碼管hex3-0上顯式16位數(shù)b值的值(十六進(jìn)制)。a和b的值由de2開(kāi)發(fā)板上的撥動(dòng)開(kāi)關(guān)提供。因?yàn)殚_(kāi)發(fā)板上只有16個(gè)撥動(dòng)開(kāi)關(guān),所以需要首先設(shè)置a的,之后在

34、設(shè)置b的值,因此電路必須具有存儲(chǔ)功能存儲(chǔ)a的值。1. 新建quartus ii工程;2. 設(shè)計(jì)電路的verilog hdl代碼。使用key0代碼低電平有效的異步復(fù)位信號(hào),使用key1作為時(shí)鐘輸入;3. 將verilog hdl文件包含到quartus ii工程;4. 引腳分配;5. 重新編譯,下載編譯好的電路到fpga器件;6. 改變電路輸入,測(cè)試電路功能是否正確;試驗(yàn)4 計(jì)數(shù)器本試驗(yàn)的目的是練習(xí)使用計(jì)數(shù)器(counter)第1部分考慮圖4-1所示電路,該電路是1個(gè)由4個(gè)t觸發(fā)器構(gòu)成的同步四位計(jì)數(shù)器。在使能信號(hào)enable有效的情況下,該計(jì)數(shù)器在每個(gè)時(shí)鐘上升沿時(shí)計(jì)數(shù)值加1。復(fù)位信號(hào)reset置

35、位時(shí),計(jì)數(shù)器的計(jì)數(shù)值清0。本實(shí)驗(yàn)要求實(shí)現(xiàn)一個(gè)一個(gè)同類(lèi)型的16位計(jì)數(shù)器。圖4-1 同步4位計(jì)數(shù)器1. 根據(jù)圖1所描述的計(jì)數(shù)器結(jié)構(gòu),使用verilog hdl設(shè)計(jì)16位計(jì)數(shù)器。要求:首先設(shè)計(jì)1個(gè)t觸發(fā)器,通過(guò)實(shí)例化16個(gè)t觸發(fā)器實(shí)現(xiàn)該16位的計(jì)數(shù)器。編譯,觀察該實(shí)現(xiàn)需要多少個(gè)基本邏輯單元(logic elements, les),電路的最高工作頻率fmax是使多少?2. 仿真以校驗(yàn)電路功能是否正確。3. 使用key0作為clock輸入,開(kāi)關(guān)sw1和sw2分別作為enable和reset輸入,7段顯示數(shù)碼管hex3-hex0用來(lái)顯示十進(jìn)制計(jì)數(shù)值。按照de2開(kāi)發(fā)板上的電路做好正確的引腳分配,重新編譯。

36、4. 下載編譯好的電路到fpga器件,扳動(dòng)撥動(dòng)開(kāi)關(guān)改變電路輸入,測(cè)試電路功能。5. 使用quartus ii軟件rtl viewer工具觀察quartus ii軟件是如何綜合電路的?并比較quartus ii軟件綜合的電路與圖1的差別。第2部分簡(jiǎn)化第1部分設(shè)計(jì)的verilog hdl代碼,直接使用q = q + 1計(jì)算電路次態(tài)邏輯。編譯16位計(jì)數(shù)器,觀察所使用的基本邏輯單元(logic element, les)數(shù)目和電路的最高頻率。使用rtl viewer工具觀察電路結(jié)構(gòu),并比較本部分所實(shí)現(xiàn)的電路與第1部分所設(shè)計(jì)的電路的不同。第3部分使用lpm (library of parameteriz

37、ed modules)實(shí)現(xiàn)一個(gè)16位計(jì)數(shù)器,按照與以上部分相同的參數(shù)選擇lpm參數(shù),也就是說(shuō)帶使能端和同步復(fù)位端,比較它與前兩部分所設(shè)計(jì)的電路的不同?第4部分設(shè)計(jì)并實(shí)現(xiàn)一個(gè)電路,功能是在7段顯示數(shù)碼管hex0上依次顯示數(shù)字0到數(shù)字9,要求每個(gè)數(shù)字的顯示時(shí)間大約是1秒鐘。使用計(jì)數(shù)器來(lái)確定1秒的時(shí)間間隔。計(jì)數(shù)器使用de2開(kāi)發(fā)板提供的50mhz時(shí)鐘信號(hào)作為時(shí)鐘輸入。設(shè)計(jì)中不要使用任何其它的時(shí)鐘信號(hào),確保設(shè)計(jì)中所有的觸發(fā)器所使用的時(shí)鐘信號(hào)都是50mhz的時(shí)鐘信號(hào)。第5部分設(shè)計(jì)并實(shí)現(xiàn)一個(gè)電路,功能是在7段顯示數(shù)碼管hex7-hex0上顯示“hello”。使得5個(gè)字母大約每隔1秒從右向左依次移動(dòng)。電路的顯

38、示結(jié)果如表1所示。表1 試驗(yàn)5 時(shí)鐘和定時(shí)器 本試驗(yàn)的目的是實(shí)現(xiàn)并使用實(shí)時(shí)時(shí)鐘。第1部分實(shí)現(xiàn)一個(gè)3位的bcd碼計(jì)數(shù)器,在7段顯示數(shù)碼管hex2-hex0上顯示計(jì)數(shù)器的計(jì)數(shù)值。利用de2開(kāi)發(fā)板上提供的50mhz時(shí)鐘信號(hào)獲得計(jì)數(shù)器的時(shí)鐘輸入信號(hào),使計(jì)數(shù)器每隔1秒中計(jì)數(shù)值加1。計(jì)數(shù)器使用按鈕開(kāi)關(guān)key0作為復(fù)位信號(hào),如果key0被按下計(jì)數(shù)器的計(jì)數(shù)值清0。1、新建quartus ii工程,用來(lái)實(shí)現(xiàn)你所設(shè)計(jì)的電路;2、采用verilog hdl語(yǔ)言設(shè)計(jì)電路;3、將以上編寫(xiě)的verilog hdl文件加入到project中,編譯;4、仿真,以確定功能是否正確;5、引腳分配。將fpga的引腳連接到7段顯示數(shù)

39、碼管和按鍵key0,具體可以參考user manual for the de2 board。6、重新編譯,下載設(shè)計(jì)好的電路到fpga芯片;7、觀察電路工作是否正常;第2部分設(shè)計(jì)一個(gè)時(shí)鐘電路并在de2開(kāi)發(fā)板上實(shí)現(xiàn)。該時(shí)鐘能夠顯示時(shí)、分和秒。時(shí)的顯示范圍為0到23,顯式在7段顯示數(shù)碼管hex7-hex6;分的顯式范圍0到60,顯式在數(shù)碼管hex5-hex4;秒的消失范圍0到60,在數(shù)碼管hex3-hex2。使用開(kāi)關(guān)sw15-0來(lái)預(yù)先設(shè)定時(shí)鐘的小時(shí)和分鐘部分的初值。第3部分在de2開(kāi)發(fā)板上設(shè)計(jì)并實(shí)現(xiàn)一個(gè)反映時(shí)間測(cè)試電路。電路工作方式如下:1、電路通過(guò)按鈕開(kāi)關(guān)key0進(jìn)行復(fù)位;2、經(jīng)過(guò)時(shí)間t后,紅色的

40、發(fā)光二極管ledr0點(diǎn)亮,四位bcd計(jì)數(shù)器開(kāi)始工作,計(jì)數(shù)單位為毫秒。以秒計(jì)的時(shí)間從電路復(fù)位ledr0點(diǎn)亮開(kāi)始,從復(fù)位到ledr0點(diǎn)亮的間隔時(shí)間使用sw7-0設(shè)置,該時(shí)間的單位為秒。3、接受測(cè)試的人員必須盡可能快按下按鍵key3,以熄滅ledr0,數(shù)碼管顯式的數(shù)字同時(shí)保持key3被按下時(shí)的狀態(tài)不變。數(shù)碼管上顯式的時(shí)間即是需要測(cè)試的反映時(shí)間。實(shí)驗(yàn)6 加法器、減法器和乘法器本實(shí)驗(yàn)的目的是練習(xí)算術(shù)運(yùn)算電路加法器、減法器和乘法器的設(shè)計(jì)。以上三個(gè)電路都需要采用2種方式實(shí)現(xiàn)。第一,編寫(xiě)verilog hdl代碼實(shí)現(xiàn)需要的設(shè)計(jì)功能;第二,使用altera公司的lpm庫(kù)中的流水線減法電路;最后,從電路結(jié)構(gòu)和工作

41、速度角度對(duì)兩種實(shí)現(xiàn)方式進(jìn)行比較。第1部分實(shí)驗(yàn)2完成了4位行波計(jì)算器,其結(jié)構(gòu)如圖1(a)所示。本實(shí)驗(yàn)要求設(shè)計(jì)8位加法器,并在圖1(b)的電路中使用該8位加法器。要求:(1)支持有符號(hào)數(shù)的加法(2的補(bǔ)碼);(2)如果加法器給出錯(cuò)誤符號(hào),溢出符號(hào)overflow置位;圖1具體步驟如下:1. 新建quartus ii工程,編寫(xiě)電路圖1(b)實(shí)現(xiàn)的verilog hdl代碼,其中的加法器使用圖1(a)的電路結(jié)構(gòu);2. 在de2開(kāi)發(fā)板上實(shí)現(xiàn)該加法器電路,連接電路的輸入和輸出到開(kāi)發(fā)板的相應(yīng)器件。連接輸入a和b到開(kāi)關(guān)sw15-8和sw7-0。使用key0作為低電平有效的異步復(fù)位輸入,key1作為時(shí)鐘輸入。將加

42、法器的輸出連接到開(kāi)發(fā)板的發(fā)光二極管ledr7-0,使用ledg8顯式電路的溢出情況。輸入信號(hào)a和b的值顯式在數(shù)碼管hex7-6和hex5-4,加法器的和s的值顯式在hex1-0。3. 編譯和仿真 通過(guò)時(shí)序仿真驗(yàn)證電路功能是否正確,如果仿真顯式電路工作正常,將電路下載到開(kāi)發(fā)板驗(yàn)證其是否工作正常;改變a和b的值,觀察電路輸出是否正確。4. 在quartus ii中打開(kāi)quartus ii compilation report,關(guān)注時(shí)序分析器(timing analyzer)給出的時(shí)序分析結(jié)果。找出電路的最高工作頻率fmax以及電路的最常延遲路徑;第2部分改進(jìn)第1部分設(shè)計(jì)的電路,使其不但可以支持8位

43、二進(jìn)制數(shù)的加法電路,同時(shí)還可以支持減法電路。使用sw16指定電路執(zhí)行加法或者是減法操作,電路的其它連接方式與第1部分相同。1. 仿真 通過(guò)仿真驗(yàn)證設(shè)計(jì)功能是否正確,如果仿真通過(guò)下載設(shè)計(jì)到de開(kāi)發(fā)板,通過(guò)設(shè)置不同的輸入情況驗(yàn)證電路是否工作正常;2. 在quartus ii中打開(kāi)quartus ii compilation report,關(guān)注時(shí)序分析器(timing analyzer)給出的時(shí)序分析結(jié)果。找出電路的最高工作頻率fmax以及電路的最常延遲路徑;第3部分使用quartus ii的參數(shù)化模塊庫(kù)(library of parameterized module, lpms)提供的lpm_ad

44、d_sub模塊取代圖1(a)給出的加法器。調(diào)用lpm模塊的具體操作可以參考using library module in verilog design(附錄1)。1. 配置lpm_add_sub模塊,使其只執(zhí)行加法操作,其余參數(shù)參考第1部分的加法器參數(shù)。使用lpm向?qū)Мa(chǎn)生的lpm_add8.v文件。在verilog hdl代碼中實(shí)例該模塊,編譯該工程,并使用quartus ii chip editor工具觀察電路實(shí)現(xiàn)的細(xì)節(jié);圖2給出了一種調(diào)用chip editor工具的方法,在quartus ii project navigator窗口,右鍵點(diǎn)lpm_add8子電路,選擇locate loca

45、te in chip editor,打開(kāi)chip editor窗口,如圖3所示。cyclone ii fpga器件內(nèi)部用于實(shí)現(xiàn)加法器的邏輯單元會(huì)被高亮成藍(lán)色。將鼠標(biāo)指向這些被高亮的邏輯單元并雙擊可以打開(kāi)resource property editor窗口,如圖4所示。在resource property editor窗口通過(guò)節(jié)點(diǎn)名(node name)可以選擇實(shí)現(xiàn)加法電路的9個(gè)邏輯單元中的任何一個(gè)。在resource property editor窗口,設(shè)計(jì)者可以檢查邏輯單元以及邏輯單元之間是如何連接的。圖2 圖3 使用以上介紹的工具,同時(shí)參考cyclone ii fpga的數(shù)據(jù)手冊(cè),分析采用

46、lpm_add_sub模塊實(shí)現(xiàn)的8位加法器電路。圖42. 查看quartus ii compilation report,比較以上幾種實(shí)現(xiàn)方式的最高工作頻率。討論不同實(shí)現(xiàn)方式之間的差別。第4部分使用預(yù)先定義的lpm_add_sub模塊取代圖1中加減嗲了,重復(fù)第2部分實(shí)驗(yàn)過(guò)程。簡(jiǎn)單評(píng)論使用lpm模塊會(huì)的電路結(jié)構(gòu),并比較兩次得到的電路結(jié)構(gòu)的最高工作頻率有何不同。并分析lpm_add_sub模塊是如何實(shí)現(xiàn)overflow信號(hào)的。第5部分圖5(a)給出經(jīng)典乘法的操作計(jì)算過(guò)程,其中,。圖5(b)給出兩個(gè)4位二進(jìn)制數(shù)乘法計(jì)算過(guò)程。因?yàn)閎的每一位要么是1,要么是0,因此需要對(duì)a或者0移位并求和。圖5(c)給

47、出二進(jìn)制數(shù)乘法的計(jì)算過(guò)程,首先將a與b的每一位進(jìn)行與操作并移位,在進(jìn)行求和操作。四位二進(jìn)制乘法的一種實(shí)現(xiàn)如圖6所示。因?yàn)檫@種實(shí)現(xiàn)方式電路結(jié)構(gòu)比較規(guī)則,所以這種結(jié)構(gòu)的乘法器叫做矩陣乘法器(array multiplier)。圖中的陰影部分與圖5(c)中的陰影部分對(duì)應(yīng)。圖5圖6按照如下步驟實(shí)現(xiàn)矩陣乘法器電路:1. 新建project工程;2. 設(shè)計(jì)電路的verilog hdl代碼,將其包含到quartus ii工程中,編譯;3. 功能仿真,驗(yàn)證代碼功能是否正確;4. 使用sw11-8表示輸入a,開(kāi)關(guān)sw3-0表示輸入b,將a和b對(duì)應(yīng)的十進(jìn)制值顯示在7段顯示數(shù)碼管hex6和hex4上,結(jié)果顯示在數(shù)碼

48、管hex1和hex0上;5. 引腳分配;6. 重新編譯,下載設(shè)計(jì)到fpga芯片;7. 搬到開(kāi)關(guān)改變輸入信號(hào)a和b的值,觀察設(shè)計(jì)是否工作正常;第6部分將第5部分設(shè)計(jì)的4位乘法器擴(kuò)展為8位乘法器電路,兩個(gè)8位二進(jìn)制數(shù)相乘,其乘積為16位的二進(jìn)制數(shù)。使用開(kāi)關(guān)sw15-8表示輸入a,開(kāi)關(guān)sw7-0表示輸入b。輸入a和b對(duì)應(yīng)的十進(jìn)制值分別顯示在7段顯示數(shù)碼管hex7-6和hex5-4上。a和b的乘積顯示在數(shù)碼管hex3-0上。在電路中加入寄存器,用于保存輸入信號(hào)a,b以及乘積p,電路結(jié)構(gòu)與第1部分的圖1相似。編譯、仿真,驗(yàn)證電路工作是否正常。使用quartus ii的timing analyzer工具觀

49、察電路的最高工作頻率,以及電路最長(zhǎng)的延遲路徑?第7部分修改上述設(shè)計(jì)的verilog hdl代碼,使用參數(shù)化模塊庫(kù)lpm提供的lpm_mult模塊實(shí)現(xiàn)上述的88的乘法器。完成以上設(shè)計(jì)任務(wù)。比較該設(shè)計(jì)與第5部分設(shè)計(jì):電路的最高工作頻率和電路的最高工作頻率;第8部分在許多的實(shí)際應(yīng)用中,往往需要執(zhí)行多個(gè)乘法操作,并求多個(gè)乘積的和。本部分要求設(shè)計(jì)電路實(shí)現(xiàn)以下計(jì)算輸入和是8位無(wú)符號(hào)數(shù),是16位二進(jìn)制數(shù)。電路必須提供一個(gè)進(jìn)位信號(hào)。電路的所有的輸入和輸出都使用寄存器,與圖1(b)所示的電路結(jié)構(gòu)類(lèi)似。1. 新建quartus ii工程用于在de2開(kāi)發(fā)板上實(shí)現(xiàn)該電路;使用lpm_mult和lpm_add_sub模

50、塊實(shí)現(xiàn)設(shè)計(jì)中的乘法和加法操作;2. 連接輸入a和c到開(kāi)關(guān)sw15-8,連接輸入b和d到開(kāi)關(guān)sw7-0。使用開(kāi)關(guān)sw16作為選擇信號(hào),從輸入信號(hào)和選擇合適的輸入。使用sw17作為寫(xiě)使能信號(hào)(we)。如果we=1時(shí),每個(gè)時(shí)鐘信號(hào)的上升沿,輸入數(shù)據(jù)被裝載到輸入寄存器。如果we=0,輸入寄存器不工作。3. 使用key0作為低電平有效的異步復(fù)位信號(hào),使用key1作為時(shí)鐘信號(hào)。4. 使用數(shù)碼管hex7-6顯示a或者c對(duì)應(yīng)的十進(jìn)制數(shù),使用hex5-4顯示b或者d,使用sw16作為選擇信號(hào)。使用數(shù)碼管hex3-0顯示和s,使用ledg8顯示進(jìn)位輸出。5. 編譯,進(jìn)行功能仿真或者時(shí)序仿真驗(yàn)證電路是否工作正常。下

51、載電路到de2開(kāi)發(fā)板,驗(yàn)證電路是否工作正常。6. 數(shù)字電路設(shè)計(jì)通常需要滿足某些速度要求,比如電路必須使用某些特定頻率的信號(hào)作為時(shí)鐘信號(hào)。這些要求一般以時(shí)序約束(timing constraints)的形式提供給cad系統(tǒng)。(quartus ii 軟件使用時(shí)序約束的方法,參考timing considerations with verilog-based designs)本設(shè)計(jì)使用按鍵模擬時(shí)鐘信號(hào),因此電路的時(shí)序約束容易滿足(時(shí)鐘頻率非常低)。但是為了演示電路設(shè)計(jì)中涉及的問(wèn)題,這里假設(shè)電路要求的工作頻率為220mhz。在quartus ii軟件中輸入電路的工作頻率為220mhz,重新編譯。tim

52、ing analyzer報(bào)告無(wú)法滿足該時(shí)序要求。檢查quartus ii給出的時(shí)序分析報(bào)告,簡(jiǎn)要描述電路中違反時(shí)序要求的路徑。7. 對(duì)于給定的電路,在電路中插入寄存器,縮短電路中最長(zhǎng)的組合邏輯通??梢蕴峁┫到y(tǒng)最高工作頻率。這種設(shè)計(jì)技術(shù)通常稱(chēng)為流水線設(shè)計(jì),插入到電路中的寄存器通常稱(chēng)為流水線寄存器。在乘法器和加法器之間插入流水線寄存器。重新編譯,討論電路結(jié)構(gòu)。第9部分quartus ii軟件提供預(yù)先設(shè)計(jì)的模塊altmult_add可以執(zhí)行類(lèi)似形式的計(jì)算。使用模塊altmult_add重新實(shí)現(xiàn)上述設(shè)計(jì)。仿真該設(shè)計(jì),下載電路到fpga驗(yàn)證電路是否正確。簡(jiǎn)要討論采用altmult_add模塊實(shí)現(xiàn)的電路與

53、前面介紹電路模塊之間的差別,比較各種實(shí)現(xiàn)方法實(shí)現(xiàn)的電路之間的性能差別。實(shí)驗(yàn)7 有限狀態(tài)機(jī)本實(shí)驗(yàn)練習(xí)有限狀態(tài)機(jī)的設(shè)計(jì);第1部分采用有限狀態(tài)機(jī)的方式設(shè)計(jì)序列檢測(cè)器。所謂序列檢測(cè)就是檢測(cè)連續(xù)輸入的位流中是否存在特定的編碼。本部分要求設(shè)計(jì)有限狀態(tài)機(jī)檢測(cè)序列中是否包含連續(xù)的4個(gè)1或者連續(xù)的4個(gè)0。電路輸入為w,輸出為z,如果w在連續(xù)四個(gè)時(shí)鐘周期為0或者1,輸出z將被置位1個(gè)時(shí)鐘周期。輸入w和輸出z之間的時(shí)序關(guān)系如圖1所示。圖1 該序列檢測(cè)器電路的狀態(tài)轉(zhuǎn)換圖如圖2所示。本部分要求手動(dòng)設(shè)計(jì)序列檢測(cè)器fsm實(shí)現(xiàn)該狀態(tài)轉(zhuǎn)換圖,包括每個(gè)寄存器的次態(tài)邏輯。表1采用獨(dú)熱碼對(duì)狀態(tài)轉(zhuǎn)換圖中的各個(gè)狀態(tài)進(jìn)行賦值,需要8個(gè)狀態(tài)

54、寄存器(觸發(fā)器)。表1 序列檢測(cè)器的狀態(tài)轉(zhuǎn)換表圖2 按照如下步驟設(shè)計(jì)該電路,并在de2開(kāi)發(fā)板上實(shí)現(xiàn)該電路:1. 新建quartus ii工程,選擇cyclone ii ep2c35f672c6作為目標(biāo)器件;2. 編寫(xiě)序列檢測(cè)器的verilog hdl代碼。verilog hdl代碼要實(shí)例化9個(gè)觸發(fā)器,并指明每個(gè)觸發(fā)器的數(shù)據(jù)輸入端的組合邏輯的邏輯表達(dá)式。要求代碼中只能使用連續(xù)賦值語(yǔ)句assign說(shuō)明觸發(fā)器數(shù)據(jù)輸入端口的組合邏輯的邏輯表達(dá)式。注意:因?yàn)樵O(shè)計(jì)中使用獨(dú)熱碼,所以通過(guò)觀察很容易確定這些邏輯表達(dá)式。使用de2開(kāi)發(fā)板上的開(kāi)關(guān)sw0作為fsm的低電平有效的異步復(fù)位信號(hào),使用開(kāi)關(guān)sw1作為輸入w

55、,使用按鈕key0表示時(shí)鐘輸入。使用ledg0表示輸出z。時(shí)鐘紅色的leds顯示狀態(tài)寄存器的取值。3. 加設(shè)計(jì)文件加入到quartus ii工程,在quartus ii中進(jìn)行引腳分配,編譯整個(gè)工程;4. 仿真;5. 如果仿真驗(yàn)證電路工作正常,下載電路到fpga芯片。驗(yàn)證電路是否工作正常。輸入不同的序列,觀察輸出led是否工作正常。重點(diǎn)觀察fsm的狀態(tài)轉(zhuǎn)換過(guò)程是否正常以及輸出ledg0是否顯示正確。6. 最后,考慮修改表1給出的獨(dú)熱碼狀態(tài)賦值。如果fsm處于復(fù)位狀態(tài)時(shí),狀態(tài)寄存器的輸出如果全部為0,在使用fpga實(shí)現(xiàn)fsm時(shí),fsm往往得到簡(jiǎn)化。fpga內(nèi)部的觸發(fā)器通常包含一個(gè)清零端(clear

56、),該輸入端通常用于實(shí)現(xiàn)電路的復(fù)位狀態(tài),但是觸發(fā)器通常不會(huì)包含置位端set。表2給出一個(gè)改進(jìn)的獨(dú)熱碼狀態(tài)賦值(有時(shí)稱(chēng)為幾乎獨(dú)熱碼),其復(fù)位狀態(tài)a全部使用0。這種編碼方式可以通過(guò)對(duì)狀態(tài)變量取反實(shí)現(xiàn)。使用表2所示的狀態(tài)賦值重新設(shè)計(jì)verilog hdl代碼。(提示:只需對(duì)原設(shè)計(jì)做很少的修改即可)。編譯新設(shè)計(jì),仿真,并下載設(shè)計(jì)的de2開(kāi)發(fā)板,觀察設(shè)計(jì)是否正確。表2 第2部分本部分依然要設(shè)計(jì)圖2給出的fsm,但需要設(shè)計(jì)另一種風(fēng)格的verilog hdl代碼,不在需要人為為每個(gè)觸發(fā)器的輸入端設(shè)計(jì)組合邏輯電路。相反,在可以在verilog hdl代碼中使用一個(gè)always塊(在其中使用case語(yǔ)句)描述fsm的狀態(tài)轉(zhuǎn)換過(guò)程,再通過(guò)另一個(gè)always塊描述fsm的狀態(tài)寄存器;可以再使用第三個(gè)always塊或者簡(jiǎn)單的連續(xù)賦值語(yǔ)句實(shí)現(xiàn)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論