版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、硬件描述語言與FPGA技術(shù)實(shí)驗(yàn)指導(dǎo)書西北工業(yè)大學(xué)2012/10/10目錄實(shí)驗(yàn)一 簡單的組合邏輯設(shè)計(jì)3實(shí)驗(yàn)二 簡單分頻時(shí)序邏輯電路的設(shè)計(jì)5實(shí)驗(yàn)三 利用條件語句實(shí)現(xiàn)計(jì)數(shù)分頻時(shí)序電路8實(shí)驗(yàn)四 阻塞賦值與非阻塞賦值的區(qū)別11實(shí)驗(yàn)五 用always塊實(shí)現(xiàn)較復(fù)雜的組合邏輯電路15實(shí)驗(yàn)六 在Verilog中使用函數(shù)19實(shí)驗(yàn)七 在Verilog HDL中使用任務(wù)(task)22實(shí)驗(yàn)八 利用有限狀態(tài)機(jī)進(jìn)行時(shí)序邏輯的設(shè)計(jì)26實(shí)驗(yàn)九 利用狀態(tài)機(jī)實(shí)現(xiàn)比較復(fù)雜的接口設(shè)計(jì)32練習(xí)十 利用SRAM設(shè)計(jì)一個(gè)FIFO39實(shí)驗(yàn)一 簡單的組合邏輯設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?1. 學(xué)習(xí)Quartus和ModSim兩種EDA工具的使用方法;2掌
2、握基本組合邏輯電路的實(shí)現(xiàn)方法;3初步了解兩種基本組合邏輯電路的生成方法;4學(xué)習(xí)測試模塊的編寫;5通過綜合和布局布線了解不同層次仿真的物理意義。二、實(shí)驗(yàn)內(nèi)容 本次實(shí)驗(yàn)采用Verilog HDL語言設(shè)計(jì)一個(gè)可綜合的數(shù)據(jù)比較器,其功能是比較數(shù)據(jù)a與數(shù)據(jù)b的結(jié)果,如果兩個(gè)數(shù)據(jù)相同,則輸出結(jié)果1,否則給出結(jié)果0;并寫出測試模型,使其進(jìn)行比較全面的測試。三、實(shí)驗(yàn)儀器、設(shè)備 預(yù)裝了開發(fā)工具M(jìn)odelSimSE、synplify的PC機(jī)。四、實(shí)驗(yàn)原理 1. 組合邏輯電路是指在任何時(shí)刻,輸出狀態(tài)只決定于同一時(shí)刻各輸入狀態(tài)的組合而與電路以前狀態(tài)無關(guān),而與其他時(shí)間的狀態(tài)無關(guān)。其邏輯函數(shù)如下:Li=f(A1,A2,A
3、3An) (i=1,2,3m)其中,A1An為輸入變量,Li為輸出變量。2. 組合邏輯電路的特點(diǎn)歸納如下: 輸入、輸出之間沒有返饋延遲通道; 電路中無記憶單元。3. 組合邏輯設(shè)計(jì)示例:可綜合的數(shù)據(jù)比較器。它的功能是比較數(shù)據(jù)a與數(shù)據(jù)b,如果兩個(gè)數(shù)據(jù)相同,則給出結(jié)果1,否則給出結(jié)果0。描述組合邏輯時(shí)常使用assign結(jié)構(gòu)。注意equal=(a=b)?1:0,這是一種在組合邏輯實(shí)現(xiàn)分支判斷時(shí)常使用的格式。模塊源代碼:/- compare.v -module compare(equal,a,b);input a,b;output equal; assign equal=(a=b)?1:0; /a等于b
4、時(shí),equal輸出為1;a不等于b時(shí), /equal輸出為0。endmodule 測試模塊源代碼: timescale 1ns/1ns include ./compare.v module comparetest; reg a,b; wire equal; initial begin a=0; b=0; #100 a=0; b=1; #100 a=1; b=1; #100 a=1; b=0; #100 $stop; end compare compare1(.equal(equal),.a(a),.b(b); endmodule仿真波形如下:五、實(shí)驗(yàn)步驟 1 建立工程文件,編寫模塊源碼和測試模
5、塊,要求測試模塊對源文件進(jìn)行比較全面的測試;2 編譯源碼和測試模塊,用測試模塊對源文件進(jìn)行測試,并進(jìn)行仿真;3 觀察綜合后生成的文件和源文件的不同點(diǎn)和相同點(diǎn)。4. 綜合時(shí)采用不同的FPGA器件,觀察綜合后的結(jié)果有什么不同。六、實(shí)驗(yàn)報(bào)告要求 1 要求實(shí)驗(yàn)報(bào)告中有編寫模塊源碼和測試模塊;2 要求實(shí)驗(yàn)報(bào)告中有綜合后RTL圖形;3 要求實(shí)驗(yàn)報(bào)告中有仿真后的波形;4. 對課后思考題進(jìn)行分析說明。七、實(shí)驗(yàn)注意事項(xiàng) 1 采用Altera公司的Cyclone II系列的EP2C35型FPGA作為建立工程、代碼編譯、綜合庫時(shí)使用的庫器件;2 綜合使用synplify工具,布局布線使用quartus II自帶工具
6、;3 仿真使用ModelSim工具。八、思考題 1課本練習(xí)一的測試方法二中,第二個(gè)initial塊有什么用?它與第一個(gè)initial塊有什么關(guān)系?2如果在第二個(gè)initial塊中,沒有寫出#10000或者$stop,仿真會(huì)如何進(jìn)行?3比較兩種測試方法,哪一種更全面?實(shí)驗(yàn)二 簡單分頻時(shí)序邏輯電路的設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?1 掌握條件語句在簡單時(shí)序模塊設(shè)計(jì)中的使用;2. 掌握verilog語句在簡單時(shí)序模塊設(shè)計(jì)中的使用;3 學(xué)習(xí)在Verilog模塊中應(yīng)用計(jì)數(shù)器;4 學(xué)習(xí)測試模塊的編寫、綜合和不同層次的仿真。二、實(shí)驗(yàn)內(nèi)容 1使用always塊和(posedge clk)或(negedge clk)的結(jié)構(gòu)來
7、表述時(shí)序邏輯,設(shè)計(jì)1/2分頻的可綜合模型。得到如下波形圖:2對模塊進(jìn)行RTL級仿真、綜合后門級仿真,布局布線仿真; 三、實(shí)驗(yàn)儀器、設(shè)備 預(yù)裝了開發(fā)工具synplify、ModelSimSE的PC機(jī)。四、實(shí)驗(yàn)原理 1使用always過程賦值語句對上升沿進(jìn)行響應(yīng),當(dāng)時(shí)鐘信號上升沿到來時(shí),系統(tǒng)判斷清零信號是否為0,如果為0,則clk_out信號清零,否則clk_out信號翻轉(zhuǎn)clk_out=clk_out。2系統(tǒng)1/2分頻原理:一個(gè)時(shí)鐘周期的上升沿時(shí)刻,若清零信號reset不為0,輸出信號跳變一個(gè)周期,輸入時(shí)鐘信號需經(jīng)過兩個(gè)周期的上升沿,輸出周期為輸入周期的兩倍,輸出頻率為輸入頻率的1/2,這樣就完
8、成了1/2分頻的效果。下面是一個(gè)可綜合的1/2分頻器模型。/half_clk.v-module half_clk(reset,clk_in,clk_out);input clk_in,reset;output clk_out;reg clk_out;always (posedge clk_in)beginif(!reset) clk_out=0;elseclk_out=clk_out;endendmodule3測試模塊中,輸入周期為200ns的時(shí)鐘信號,初始化語句initial將時(shí)鐘信號置0,清零信號先置1,經(jīng)過10ns置0,開始清零,再經(jīng)過110ns后置1,開始測試。設(shè)定測試循環(huán)時(shí)間為100
9、ms,經(jīng)過100ms以后測試停止。測試模塊的源代碼:/top.v-timescale 1ns/100psdefine clk_cycle 50module top;reg clk,reset;wire clk_out;always #clk_cycle clk=clk; initial begin clk=0;reset=1;#10 reset=0;#110 reset=1;# $stop;endhalf_clk m0(.reset(reset),.clk_in(clk),.clk_out(clk_out);endmodule五、實(shí)驗(yàn)步驟 1建立工程文件,編寫模塊源碼和測試模塊,要求測試模塊能
10、對源文件進(jìn)行比較全面的測試。2編譯源碼和測試模塊,用測試模塊對源文件進(jìn)行測試,并綜合仿真。得到波形圖。3觀察綜合后生成的文件和源文件的不同點(diǎn)和相同點(diǎn)。4記錄數(shù)據(jù)并完成實(shí)驗(yàn)報(bào)告。六、實(shí)驗(yàn)報(bào)告要求 1要求實(shí)驗(yàn)報(bào)告中有編寫模塊源碼和測試模塊。2要求實(shí)驗(yàn)報(bào)告中有仿真后的波形。3實(shí)驗(yàn)報(bào)告中對思考題進(jìn)行分析說明。七、實(shí)驗(yàn)注意事項(xiàng) 1注意在always塊中,被賦值的信號都必須定義為reg型,這是由時(shí)序邏輯電路的特點(diǎn)所決定的。2對與reg型數(shù)據(jù),如果未對它進(jìn)行賦值,仿真工具會(huì)默認(rèn)它為不定態(tài)。八、思考題 1如果沒有reset信號,能否控制2分頻clk_out信號的相位?2只用clk時(shí)鐘沿的觸發(fā)(即不用2分頻產(chǎn)生
11、的時(shí)鐘沿)如何直接產(chǎn)生4分頻、8分頻、或者16分頻的時(shí)鐘?3如何只用clk時(shí)鐘沿的觸發(fā)直接產(chǎn)生占空比不同的分頻時(shí)鐘?實(shí)驗(yàn)三 利用條件語句實(shí)現(xiàn)計(jì)數(shù)分頻時(shí)序電路一實(shí)驗(yàn)?zāi)康模?掌握條件語句在簡單時(shí)序模塊設(shè)計(jì)中的使用;2掌握最基本時(shí)序電路的實(shí)現(xiàn)方法;3學(xué)習(xí)在Verilog模塊中應(yīng)用計(jì)數(shù)器;4. 學(xué)習(xí)測試模塊的編寫、綜合和不同層次的仿真。 二實(shí)驗(yàn)內(nèi)容:1復(fù)習(xí)課本,熟悉條件語句的使用方式;2建立工程并編寫源代碼;3. 綜合并布局布線仿真并分析always語句在時(shí)序邏輯中的作用;4. 學(xué)習(xí)測試模塊的編寫、綜合和仿真。圖3.1 技術(shù)分頻器波形三實(shí)驗(yàn)設(shè)備:預(yù)裝了Active-HDL6.2及Synplify7.0
12、的PC機(jī)。四、實(shí)驗(yàn)原理 1. 復(fù)位信號reset為低電平時(shí),對電路中的寄存器進(jìn)行復(fù)位,F(xiàn)輸出低電平信號。利用分頻器的設(shè)計(jì)原理,在程序中設(shè)計(jì)一個(gè)計(jì)數(shù)器,在時(shí)鐘的上升沿計(jì)數(shù),當(dāng)計(jì)數(shù)值為19時(shí)(此時(shí)時(shí)鐘已經(jīng)產(chǎn)生了20個(gè)上升沿),輸出信號F翻轉(zhuǎn)為高電平,高電平的持續(xù)時(shí)間為10us。之后,復(fù)位信號再次將F復(fù)位為低電平,低電平的持續(xù)時(shí)間為10us。2. 條件語句示例:可綜合風(fēng)格的分頻器。它的功能是將10M的時(shí)鐘分頻為500K的時(shí)鐘?;驹砼c1/2分頻器是一樣的,但是需要定義一個(gè)計(jì)數(shù)器,以便準(zhǔn)確獲得1/20分頻。模塊源代碼:/ - fdivision.v -module fdivision(RESET,F
13、10M,F500K);input F10M,RESET;output F500K;reg F500K;reg 7:0j; always (posedge F10M) if(!RESET) /低電平復(fù)位。 begin F500K = 0; j = 0; end else begin if(j=19) /對計(jì)數(shù)器進(jìn)行判斷,以確定F500K信號是否反轉(zhuǎn)。 begin j = 0; F500K = F500K; end else j = j+1; endendmodule測試模塊源代碼:-fdivision_top.v-timescale 1ns/100psdefine clk_cycle 50mod
14、ule division_top;reg F10M,RESET;wire F500K_clk;always #clk_cycle F10M=F10M;initialbegin RESET=1;F10M=0;#100 RESET=0;#100 RESET=1;#10000 $stop;endfdivision fdivision(.RESET(RESET),.F10M(F10M),.F500K(F500K_clk);endmodule五、實(shí)驗(yàn)步驟 1 建立工程文件,編寫模塊源碼和測試模塊,要求測試模塊能對源文件進(jìn)行比較全面的測試;2 編譯源碼和測試模塊,用測試模塊對源文件進(jìn)行測試,并綜合仿真;3
15、 觀察綜合后生成的文件和源文件的不同點(diǎn)和相同點(diǎn);4. 綜合時(shí)采用不同的FPGA器件,如Altera公司的Cyclone II系列和Stratix III系列,觀察綜合后的結(jié)果有什么不同。六、實(shí)驗(yàn)報(bào)告要求 1 要求實(shí)驗(yàn)報(bào)告中有編寫模塊源碼和測試模塊2 要求實(shí)驗(yàn)報(bào)告中有綜合后RTL圖形;3 要求實(shí)驗(yàn)報(bào)告中有仿真后的波形。七、實(shí)驗(yàn)注意事項(xiàng) 1 綜合使用synplify工具,布局布線使用quartus II自帶工具;2 仿真使用ModelSim工具。八、思考題 1考慮如何實(shí)現(xiàn)任意數(shù)值分頻。2. 如果綜合時(shí)采用不同的FPGA器件,如Altera公司的Cyclone II系列和Stratix III系列,
16、想想綜合后的結(jié)果有什么不同?3. 課后自己試著利用10MB的時(shí)鐘,設(shè)計(jì)一個(gè)單周期形狀的周期波形。實(shí)驗(yàn)四 阻塞賦值與非阻塞賦值的區(qū)別一實(shí)驗(yàn)?zāi)康模? 通過實(shí)驗(yàn),掌握阻塞賦值與非阻塞賦值的概念與區(qū)別;2 深入理解順序執(zhí)行和并發(fā)執(zhí)行的概念。3 了解非阻塞和阻塞賦值的不同使用場合;4 學(xué)習(xí)測試模塊的編寫,綜合和不同層次的仿真。二實(shí)驗(yàn)內(nèi)容:1 本次實(shí)驗(yàn)參照課本上的練習(xí)三,采用Verilog HDL語言描述兩個(gè)模塊,分別包含有阻塞和非阻塞賦值語句;2 編寫測試模塊,在相同輸入信號的條件下,比較阻塞與非阻塞語句的輸出結(jié)果;3 對模塊進(jìn)行RTL級仿真、綜合后門級仿真,布局布線仿真;4 分析阻塞賦值與非阻塞賦值的
17、區(qū)別。三、實(shí)驗(yàn)儀器、設(shè)備 預(yù)裝了開發(fā)工具synplify、ModelSimSE的PC機(jī)。四、實(shí)驗(yàn)原理 源文件中分別通過always過程賦值語句在clk時(shí)鐘上升沿到來時(shí),對b,c進(jìn)行賦值,并加以顯示,區(qū)別在于blocking模塊采用阻塞賦值,non_blocking模塊采用非阻塞賦值,通過仿真波形圖和綜合后的電路結(jié)構(gòu)圖進(jìn)一步了解這兩種賦值語句的不同點(diǎn)。模塊源代碼:/ - blocking.v -module blocking(clk,a,b,c); output 3:0 b,c; input 3:0 a; input clk; reg 3:0 b,c; always (posedge clk)
18、begin b = a; c = b; $display(Blocking: a = %d, b = %d, c = %d.,a,b,c); end endmodule/- non_blocking.v -module non_blocking(clk,a,b,c); output 3:0 b,c; input 3:0 a; input clk; reg 3:0 b,c; always (posedge clk) begin b = a; c = b; $display(Non_Blocking: a = %d, b = %d, c = %d.,a,b,c); end endmodule測試模
19、塊源代碼:/- compareTop.v-/timescale 1ns/100psinclude./blocking.vinclude./non_blocking.vmodule compareTop; wire 3:0 b1,c1,b2,c2; reg 3:0 a; reg clk; initial begin clk=0; forever #50 clk=clk; end initial begin a=4h3; $display(_); # 100 a=4h7; $display(_); # 100 a=4hf; $display(_); # 100 a=4ha; $display(_)
20、; # 100 a=4h2; $display(_); # 100 $display(_); $stop; end non_blocking non_blocking(clk,a,b2,c2); blocking blocking(clk,a,b1,c1); endmodule仿真結(jié)果:由圖知阻塞賦值是馬上執(zhí)行的。非阻塞賦值不是馬上執(zhí)行的,塊結(jié)束后才完成賦值操作。仿真波形如下:五、實(shí)驗(yàn)步驟 1 仔細(xì)閱讀課本,建立工程文件,編寫模塊源碼和測試模塊,要求測試模塊能對源文件進(jìn)行比較全面的測試;2 編譯源碼和測試模塊,用測試模塊對源文件進(jìn)行測試,并綜合仿真;3 觀察綜合后生成的兩個(gè)電路結(jié)構(gòu)圖并觀察仿真
21、波形圖,分析阻塞與非阻塞賦值的異同4. 綜合時(shí)采用不同的FPGA器件,如Altera公司的Cyclone II系列和Stratix III系列,觀察綜合后的結(jié)果有什么不同。六、實(shí)驗(yàn)報(bào)告要求 1 要求實(shí)驗(yàn)報(bào)告中有測試模塊空白處填寫的編碼指令,并予以合理說明;2 要求實(shí)驗(yàn)報(bào)告中有綜合后RTL圖形,并說明兩個(gè)圖的異同點(diǎn);3 要求實(shí)驗(yàn)報(bào)告中有仿真后的波形,并分析差異產(chǎn)生的原因;4 要求實(shí)驗(yàn)報(bào)告中有阻塞與非阻塞賦值模塊仿真的波形圖,并說明產(chǎn)生差異的原因;5 要求實(shí)驗(yàn)報(bào)告中有對思考題進(jìn)行的分析說明;七、實(shí)驗(yàn)注意事項(xiàng) 1 阻塞賦值可以理解為賦值語句是順序執(zhí)行的,而非阻塞賦值語句可以理解為 2 在源文件模塊中
22、的$display顯示指令是在上升沿執(zhí)行的,而并非實(shí)時(shí)顯示,因此,對于信號a的變化,需要單獨(dú)顯示3 測試模塊forever語句產(chǎn)生時(shí)鐘,由于在begin順序語句塊中,不能繼續(xù)進(jìn)行后面的指令,因此,最好forever語句后不要放其他執(zhí)行語句 八、思考題 1解釋說明測試模塊中forever語句后若有其他語句,是否能夠執(zhí)行?為什么?2. 在blocking模塊中按如下兩種方法,仿真與綜合的結(jié)果會(huì)有什么樣的變化?作出仿真波形,分析綜合結(jié)果。(1)always(posedge clk) begin c=b; b=a; end(2)always(posedge clk)b=a; always(posedg
23、e clk)c=b;實(shí)驗(yàn)五 用always塊實(shí)現(xiàn)較復(fù)雜的組合邏輯電路一實(shí)驗(yàn)?zāi)康模?掌握用always實(shí)現(xiàn)較大組合邏輯電路的方法;2進(jìn)一步了解assign與always兩種組合電路實(shí)現(xiàn)方法的區(qū)別和注意點(diǎn);3學(xué)習(xí)測試模塊中隨機(jī)數(shù)的產(chǎn)生和應(yīng)用;4學(xué)習(xí)綜合不同層次的仿真,并比較結(jié)果。二實(shí)驗(yàn)內(nèi)容:1運(yùn)用always語句塊設(shè)計(jì)一個(gè)8位數(shù)據(jù)選擇器。要求:每路輸入數(shù)據(jù)與輸出數(shù)據(jù)均為4位2進(jìn)制數(shù),當(dāng)選擇開關(guān)(至少3位)或輸入數(shù)據(jù)發(fā)生變化時(shí),輸出數(shù)據(jù)也相應(yīng)地變化;2寫出測試模塊,對模塊的功能進(jìn)行測試;3對模塊進(jìn)行RTL級仿真、綜合后門級仿真,布局布線仿真。 三、實(shí)驗(yàn)儀器、設(shè)備 預(yù)裝了開發(fā)工具synplify、Mo
24、delSimSE的PC機(jī)。四、實(shí)驗(yàn)原理 數(shù)據(jù)選擇是指經(jīng)過選擇,把多個(gè)通道的數(shù)據(jù)傳送到唯一的公共數(shù)據(jù)通道上去。實(shí)現(xiàn)數(shù)據(jù)選擇功能的邏輯電路稱為數(shù)據(jù)選擇器,它的作用相當(dāng)于多個(gè)輸入的單刀多擲開關(guān)。下面是一個(gè)簡單的指令譯碼電路的設(shè)計(jì)示例。該電路通過對指令的判斷,對輸入數(shù)據(jù)執(zhí)行相應(yīng)的操作,包括加、減、與、或和求反,并且無論是指令作用的數(shù)據(jù)還是指令本身發(fā)生變化,結(jié)果都要作出及時(shí)的反應(yīng)。/-alu.v -define plus 3d0define minus3d1define band 3d2define bor 3d3define unegate 3d4modulealu(out,opcode,a,b);
25、output7:0 out; reg7:0 out; input2:0 opcode; input7:0 a,b; /操作數(shù)。always(opcode or a or b) /電平敏感的always塊begin case(opcode) plus:out = a+b; /加操作 minus: out = a-b; /減操作 band:out = a&b; /求 與 bor: out = a|b; /求 或 unegate:out=a; /求 反 default:out=8hx; /未收到指令時(shí),輸出任意態(tài) endcaseendendmodule 同一組合邏輯電路分別用always塊和連續(xù)賦值
26、語句assign描述時(shí),代碼的形式大相徑庭,僅使用assign結(jié)構(gòu)來實(shí)現(xiàn)組合邏輯電路,在設(shè)計(jì)中會(huì)發(fā)現(xiàn)很多地方會(huì)顯得冗長且效率低下。而適當(dāng)?shù)夭捎胊lways來設(shè)計(jì)組合邏輯,往往會(huì)更具實(shí)效。在always中適當(dāng)運(yùn)用default(在case 結(jié)構(gòu)中)和else(在ifelse結(jié)構(gòu)中),通??梢跃C合為純組合邏輯,盡管被賦值的變量一定要定義為reg型。指令譯碼器的測試模塊源代碼: /- alu_Top.v -timescale 1ns/1nsinclude./alu.vmodule alutest;wire7:0 out;reg7:0a,b;reg2:0opcode;parametertimes=5;
27、initialbegin a=$random%256;/Give a radom number blongs to 0,255b=$random%256;/Give a radom number blongs to 0,255opcode=3h0;repeat(times)begin #100 a=$random%256;/Give a radom number.b=$random%256;/Give a radom number.opcode=opcode+1;end #100$stop; end alu alu1(out,opcode,a,b); endmodule仿真波形如下:五、實(shí)驗(yàn)步
28、驟 1 仔細(xì)閱讀課本,建立工程文件,編寫模塊源碼和測試模塊,要求測試模塊能對源文件進(jìn)行比較全面的測試;2 編譯源碼和測試模塊,用測試模塊對源文件進(jìn)行測試,并綜合仿真;3 觀察綜合后生成的兩個(gè)電路結(jié)構(gòu)圖并觀察仿真波形圖,分析assign與always兩種組合電路實(shí)現(xiàn)方法的區(qū)別和注意點(diǎn);4. 綜合時(shí)采用不同的FPGA器件,如Altera公司的Cyclone II系列和Stratix III系列,觀察綜合后的結(jié)果有什么不同。六、實(shí)驗(yàn)報(bào)告要求 1 要求實(shí)驗(yàn)報(bào)告中有源代碼及測試程序;2 要求實(shí)驗(yàn)報(bào)告中有仿真后的波形,并分析差異產(chǎn)生的原因。七、實(shí)驗(yàn)注意事項(xiàng) 1 使用條件語句時(shí),如果不使用default(在
29、case 結(jié)構(gòu)中)或 else(在ifelse結(jié)構(gòu)中)對缺省項(xiàng)進(jìn)行說明,否則易生成意想不到的鎖存器。2 用always塊寫組合邏輯時(shí),應(yīng)采用阻塞賦值;3 不要在多個(gè)always塊中為同一變量賦值;4 用$strobe系統(tǒng)任務(wù)來顯示非阻塞賦值的變量值。八、思考題 1. 分析用assign語句和always語句進(jìn)行組合邏輯設(shè)計(jì)時(shí)有什么異同點(diǎn)?2. 使用always塊設(shè)計(jì)一個(gè)八功能的算術(shù)運(yùn)算單元,其輸入信號a和b均為4位,還有功能選擇select為3位,輸出信號為out(5位)。算術(shù)運(yùn)算單元所執(zhí)行的操作與select信號有關(guān),具體關(guān)系如下表所列(忽略輸出結(jié)果中的上溢和下溢位):Select信號函數(shù)的
30、輸出3b000a3b001a+b3b010a-b3b011a/b3b100a%b(余數(shù))3b101a13b111(ab)(大小副值比較)實(shí)驗(yàn)六 在Verilog中使用函數(shù)一實(shí)驗(yàn)?zāi)康模?了解函數(shù)的定義和在模塊設(shè)計(jì)中的使用;2了解函數(shù)的可綜合性問題;3. 了解許多綜合器不能綜合復(fù)雜的算術(shù)運(yùn)算;二實(shí)驗(yàn)內(nèi)容:1 本次實(shí)驗(yàn)是Verilog HDL語言函數(shù)調(diào)用的一個(gè)簡單示范;2 本實(shí)驗(yàn)采用同步時(shí)鐘觸發(fā)運(yùn)算的執(zhí)行,每個(gè)clk時(shí)鐘周期都會(huì)執(zhí)行一次運(yùn)算;3 在測試模塊中,通過調(diào)用系統(tǒng)任務(wù)$display及在時(shí)鐘的下降沿顯示計(jì)算的結(jié)果。三、實(shí)驗(yàn)儀器、設(shè)備 預(yù)裝了開發(fā)工具synplify、ModelSimSE的PC
31、機(jī)。四、實(shí)驗(yàn)原理 與一般的程序設(shè)計(jì)語言一樣,Veirlog HDL也可使用函數(shù)以適應(yīng)對不同變量采取同一運(yùn)算的操作。Veirlog HDL函數(shù)在綜合時(shí)被理解成具有獨(dú)立運(yùn)算功能的電路,每調(diào)用一次函數(shù)相當(dāng)于改變這部分電路的輸入以得到相應(yīng)的計(jì)算結(jié)果。下例是函數(shù)調(diào)用的一個(gè)簡單示范,采用同步時(shí)鐘觸發(fā)運(yùn)算的執(zhí)行,每個(gè)clk時(shí)鐘周期都會(huì)執(zhí)行一次運(yùn)算。并且在測試模塊中,通過調(diào)用系統(tǒng)任務(wù)$display在時(shí)鐘的下降沿顯示每次計(jì)算的結(jié)果。模塊源代碼:module tryfunct(clk,result,reset); output31:0 result; input reset,clk; reg31:0 resul
32、t; always (posedge clk) /clk的上沿觸發(fā)同步運(yùn)算。begin if(!reset) /reset為低時(shí)復(fù)位。 result=0; else begin result = factorial(3); end end function 31:0 factorial; /函數(shù)定義。 input 3:0 operand; reg 3:0 index; begin factorial = operand ? 1 : 0; for(index = 2; index y) begin tmp=x; /x與y變量的內(nèi)容互換,要求順序執(zhí)行,所以采 用阻塞賦值方式。 x=y; y=tmp
33、; end endtaskendmodule測試模塊源代碼: timescale 1ns/100ps include sort4.v module task_Top; reg3:0 a,b,c,d; wire3:0 ra,rb,rc,rd; initial begin a=0;b=0;c=0;d=0; repeat(5) begin #100 a =$random%15; b =$random%15; c =$random%15; d =$random%15; End #100 $stop; endsort4 sort4(.a(a),.b(b),.c(c),.d(d),.ra(ra),.rb(
34、rb),.rc(rc),.rd(rd);endmodule仿真波形如下:五、實(shí)驗(yàn)步驟 1 建立工程文件,編寫模塊源碼和測試模塊,要求測試模塊能對源文件進(jìn)行比較全面的測試;2 編譯源碼和測試模塊,用測試模塊對源文件進(jìn)行測試,并綜合仿真;3 觀察使用任務(wù)后的仿真波形,并分析使用task帶來的好處。4. 綜合時(shí)采用不同的FPGA器件,如Altera公司的Cyclone II系列和Stratix III系列,觀察綜合后的結(jié)果有什么不同。六、實(shí)驗(yàn)報(bào)告要求 1 要求實(shí)驗(yàn)報(bào)告中有編寫模塊源碼和測試模塊;2 要求實(shí)驗(yàn)報(bào)告中有綜合后RTL圖形;3 要求實(shí)驗(yàn)報(bào)告中有仿真后的波形;4. 對課后思考題進(jìn)行分析說明。七
35、、實(shí)驗(yàn)注意事項(xiàng) 1 采用Altera公司的Cyclone II系列的EP2C35型FPGA作為建立工程、代碼編譯、綜合庫時(shí)使用的庫器件;2 綜合使用synplify工具,布局布線使用quartus II自帶工具;3 仿真使用ModelSim工具。八、思考題 用兩種不同的方法設(shè)計(jì)一個(gè)功能相同的模塊,該模塊能夠完成四個(gè)8位二進(jìn)制輸入數(shù)據(jù)的冒泡排序。要求如下:(1) 第一種方法,模仿上面的例子用純組合邏輯實(shí)現(xiàn);(2) 第二種,假設(shè)8位數(shù)據(jù)是按照時(shí)鐘節(jié)拍串行輸入的,要求用時(shí)鐘觸發(fā)任務(wù)的執(zhí)行法,每個(gè)時(shí)鐘周期完成一次數(shù)據(jù)交換的操作。(3) 比較以上兩種不同方法的運(yùn)行速度和消耗資源的不同。實(shí)驗(yàn)八 利用有限狀
36、態(tài)機(jī)進(jìn)行時(shí)序邏輯的設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?1掌握利用有限狀態(tài)機(jī)實(shí)現(xiàn)一般時(shí)序邏輯分析的方法;2掌握用Verilog編寫可綜合的有限狀態(tài)機(jī)的標(biāo)準(zhǔn)模板;3掌握用Verilog編寫狀態(tài)機(jī)模塊的測試文件的一般方法。二、實(shí)驗(yàn)內(nèi)容 1閱讀書上例子,熟悉狀態(tài)機(jī)的設(shè)計(jì)流程及設(shè)計(jì)思路; 2設(shè)計(jì)一個(gè)串行數(shù)據(jù)檢測器。要求是:連續(xù)4個(gè)或4個(gè)以上為1時(shí)輸出為1,其他輸入情況下為0; 3建立工程并編寫源代碼和測試模塊;4布局布線級仿真。三、實(shí)驗(yàn)儀器、設(shè)備 預(yù)裝了開發(fā)工具synplify、ModelSimSE的PC機(jī)。四、實(shí)驗(yàn)原理 1 Mealy狀態(tài)機(jī):時(shí)序邏輯的輸出不但取決于狀態(tài)還取決于輸入,即稱為Mealy狀態(tài)機(jī),其設(shè)計(jì)原理如
37、上圖所示。2 本實(shí)驗(yàn)中,所采用的是同步低電平清零4位Mealy狀態(tài)機(jī)。其檢測信號狀態(tài)為1111。3 狀態(tài)機(jī)測試模塊中,將data寄存器的最高位data23通過assign連續(xù)賦值語句賦值給寄存器x,然后通過always過程賦值語句在上升沿到來時(shí),將data數(shù)據(jù)的最高位與余下的23位重新拼接組合,即data=data22:0,data23語句,將data23放到數(shù)據(jù)末尾,依次循環(huán)實(shí)現(xiàn)數(shù)據(jù)向左移環(huán)形流,同時(shí)連續(xù)性賦值語句產(chǎn)生data最高位與x連接的效果。4 狀態(tài)機(jī)設(shè)計(jì)實(shí)例功能是檢測一個(gè)5位二進(jìn)制序列“10010”。考慮到序列重疊的可能,有限狀態(tài)機(jī)共提供8個(gè)狀態(tài)(包括初始狀態(tài)IDLE)。模塊源代碼:
38、/seqdet.vmodule seqdet(x,z,clk,rst,state);input x,clk,rst;output z;output2:0 state;reg2:0 state;wire z;parameter IDLE=d0, A=d1, B=d2,C=d3, D=d4,E=d5, F=d6,G=d7; assign z = ( state=E & x=0 )? 1 : 0; /當(dāng)x=0時(shí),狀態(tài)已變?yōu)镋, /狀態(tài)為D時(shí),x仍為1。因此 /輸出為1的條件為( state=E & x=0 )。always (posedge clk) if(!rst) begin state = I
39、DLE; end else casex(state) IDLE : if(x=1)begin state = A; end A: if(x=0) begin state = B; end B: if(x=0) begin state = C; end else begin state = F; end C: if(x=1) begin state = D; end else begin state = G; end D: if(x=0) begin state = E; end else begin state = A; end E: if(x=0) begin state = C; end else begin state = A; end F: if(x=1) begin state = A; end else begin state = B; end G: if(x=1) begin state = F; end default:state=IDLE; /缺省狀態(tài)為初始狀態(tài)。 endcaseendmodule測試模塊源代碼: /- seqdet.v - timescale 1ns/1ns i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 粉狀化妝品制造工安全生產(chǎn)能力考核試卷含答案
- 快件派送員安全培訓(xùn)水平考核試卷含答案
- 硫酸生產(chǎn)工崗前師帶徒考核試卷含答案
- 冷拉絲工改進(jìn)能力考核試卷含答案
- 侍酒師改進(jìn)水平考核試卷含答案
- 樹樁盆景工安全生產(chǎn)知識強(qiáng)化考核試卷含答案
- 金屬材管拉拔工標(biāo)準(zhǔn)化測試考核試卷含答案
- 2025年云南城市建設(shè)職業(yè)學(xué)院馬克思主義基本原理概論期末考試模擬題附答案
- 2024年西疇縣事業(yè)單位聯(lián)考招聘考試真題匯編附答案
- 2024年海南州特崗教師招聘考試真題題庫附答案
- 2026年1月福建廈門市集美區(qū)后溪鎮(zhèn)衛(wèi)生院補(bǔ)充編外人員招聘16人筆試備考題庫及答案解析
- 2025 年大學(xué)人工智能(AI 應(yīng)用)期中測試卷
- 重慶市渝中區(qū)(2025年)輔警協(xié)警筆試筆試真題(附答案)
- 暴雪車輛行駛安全培訓(xùn)課件
- 2026年七臺河職業(yè)學(xué)院單招綜合素質(zhì)筆試模擬試題帶答案解析
- 2026年吉林司法警官職業(yè)學(xué)院單招職業(yè)技能考試備考試題帶答案解析
- 2025內(nèi)蒙古潤蒙能源有限公司招聘22人考試題庫附答案解析(奪冠)
- 2026年國家電網(wǎng)招聘之電網(wǎng)計(jì)算機(jī)考試題庫500道有答案
- 年味課件教學(xué)課件
- 中國臨床腫瘤學(xué)會(huì)(csco)胃癌診療指南2025
- 廣東省廣州市2025年上學(xué)期八年級數(shù)學(xué)期末考試試卷附答案
評論
0/150
提交評論