基于DE115開發板的FPGA入門設計試驗_第1頁
基于DE115開發板的FPGA入門設計試驗_第2頁
基于DE115開發板的FPGA入門設計試驗_第3頁
基于DE115開發板的FPGA入門設計試驗_第4頁
基于DE115開發板的FPGA入門設計試驗_第5頁
已閱讀5頁,還剩23頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、基于 DE2-115 開發板的 FPGA 入門設計實驗 1、Lab1: 4 位加法器、減法器的設計 1.1 摘要 在文件 add_sub 里面的工程文件 operation_4.v 為頂層文 件,該頂層文件包含了三個子模塊, 分別為數碼管顯示模塊, 4 位帶進位的二進制加法器模塊和 4 位帶借位的二進制減法 器模塊,最后通過 DE2-115 開發板顯示實驗結果。 1.2 程序 1) add_4bits.v 加法器 module adder_4bits ( input clk, input rst_n, input 3:0 x, input 3:0 y, output reg 3:0 sum,

2、output reg carry_out/ 溢出位 ); always(posedge clk or negedge rst_n) begin if(!rst_n) carry_out, sum = 0; else carry_out, sum = x + y; end endmodule 2) substractor_4bits.v 減法器 module subtractor_4bits ( input clk, input rst_n, input 3:0 x, input 3:0 y, output reg 3:0 sub, output regborrow_out ); always(

3、posedge clk or negedge rst_n) begin if(!rst_n) borrow_out, sub = y) borrow_out, sub = 1b0, x - y; else borrow_out, sub = 1b1, x - y; end end endmodule 3) seg7_lut.v 數碼管顯示譯碼模塊 module Seg7_lut ( input 3:0 iDIG, output reg 6:0 oSEG ); always (iDIG) begin case(iDIG) 4h1: oSEG = 7b1111001; / -t 4h2: oSEG

4、 = 7b0100100; / | | 4h3: oSEG = 7b0110000; / lt rt 4h4: oSEG = 7b0011001; / | | 4h5: oSEG = 7b0010010; / -m 4h6: oSEG = 7b0000010; / | | 4h7: oSEG = 7b1111000; / lb rb 4h8: oSEG = 7b0000000; / | | 4h9: oSEG = 7b0011000; / -b 4ha: oSEG = 7b0001000; 4hb: oSEG = 7b0000011; 4hc: oSEG 7b1000110; 4hd: oSE

5、G = 7b0100001; 4he: oSEG = 7b0000110; 4hf: oSEG = 7b0001110; 4h0: oSEG = 7b1000000; endcase end endmodule 1.3 結果 本設計通過 Verilog HDL 硬件描述語言。描述加法、減 法算法,包括了進位以及借位,最終可以在實驗板上觀察結 果,驗證了算法的正確性。撥碼開關 SW7:0 輸入兩位計算 值, SW17 為復位按鍵,如下圖所示: 該實驗結果顯示的是 7+b=02 ,進位位在 LEDG0 顯示, 7-b=12, 借位位在 LEDR0 顯示。計算過程如下: 2、Lab2: 三位二進制乘

6、法器的設計 2.1 摘要 在文件 mult_3bits 里面的工程文件 operation_4.v 為頂層 文件,該頂層文件包含了兩個子模塊,分別為數碼管顯示模 塊和三位二進制乘法器模塊, 最后通過 DE2-115 開發板顯示 實驗結果。 2.2 程序 1) mult_3bits.v 乘法器 module mult_ 3bits ( input 2:0 x, input 2:0 y, output 5:0 mult_out ); wire 2:0 temp0 = y0 ? x : 3d0; wire 2:0 temp1 = y1 ? x : 3d0; wire 2:0 temp2 = y2 ?

7、 x : 3d0; assign mult_out = temp0 + (temp1 1) + (temp2 2); endmodule 2)seg7_lut.v 文件與 Lab1 中的相同 2.3 結果 本設計通過 Verilog HDL 硬件描述語言,通過移位以及 加法,實現三位二進制乘法功能,最終可以在實驗板上觀察 結果,驗證了算法的正確性。撥碼開關 SW6:0 輸入兩位計 算值, SW17 為復位按鍵,如下圖所示: 3、Lab3: 序列檢測器的設計 3.1 摘要 通過 Verilog HDL 硬件描述語言,按照要求,設計一個 序列檢測器,在檢測到 4b1111 序列后輸出高電平標志位,

8、 反之輸出低電平。電路在 Quartus II 中設計,最后通過波形 圖仿真和開發板得出實驗結果。 3.2 程序 sequence_detect.v 序列檢測器 module sequence_detect ( input clk, input rst_n, input din_en, /H vaild input din, output reg dout ); /capture the posedge of din_en for data receive reg din_en_r0,din_en_r1; always(posedge clk or negedge rst_n) begin i

9、f(!rst_n) begin din_en_r0 = 0; din_en_r1 = 0; end else begin din_en_r0 = din_en; din_en_r1 = din_en_r0; end end wire din_flag = (din_en_r1 /din_en 的值由 0 變 1 時,din_flag 的值變為高電平維持一個 時鐘周期(脈沖邊沿檢測) /din_en 作為數據輸入的標志 / reg 3:0 sequence_data;/序列數據寄存器 always(posedge clk or negedge rst_n) begin /寄存器輸出為 0 if(

10、!rst_n) begin sequence_data = 0;/初始化時寄存器狀態 dout = 0; end else if(din_flag)/din_en 上升沿, din_flag=1 begin sequence_data = sequence_data2:0, din; / 串行輸入 dout = (sequence_data = 4b1111) ? 1b1 : 1b0; end end endmodule 3.3 結果 該程序中定義可串行輸入接口: din ,串行輸出接口 dout, 同時添加了數據輸入標志信號 din_en,以指示數據的輸入。 串行數據輸入序列通過移位操作,存

11、入與sequence_data中, 同時檢測 sequence_data,當出現 4b1111時, dout 輸出 1 表 示檢測到了要求的序列。其中仿真結果如下: 4、Lab4: 變模計數器的設計 4.1 摘要 在設計一個計數器的前提下,要求模值可變,即計算器 最大值可變。因此,這要求能動態改變計數器的模值,同時 在數碼管上實時顯示輸出結果。 在文件 variable_counter 里面 的工程文件 variable_counter.v 為頂層文件,該頂層文件包含 了一個數碼管顯示子模塊, 最后通過 DE2-115 開發板顯示實 驗結果。 4.2 內容 1) 變模的實現 模值可以通過選擇,

12、也可以通過輸入,來動態改變。在 該實驗中,通過一個撥碼開關 SW0 來選擇模值“ 16”或者 “64”,實現選擇通過一個選擇語句即可實現。如下語句: wire 7:0 max_vaule = SW0 ? 8d64 : 8d16; 2) 輸出顯示 本實驗通過 2個 7 段數碼管來顯示數據。同時為了肉眼 能看到數據的變化,通過計數,實現0.25S 的使能標志定點 時間,以此標志位來作為計數器的計數周期,保證肉眼可以 看得到數據的變化。 4.3 程序 1) variable_counter.v 變模計數器頂層模塊 module variable_counter input clk, /CLOCK_5

13、0 /SW17 /SW0 控制變模 input rst_n, input 0:0 SW, output 6:0 HEX0,/ge_data output 6:0 HEX1/shi_data ); wire 7:0 max_vaule = SW0 ? 8d64 : 8d16; reg 23:0 cnt; always(posedge clk or negedge rst_n) begin if(!rst_n) cnt = 0; else cnt = (cnt = 24d12500000) ? 24d0 : cnt + 1b1; end wire delay02_flag = (cnt = 24d

14、12500000) ? 1b1 : 1b0; / reg 7:0 counter;/8 位最大計數 127 always(posedge clk or negedge rst_n) begin if(!rst_n) counter = 0; else if(delay02_flag)/ 計數 0.25s counter = max_vaule) ? 8d0 : counter + 1b1; end / /hex2decimal convert wire 3:0 shi_data = (counter 10)? 4d0: (counter 20)? 4d1: (counter 30)? 4d2:

15、 (counter 40)? 4d3: (counter 50)? 4d4: (counter 60)? 4d5: (counter 70)? 4d6: (counter 80)? 4d7: (counter 90)? 4d8: 4d9; wire 3:0 ge_data = (counter 10)? counter - 8d0: (counter 20)? counter - 8d10: (counter 30)? counter - 8d20: (counter 40)? counter - 8d30: (counter 50)? counter - 8d40: (counter 60)

16、? counter - 8d50: (counter 70)? counter - 8d60: (counter 80)? counter - 8d70: (counter 90)? counter - 8d80: counter - 8d90; /shi_data display Seg7_lut u_Seg7_lut1 ( .iDIG (shi_data), .oSEG (HEX1) ); /ge_data display Seg7_lut u_Seg7_lut2 ( .iDIG (ge_data), .oSEG (HEX0) ); Endmodule 2) Seg7_lut.v 數碼管顯

17、示模塊與 Lab1 中的相同 4.3 結果 SW0=0 時,計數器的最大值為 16 SW0=1 時,計數器的最大值為 64 5、Lab5: 流水燈和簡易電子時鐘的設計 在文件 time_counter 里面的工程文件 Labtest.v 為頂層文 件,該頂層文件包含了三個子模塊, 分別為數碼管顯示模塊, 流水燈模塊和計數器模塊,實現數碼管顯示分、秒、毫秒計 時的簡易電子鐘和流水燈顯示。 5.1 流水燈設計 5.1.1 摘要 通過 verilog HDL 硬件描述語言, 實現 8 個 LED 每隔 1s 點亮一個的功能。 5.1.2 內容 1)1S 延時實現 D2-115 開發板的時鐘頻率為 5

18、0Mhz ,通過計數器計數 50000000 次,到點即輸出使能標志,即可實現延時。 2)挨個點亮 LED 本設計通過移位操作來實現 8 個 LED 的挨個點亮功能, led_data = led_data6:0,1b1;/ 每一秒左移一位 最后通過引腳配置,全局編譯,下載到 DE2-115 中,觀 察現象,驗證正確,如下圖所示: 5.1.3 程序 Time_Counter 文件夾下的 led_display.v 文件 module led_display ( inputclk, inputrst_n, output reg 7:0 led_data ); / reg 27:0 cnt; al

19、ways(posedge clk or negedge rst_n) begin if(!rst_n) cnt = 0; else cnt = (cnt = 28d50_000000) ? 28d0 : cnt + 1b1; /1s end wire delay01_flag = (cnt = 28d50_000000) ? 1b1 : 1b0; always(posedge clk or negedge rst_n) begin if(!rst_n) led_data = 0; else if(delay01_flag)/ 計時 1S led_data = led_data6:0,1b1;/

20、 每一秒左移一位 end endmodule 5.2 簡易電子時鐘的設計 5.2.1 摘要 在 DE2-115 開發板上,通過 Verilog HDL 硬件描述語言, 實現分、秒、毫秒計時的簡易電子時鐘,并且通過數碼管顯 示出來。 5.2.2 內容和結果 本實驗主要內容是計數,其次,描述出分秒毫秒之間的 計時關系,即可實現功能。 1)分秒毫秒計時 根據晶振時鐘的輸入,通過計數實現1ms 的 delay,然 后通過此標志位,進行“毫秒”( 0999 )計數,當“毫秒” 到達 999 的時候,自動清零并且給秒進位,當“秒”到達 59 的時候,自動清零并且給分進位,當“分”到達59 的時候, 自動清

21、零,重新計數,本實驗通過一位撥碼開關SW7 控制 復位,當 SW7=0 時,所有計數清零。 2)數碼管顯示 根據要顯示的數據,通過不同的段的點亮,來實現 0-9 的顯示。本實驗分秒毫秒需要 7 位數碼管,通過例化 7 個數 碼管顯示電路,通過參數的傳遞,實現“分”高位、“分” 低位、“秒”高位、“秒”低位、“毫秒”高位、“毫秒” 中位、“毫秒”低位的實時顯示。 最后通過引腳配置,全局編譯,下載到 DE2-115 中,觀 察現象,驗證正確,如下圖所示,下面實驗現象顯示 07 分 43 秒 388 毫秒, 7 位 7 段數碼管,時刻很準確。 5.2.3 程序 Time_Counter 文件夾下的

22、time_counter.v 文件為分秒計 時器模塊。 Time_Counter 文件夾下的 seg7_lut.v 文件為數碼管顯示 模塊。 Time_Counter 文件夾下的 Labtest.v 文件為頂層模塊, 通 過調用分秒計時器模塊和數碼管顯示模塊實現該分秒計時 器的顯示 6、Lab6: 簡易計算器的設計 文件 Calculator_Design 里面的工程文件 Calculator_Design.v 為頂層文件,該頂層文件包含了四個子 模塊,分別為按鍵消抖掃描模塊,四位二進制乘法器模塊, 四位二進制加法器模塊,數碼管顯示模塊,實現計算乘法和 加法的簡易計算器的設計。 6.1 摘要

23、通過 Verilog HDL 硬件描述語言, 設計一個簡易計數器, 實現 09 的加法算法,以及乘法算法。 6.2 內容和結果 1)加法、乘法電路 在前面的實驗中已經設計過加減法器電路和乘法電路 2)按鍵掃描程序 通常用戶按鍵,在按下去之后,會有 20ms 左右的抖動, 同時,在按鍵放開之后會有 20ms 左右的抖動。在這時候若 采集信號,勢必導致誤操作,甚至系統崩潰。因此,在模擬 或者數字電路中,我們要避免在最不穩定的時候采集信號, 進行操作。 對此一般產用消抖動的原理。一般可分為以下幾種: (1)延時 (2)N 次低電平計數 (3)低通濾波 在數字電路中, 可以掩飾, 當然更方便的是直接

24、N 次采 樣,來判斷是否改變,以及改變的時間。因此做以下處理, 進行 N 次計數,有效去噪聲,抖動,以及干擾。 按鍵掃描模塊將輸出 key_flag 按鍵按下反饋信號,以及 即時輸出的數據: 3)數值輸入與計算 數值采用撥碼開關輸入,同時為了確保數值在用戶撥動 撥碼開關后輸入,更容易改變 x 或者 y,由于硬件的局限, 只能通過輕觸按鍵的觸發來實現數值的輸入。每個撥碼開關 代表一個值( 0-9),同時,第一個輕觸按鍵表示 x 的輸入觸 發,第二個輕觸按鍵表示 y 的輸入觸發, 第三個表示輸出 x+y 的結果,第四個表示輸出 x*y 的結果。 4)數碼管顯示 數碼管譯碼電路跟之前的實驗一樣,通過

25、點亮不同的 段,來實現 0-F 的顯示,簡易計算 x,y 的值,以及結果剛好 通過 4 位數碼管顯示出來,如下圖所示 ,9+9=18 , 9*9=81 6.3 程序 Calculator_Design 文件夾下的 Calculator_Design.v 為該 設計的頂層模塊 Time_Counter 文件夾下的 seg7_lut.v 文件為數碼管顯示 模塊。 Time_Counter 文件夾下的 key_scan.v 文件為按鍵消抖掃 描程序。 Time_Counter 文件夾下的 mult_4bits.v 文件為四位二進 制乘法器模塊。 Time_Counter 文件夾下的 adder_4bits.v 文件

溫馨提示

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

評論

0/150

提交評論