EDA技術(shù)及應(yīng)用實(shí)驗(yàn)報(bào)告(完整版純手打)_第1頁(yè)
EDA技術(shù)及應(yīng)用實(shí)驗(yàn)報(bào)告(完整版純手打)_第2頁(yè)
EDA技術(shù)及應(yīng)用實(shí)驗(yàn)報(bào)告(完整版純手打)_第3頁(yè)
EDA技術(shù)及應(yīng)用實(shí)驗(yàn)報(bào)告(完整版純手打)_第4頁(yè)
EDA技術(shù)及應(yīng)用實(shí)驗(yàn)報(bào)告(完整版純手打)_第5頁(yè)
已閱讀5頁(yè),還剩16頁(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、EDA技術(shù)及應(yīng)用實(shí)驗(yàn)報(bào)告系 部: 指導(dǎo)教師: 學(xué) 號(hào): 姓 名: 實(shí)驗(yàn)一 點(diǎn)亮LED設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)此實(shí)驗(yàn)讓用戶(hù)逐步了解、熟悉和掌握FPGA開(kāi)發(fā)軟件QuartusII的使用方法及Verilog HDL的編程方法。本實(shí)驗(yàn)力求以詳細(xì)的步驟和講解讓讀者以最快的方式了解EDA技術(shù)開(kāi)發(fā)以及軟件的使用,從而快速入門(mén)并激起讀者對(duì)EDA技術(shù)的興趣。二、實(shí)驗(yàn)內(nèi)容SmartSOPC實(shí)驗(yàn)箱上有8個(gè)發(fā)光二極管LED18,并分別與FPGA的50、5355、176和4749引腳相連。本實(shí)驗(yàn)的內(nèi)容是建立可用于控制LED亮/滅的簡(jiǎn)單硬件電路,要求點(diǎn)亮SmartSOPC實(shí)驗(yàn)箱上的4個(gè)發(fā)光二極管(LED1、LED3、LED5

2、和LED7)。三、實(shí)驗(yàn)原理FPGA器件同單片機(jī)一樣,為用戶(hù)提供了許多靈活獨(dú)立的輸入/輸出I/O口(單元)。FPGA每個(gè)I/O口可以配置為輸入、輸出、雙向I/O、集電極開(kāi)路和三態(tài)門(mén)等各種組態(tài)。作為輸出口時(shí),F(xiàn)PGA的I/O口可以吸收最大為24mA的電流,可以直接驅(qū)動(dòng)發(fā)光二極管LED等器件。所以只要正確分配并鎖定引腳后,在相應(yīng)的引腳上輸出低電平“0”,就可以實(shí)現(xiàn)點(diǎn)亮該發(fā)光二級(jí)管的功能。四、實(shí)驗(yàn)步驟1、啟動(dòng)Quarters II建立一個(gè)空白工程,命名為led_test.qpf。然后分別建立圖形設(shè)計(jì)文件,命名為led_test.bdf,以及文本編輯文件led1.v,將他們都添加進(jìn)工程中。2、對(duì)工程進(jìn)行

3、設(shè)計(jì)。在led1.v中輸入程序代碼,并保存,進(jìn)行綜合編譯,若在編譯中發(fā)現(xiàn)錯(cuò)誤,則找出并更正錯(cuò)誤,直至編譯成功為止。從設(shè)計(jì)文件中創(chuàng)建模塊,由led1.v生成名為led1.bsf的模塊符號(hào)文件。在led_test.bdf中任意空白處雙擊鼠標(biāo)左鍵,將symbol對(duì)話(huà)框中l(wèi)ibraries:project下的led1模塊添加到圖形文件led_test.bdf中,加入輸入、輸出引腳,雙擊各管腳符號(hào),進(jìn)行管腳命名。完整的頂層模塊原理圖如下圖所示。選擇目標(biāo)器件并進(jìn)行引腳鎖定。將未使用的管腳設(shè)置為三態(tài)輸入。3、設(shè)置編譯選項(xiàng)并編譯硬件系統(tǒng)。將led_test.bdf設(shè)置為頂層實(shí)體。對(duì)該工程文件進(jìn)行全程編譯處理。

4、若在編譯過(guò)程中發(fā)現(xiàn)錯(cuò)誤,則找出并更正錯(cuò)誤,直到編譯成功為止。4、下載硬件設(shè)計(jì)到目標(biāo)FPGA。將產(chǎn)生的led_test.sof輸出對(duì)FPGA進(jìn)行配置。5、觀察LED的狀態(tài)。五、實(shí)驗(yàn)程序/利用連續(xù)賦值assign語(yǔ)句實(shí)現(xiàn)module led1(led); /模塊名 led1output7:0 led; /定義輸出端口、assign led =8'b10101010; /輸出0xAAendmodule/利用過(guò)程賦值語(yǔ)句實(shí)現(xiàn)(暫時(shí)已屏蔽)/*module led1(led); /模塊名 led1output7:0 led; /定義輸出端口reg7:0 led; /定義寄存器always /過(guò)程

5、1,無(wú)敏感變量begin led = 8'b10101010; /輸出0xAAendendmudule*/六、思考題寫(xiě)出使用QuartusII軟件開(kāi)發(fā)工程的完整的流程。實(shí)驗(yàn)二流水燈實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)此實(shí)驗(yàn)讓用戶(hù)進(jìn)一步了解、熟悉和掌握CPLD/FPGA開(kāi)發(fā)軟件的使用方法及Verilog HDL的編程方法。學(xué)習(xí)簡(jiǎn)單時(shí)序電路的設(shè)計(jì)和硬件測(cè)試。二、實(shí)驗(yàn)內(nèi)容本實(shí)驗(yàn)的內(nèi)容是建立可用于控制LED流水燈的簡(jiǎn)單硬件電路,要求在SmartSOPC實(shí)驗(yàn)箱上實(shí)現(xiàn)LED1LED8發(fā)光二極管流水燈顯示。三、實(shí)驗(yàn)原理1、在LED1LED8引腳上周期性的輸出流水?dāng)?shù)據(jù),如原來(lái)輸出的數(shù)據(jù)是11111100則表示點(diǎn)亮LE

6、D1、LED2,流水一次后,輸出的數(shù)據(jù)應(yīng)該為11111000,而此時(shí)則應(yīng)點(diǎn)亮LED1LED3三個(gè)LED發(fā)光二極管,就可以實(shí)現(xiàn)LED流水燈。為了觀察方便,流水速率最好在2Hz左右。在QuickSOPC核心板上有一個(gè)48MHz的標(biāo)準(zhǔn)時(shí)鐘源,該時(shí)鐘脈沖Clock與芯片的28管腳相連。為了產(chǎn)生2Hz的時(shí)鐘脈沖,在此調(diào)用了一個(gè)分頻模塊(int_div模塊,位于光盤(pán)中EDA_Component目錄下),通過(guò)修改分頻系數(shù)來(lái)改變輸出頻,當(dāng)分頻系數(shù)為24x106時(shí),輸出即為2Hz的頻率信號(hào)。2、Int_div分頻模塊說(shuō)明:int_div模塊是一個(gè)占空比為50%的任意整數(shù)分頻器。輸入時(shí)鐘為clock,輸出時(shí)鐘為c

7、lk_out。其中F_DIV為分頻系數(shù),分頻系數(shù)范圍為12n (n=F_DIV_WIDTH),若要改變分頻系數(shù),改變參數(shù)F_DIV和F_DIV_WIDTH到相應(yīng)范圍即可。在本例中輸入時(shí)鐘為48MHz,要得到2Hz的信號(hào),所以分頻系數(shù)為48x106/2=24x106;對(duì)于分頻系數(shù)為24x106的數(shù)需要一個(gè)25位寬的計(jì)數(shù)器即可。四、實(shí)驗(yàn)步驟1、啟動(dòng)Quarters II建立一個(gè)空白工程,命名為led_water.qpf。2、新建Verilog HDL源程序文件ledwater.v,輸入程序代碼并保存,進(jìn)行綜合編譯,若在編譯中發(fā)現(xiàn)錯(cuò)誤,則找出并更正錯(cuò)誤,直至編譯成功為止。3、從設(shè)計(jì)文件中創(chuàng)建模塊,由

8、ledwater.v生成名為ledwater.bsf的模塊符號(hào)文件。4、將光盤(pán)中EDA_Component目錄下的int_div.bsf和int_div.v拷貝到工程目錄。5、新建圖形設(shè)計(jì)文件命名為led_water.bdf并保存。在空白處雙擊鼠標(biāo)左鍵,分別將symbol對(duì)話(huà)框中l(wèi)ibraries:project下的ledwater和int_div模塊放在圖形文件led_water.bdf中,加入輸入、輸出引腳,雙擊各管腳符號(hào),進(jìn)行管腳命名。雙擊int_div的參數(shù)框,并修改參數(shù),將F_DIV的值改為24000000,F(xiàn)_DIV_WIDTH的值改為25. 完整的頂層模塊原理圖如下圖所示。6、選

9、擇目標(biāo)器件并進(jìn)行引腳鎖定。將未使用的管腳設(shè)置為三態(tài)輸入。7、將led_water.bdf設(shè)置為頂層實(shí)體。對(duì)該工程文件進(jìn)行全程編譯處理。若在編譯過(guò)程中發(fā)現(xiàn)錯(cuò)誤,則找出并更正錯(cuò)誤,直到編譯成功為止。8、將產(chǎn)生的led_water.sof輸出對(duì)FPGA進(jìn)行配置。9、更改分頻模塊(int_div)的分頻系數(shù),并重新編譯下載,觀察流水燈的變化。五、實(shí)驗(yàn)程序module ledwater (led,clk); /模塊名ledwateroutput7:0 led; /定義LED輸出口input clk; /定義時(shí)鐘輸入口reg8:0 led_r; /定義輸出寄存器assign led = led_r7:0;

10、 /寄存器輸出always (posedge clk) /在時(shí)鐘上升沿觸發(fā)進(jìn)程begin led_r <= led_r << 1; /是,則輸出左移一位 if(led_r = 9'd0) /循環(huán)完畢嗎? led_r <= 9'b111111111; /是,則重新賦初值endendmodule六、思考題本實(shí)驗(yàn)頂層采用了圖形輸入的方式,若采用文本輸入方式,如何編寫(xiě)頂層文件?寫(xiě)出相應(yīng)程序。實(shí)驗(yàn)三 鍵盤(pán)、LED發(fā)光實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)此實(shí)驗(yàn)讓用戶(hù)進(jìn)一步了解、熟悉和掌握CPLD/FPGA開(kāi)發(fā)軟件的使用方法及Verilog HDL的編程方法,熟悉以Verilog H

11、DL文件為頂層模塊的設(shè)計(jì)。學(xué)習(xí)和體會(huì)分支條件語(yǔ)句case的使用方法及FPGA I/O口的輸出控制。二、實(shí)驗(yàn)內(nèi)容SmartSOPC實(shí)驗(yàn)箱上有8個(gè)發(fā)光二極管LED18和8個(gè)按鍵KEY1KEY8。本實(shí)驗(yàn)的內(nèi)容要求在SmartSOPC實(shí)驗(yàn)箱上完成對(duì)8個(gè)按鍵KEY1KEY8進(jìn)行監(jiān)控,一旦有按鍵輸入判斷其鍵值,并點(diǎn)亮相應(yīng)的發(fā)光二極管,如若KEY3按下,則點(diǎn)亮LED1LED3發(fā)光二極管。三、實(shí)驗(yàn)原理FPGA的所有I/O控制塊允許每個(gè)I/O口引腳單獨(dú)配置為輸出口,不過(guò)這種配置是系統(tǒng)自動(dòng)完成的,一旦該I/O口被設(shè)置為輸入口使用時(shí)(如定義key0為輸入引腳:input key0;)該I/O控制模塊將直接使三態(tài)緩沖

12、區(qū)的控制端接地,使得該I/O口引腳對(duì)外呈高阻態(tài),這樣該I/O口引腳即可用作專(zhuān)用輸入引腳。只要正確分配并鎖定引腳后,一旦在KEY1KEY8中有按鍵輸入,在檢測(cè)到鍵盤(pán)輸入的情況下,繼續(xù)判斷其鍵值并做出相應(yīng)的處理。四、實(shí)驗(yàn)步驟1、啟動(dòng)Quarters II建立一個(gè)空白工程,命名為keyled.qpf。2、新建Verilog HDL源程序文件keyled.v,輸入程序代碼并保存,進(jìn)行綜合編譯,若在編譯中發(fā)現(xiàn)錯(cuò)誤,則找出并更正錯(cuò)誤,直至編譯成功為止。3、選擇目標(biāo)器件并進(jìn)行引腳鎖定。將未使用的管腳設(shè)置為三態(tài)輸入。4、對(duì)該工程文件進(jìn)行全程編譯處理。若在編譯過(guò)程中發(fā)現(xiàn)錯(cuò)誤,則找出并更正錯(cuò)誤,直到編譯成功為止。

13、5、將產(chǎn)生的keyled.sof輸出對(duì)FPGA進(jìn)行配置。按下不同按鍵觀察LED發(fā)光管的狀態(tài)。五、實(shí)驗(yàn)程序module keyled(key,led);/模塊名keyledinput7:0 key;/定義鍵盤(pán)輸入口output7:0led;/定義發(fā)光管輸出口reg7:0led_r;/定義寄存器reg7:0buffer_r;assign led = led_r;/輸出鍵值always(key)/過(guò)程1beginbuffer_r = key;/讀取鍵值case(buffer_r)8'b11111110:led_r = 8'b11111110;/是鍵KEY1,則給寄存器賦值0xfe8&

14、#39;b11111101:led_r = 8'b11111100;/是鍵KEY2,則給寄存器賦值0xfc8'b11111011:led_r = 8'b11111000;/是鍵KEY3,則給寄存器賦值0xf88'b11110111:led_r = 8'b11110000;/是鍵KEY4,則給寄存器賦值0xf08'b11101111:led_r = 8'b11100000;/是鍵KEY5,則給寄存器賦值0xe08'b11011111:led_r = 8'b11000000;/是鍵KEY6,則給寄存器賦值0xc08'b

15、10111111:led_r = 8'b10000000;/是鍵KEY7,則給寄存器賦值0x808'b01111111:led_r = 8'b00000000;/是鍵KEY8,則給寄存器賦值0x00default:led_r = 8'b11111111;/否則給寄存器賦值0xffendcaseendendmodule六、思考題能否用if語(yǔ)句改寫(xiě)本實(shí)驗(yàn)程序?如果能,寫(xiě)出相應(yīng)程序。實(shí)驗(yàn)四 靜態(tài)數(shù)碼管顯示實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)7段數(shù)碼管顯示譯碼器的設(shè)計(jì),進(jìn)一步了解、熟悉和掌握FPGA開(kāi)發(fā)軟件Quartus II的使用方法及Verilog HDL的編程方法,學(xué)習(xí)LPM兆功

16、能模塊的調(diào)用。二、實(shí)驗(yàn)內(nèi)容SmartSOPC實(shí)驗(yàn)箱上有2個(gè)4位動(dòng)態(tài)共陽(yáng)極數(shù)碼管LED12和LED13。其中8個(gè)位碼DIG0DIG7和8位段碼SEG0SEG7分別與FPGA相應(yīng)的引腳相連。這樣,只要DIG0DIG7上一直輸出低電平“0”,則8個(gè)數(shù)碼管將顯示相同的數(shù)碼(因?yàn)?個(gè)LED數(shù)碼管的段碼線(xiàn)分別接到了同一引腳上),這樣8位動(dòng)態(tài)的LED數(shù)碼管就變成了靜態(tài)的LED。本實(shí)驗(yàn)的內(nèi)容是建立7段譯碼顯示模塊,用于控制LED數(shù)碼管的靜態(tài)顯示。要求在SmartSOPC實(shí)驗(yàn)箱上的數(shù)碼管依次顯示09和AF16個(gè)字符。三、實(shí)驗(yàn)原理數(shù)碼管LED顯示是工程項(xiàng)目中使用較廣的一種輸出顯示器件。常見(jiàn)的數(shù)碼管有共陰和共陽(yáng)2種

17、。共陰數(shù)碼管是將8個(gè)發(fā)光二極管的陰極連接在一起作為公共端,而共陽(yáng)數(shù)碼管是將8個(gè)發(fā)光二極管的陽(yáng)極連接在一起作為公共端。公共端常被稱(chēng)作位碼,而將其他的8位稱(chēng)作段碼。數(shù)碼管有8個(gè)段分別為:h、g、f、e、d、c、b和a(h為小數(shù)點(diǎn)),只要公共端為高電平“1”,某個(gè)段輸出低電平“0”則相應(yīng)的段就亮。本實(shí)驗(yàn)通過(guò)分頻模塊int_div分頻得到1Hz的頻率信號(hào),加載于4位計(jì)數(shù)器的時(shí)鐘輸入端,計(jì)數(shù)循環(huán)輸出09、AF16個(gè)數(shù)。最后通過(guò)七段譯碼模塊譯碼后在數(shù)碼管上顯示出來(lái)。四、實(shí)驗(yàn)步驟1、啟動(dòng)Quarters II建立一個(gè)空白工程,命名為sled.qpf。2、新建Verilog HDL源程序文件decl7s.v,

18、輸入程序代碼并保存,進(jìn)行綜合編譯,若在編譯中發(fā)現(xiàn)錯(cuò)誤,則找出并更正錯(cuò)誤,直至編譯成功為止。3、從設(shè)計(jì)文件中創(chuàng)建模塊,由decl7s.v生成名為decl7s.bsf的模塊符號(hào)文件。4、將光盤(pán)中EDA_Component目錄下的int_div.bsf和int_div.v拷貝到工程目錄。5、添加4位計(jì)數(shù)器兆功能模塊。6、新建圖形設(shè)計(jì)文件命名為sled.bdf并保存。在空白處雙擊鼠標(biāo)左鍵,分別將symbol對(duì)話(huà)框中l(wèi)ibraries:project下的counter、decl7s和int_div模塊放在圖形文件sled.bdf中,在symbol對(duì)話(huà)框中Name:輸入gnd,添加gnd符號(hào)。加入輸入、輸

19、出引腳,雙擊各管腳符號(hào),進(jìn)行管腳命名。雙擊int_div的參數(shù)框,并修改參數(shù),將F_DIV的值改為48000000,F(xiàn)_DIV_WIDTH的值改為26。完整的頂層模塊原理圖如下圖所示。7、選擇目標(biāo)器件并進(jìn)行引腳鎖定。將未使用的管腳設(shè)置為三態(tài)輸入。8、將sled.bdf設(shè)置為頂層實(shí)體。對(duì)該工程文件進(jìn)行全程編譯處理。若在編譯過(guò)程中發(fā)現(xiàn)錯(cuò)誤,則找出并更正錯(cuò)誤,直到編譯成功為止。9、將產(chǎn)生的sled.sof輸出對(duì)FPGA進(jìn)行配置。觀察LED顯示狀態(tài)。五、實(shí)驗(yàn)程序module decl7s(d,seg);/模塊名decl7sinput3:0 d;/輸入4位二進(jìn)制碼output7:0seg;/七段譯碼輸出

20、reg7:0 seg_r;/定義數(shù)碼管輸出寄存器assign seg = seg_r;/輸出數(shù)碼管譯碼結(jié)果always (d)begincase(d)/七段譯碼4'h0:seg_r = 8'hc0;/顯示04'h1:seg_r = 8'hf9;/顯示14'h2:seg_r = 8'ha4;/顯示24'h3:seg_r = 8'hb0;/顯示34'h4:seg_r = 8'h99;/顯示44'h5:seg_r = 8'h92;/顯示54'h6:seg_r = 8'h82;/顯示64&#

21、39;h7:seg_r = 8'hf8;/顯示74'h8:seg_r = 8'h80;/顯示84'h9:seg_r = 8'h90;/顯示94'ha:seg_r = 8'h88;/顯示a4'hb:seg_r = 8'h83;/顯示b4'hc:seg_r = 8'hc6;/顯示c4'hd:seg_r = 8'ha1;/顯示d4'he:seg_r = 8'h86;/顯示e4'hf:seg_r = 8'h8e;/顯示fendcaseendendmodule六、思考題

22、1.本實(shí)驗(yàn)采用的是共陽(yáng)極數(shù)碼管,若采用共陰極數(shù)碼管,有什么不同?2.如何顯示HHHHHHHH和PPPPPPPP?實(shí)驗(yàn)五 動(dòng)態(tài)數(shù)碼管顯示實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)動(dòng)態(tài)掃描顯示的原理及電路的設(shè)計(jì)。二、實(shí)驗(yàn)內(nèi)容本實(shí)驗(yàn)的內(nèi)容是建立數(shù)碼管動(dòng)態(tài)掃描顯示模塊,具體內(nèi)容如下:1、在SmartSOPC實(shí)驗(yàn)箱上完成LED數(shù)碼管的動(dòng)態(tài)顯示“18”8個(gè)數(shù)字;2、放慢掃描速度演示動(dòng)態(tài)顯示的原理過(guò)程。三、實(shí)驗(yàn)原理一個(gè)FPGA的片子如果帶動(dòng)多個(gè)(比如說(shuō)8個(gè))數(shù)碼管,選用靜態(tài)顯示的話(huà),管腳很容易不夠用,于是大多采用動(dòng)態(tài)顯示的方式。本次采用共陽(yáng)極的數(shù)碼管,其中每個(gè)數(shù)碼管的8個(gè)段:h、g、f、e、d、c、b和a(h為小數(shù)點(diǎn))都分別連接

23、到SEG0SEG7,8個(gè)數(shù)碼管分別由8個(gè)選通信號(hào)DIG0DIG7來(lái)選擇。被選通的數(shù)碼管顯示數(shù)據(jù),其余關(guān)閉。如果在某一時(shí)刻DIG2為低電平“0”,其余選通信號(hào)為高電平“1”,這時(shí)僅DIG2對(duì)應(yīng)的數(shù)碼管顯示來(lái)自段碼信號(hào)端的數(shù)據(jù),其余7個(gè)數(shù)碼管呈現(xiàn)關(guān)閉狀態(tài)。根據(jù)這種電路狀態(tài),如果希望8個(gè)數(shù)碼管顯示希望的數(shù)據(jù),就必須使得8個(gè)選通信號(hào)DIG0DIG7分別被單獨(dú)選通,并在此同時(shí),在段信號(hào)輸入口加上希望在該對(duì)應(yīng)數(shù)碼管上顯示的數(shù)據(jù),于是隨著選通信號(hào)的掃描就能實(shí)現(xiàn)掃描顯示的目的。雖然每次只有一個(gè)LED顯示,但只要掃描顯示速率足夠快,由于人的視覺(jué)余輝效應(yīng),使我們?nèi)詴?huì)感覺(jué)所有的數(shù)碼管都在同時(shí)顯示。四、實(shí)驗(yàn)步驟1、啟

24、動(dòng)Quarters II建立一個(gè)空白工程,命名為dled.qpf。2、新建Verilog HDL源程序文件scan_led.v,輸入程序代碼并保存,進(jìn)行綜合編譯,若在編譯中發(fā)現(xiàn)錯(cuò)誤,則找出并更正錯(cuò)誤,直至編譯成功為止。3、從設(shè)計(jì)文件中創(chuàng)建模塊,由scan_led.v生成名為scan_led.bsf的模塊符號(hào)文件。4、將光盤(pán)中EDA_Component目錄下的int_div.bsf和int_div.v拷貝到工程目錄。5、添加常量兆功能模塊。6、新建圖形設(shè)計(jì)文件命名為dled.bdf并保存。在空白處雙擊鼠標(biāo)左鍵,分別將symbol對(duì)話(huà)框中l(wèi)ibraries:project下的constant、sc

25、an_led和int_div模塊放在圖形文件dled.bdf中,加入輸入、輸出引腳,雙擊各管腳符號(hào),進(jìn)行管腳命名。雙擊int_div的參數(shù)框,并修改參數(shù),將F_DIV的值改為48000,F(xiàn)_DIV_WIDTH的值改為16。完整的頂層模塊原理圖如下圖所示。7、選擇目標(biāo)器件并進(jìn)行引腳鎖定。將未使用的管腳設(shè)置為三態(tài)輸入。8、將dled.bdf設(shè)置為頂層實(shí)體。對(duì)該工程文件進(jìn)行全程編譯處理。若在編譯過(guò)程中發(fā)現(xiàn)錯(cuò)誤,則找出并更正錯(cuò)誤,直到編譯成功為止。9、將產(chǎn)生的sled.sof輸出對(duì)FPGA進(jìn)行配置。觀察LED數(shù)碼管上的數(shù)字是否為“12345678”,然后把分頻模塊的參數(shù)改為F_DIV:24000000

26、,F(xiàn)_DIV_WIDTH:25,再重新編譯下載,觀察這次LED數(shù)碼管上的顯示數(shù)據(jù),可以看到數(shù)據(jù)“12345678”動(dòng)起來(lái)了,這正是動(dòng)態(tài)掃描的方法和過(guò)程。五、實(shí)驗(yàn)程序module scan_led(clk_1k,d,dig,seg);/模塊名scan_ledinput clk_1k;/輸入時(shí)鐘input31:0 d;/輸入要顯示的數(shù)據(jù)output7:0dig;/數(shù)碼管選擇輸出引腳output7:0 seg;/數(shù)碼管段輸出引腳reg7:0 seg_r;/定義數(shù)碼管輸出寄存器reg7:0 dig_r;/定義數(shù)碼管選擇輸出寄存器reg3:0 disp_dat;/定義顯示數(shù)據(jù)寄存器reg2:0count

27、;/定義計(jì)數(shù)寄存器assign dig = dig_r;/輸出數(shù)碼管選擇assign seg = seg_r;/輸出數(shù)碼管譯碼結(jié)果always (posedge clk_1k) /定義上升沿觸發(fā)進(jìn)程begincount <= count + 1'b1;endalways (posedge clk_1k) begincase(count)/選擇掃描顯示數(shù)據(jù)3'd0:disp_dat = d31:28;/第一個(gè)數(shù)碼管3'd1:disp_dat = d27:24;/第二個(gè)數(shù)碼管3'd2:disp_dat = d23:20;/第三個(gè)數(shù)碼管3'd3:disp

28、_dat = d19:16;/第四個(gè)數(shù)碼管3'd4:disp_dat = d15:12;/第五個(gè)數(shù)碼管3'd5:disp_dat = d11:8; /第六個(gè)數(shù)碼管3'd6:disp_dat = d7:4;/第七個(gè)數(shù)碼管3'd7:disp_dat = d3:0;/第八個(gè)數(shù)碼管endcasecase(count)/選擇數(shù)碼管顯示位3'd0:dig_r = 8'b01111111;/選擇第一個(gè)數(shù)碼管顯示3'd1:dig_r = 8'b10111111;/選擇第二個(gè)數(shù)碼管顯示3'd2:dig_r = 8'b11011111

29、;/選擇第三個(gè)數(shù)碼管顯示3'd3:dig_r = 8'b11101111;/選擇第四個(gè)數(shù)碼管顯示3'd4:dig_r = 8'b11110111;/選擇第五個(gè)數(shù)碼管顯示3'd5:dig_r = 8'b11111011;/選擇第六個(gè)數(shù)碼管顯示3'd6:dig_r = 8'b11111101;/選擇第七個(gè)數(shù)碼管顯示3'd7:dig_r = 8'b11111110;/選擇第八個(gè)數(shù)碼管顯示endcaseendalways (disp_dat)begincase(disp_dat)/七段譯碼4'h0:seg_r =

30、8'hc0;/顯示04'h1:seg_r = 8'hf9;/顯示14'h2:seg_r = 8'ha4;/顯示24'h3:seg_r = 8'hb0;/顯示34'h4:seg_r = 8'h99;/顯示44'h5:seg_r = 8'h92;/顯示54'h6:seg_r = 8'h82;/顯示64'h7:seg_r = 8'hf8;/顯示74'h8:seg_r = 8'h80;/顯示84'h9:seg_r = 8'h90;/顯示94'h

31、a:seg_r = 8'h88;/顯示a4'hb:seg_r = 8'h83;/顯示b4'hc:seg_r = 8'hc6;/顯示c4'hd:seg_r = 8'ha1;/顯示d4'he:seg_r = 8'h86;/顯示e4'hf:seg_r = 8'h8e;/顯示fendcaseendendmodule六、思考題說(shuō)出數(shù)碼管動(dòng)態(tài)顯示的原理。實(shí)驗(yàn)六 按鍵去抖動(dòng)實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)按鍵去抖動(dòng)電路的硬件設(shè)計(jì)。二、實(shí)驗(yàn)內(nèi)容本實(shí)驗(yàn)的內(nèi)容是建立按鍵消抖模塊。通過(guò)SmartSOPC實(shí)驗(yàn)箱上的按鍵KEY1(經(jīng)過(guò)消抖)或K

32、EY2(沒(méi)有消抖)控制數(shù)碼管顯示數(shù)字。對(duì)比有加消抖和沒(méi)有加消抖模塊電路的區(qū)別。三、實(shí)驗(yàn)原理作為機(jī)械開(kāi)關(guān)的鍵盤(pán),在按鍵操作時(shí),由于機(jī)械觸點(diǎn)的彈性及電壓突跳等原因,在觸點(diǎn)閉合或開(kāi)啟的瞬間會(huì)出現(xiàn)電壓抖動(dòng),實(shí)際應(yīng)用中如果不進(jìn)行處理將會(huì)造成誤觸發(fā)。由于這里是低電平表示按鍵按下,所以按鍵去抖動(dòng)的關(guān)鍵在于提取穩(wěn)定的低電平狀態(tài),慮除前沿、后沿抖動(dòng)毛刺。對(duì)于一個(gè)按鍵信號(hào),可以用一個(gè)脈沖對(duì)他進(jìn)行取樣,如果連續(xù)三次取樣為低電平,可以認(rèn)為信號(hào)已經(jīng)處于鍵穩(wěn)定狀態(tài),這時(shí)輸出一個(gè)低電平按鍵信號(hào)。繼續(xù)取樣的過(guò)程中如果不能滿(mǎn)足連續(xù)三次取樣為低,則認(rèn)為鍵穩(wěn)定狀態(tài)結(jié)束,這時(shí)輸出變?yōu)楦唠娖?。一通道的消抖電路原理圖如下:四、實(shí)驗(yàn)步驟1

33、、啟動(dòng)Quarters II建立一個(gè)空白工程,命名為key_debounce.qpf。2、將上圖所示消抖電路用Verilog HDL語(yǔ)言描述出來(lái),并拓展多個(gè)通道。新建Verilog HDL源程序文件debounce.v,輸入程序代碼并保存,進(jìn)行綜合編譯,若在編譯中發(fā)現(xiàn)錯(cuò)誤,則找出并更正錯(cuò)誤,直至編譯成功為止。3、從設(shè)計(jì)文件中創(chuàng)建模塊,由debounce.v生成名為debounce.bsf的模塊符號(hào)文件。4、將光盤(pán)中EDA_Component目錄下的int_div.bsf和int_div.v拷貝到工程目錄。5、添加4位計(jì)數(shù)器兆功能模塊。6、新建圖形設(shè)計(jì)文件命名為key_debounce.bdf并

34、保存。在空白處雙擊鼠標(biāo)左鍵,分別將symbol對(duì)話(huà)框中l(wèi)ibraries:project下的counter、debounce、decl7s和int_div模塊放在圖形文件debounce.bsf中,在symbol對(duì)話(huà)框中Name:輸入gnd,添加gnd符號(hào),輸入and2,添加與門(mén)。加入輸入、輸出引腳,雙擊各管腳符號(hào),進(jìn)行管腳命名。雙擊int_div的參數(shù)框,并修改參數(shù),將F_DIV的值改為240000,F(xiàn)_DIV_WIDTH的值改為18。完整的頂層模塊原理圖如下圖所示。7、選擇目標(biāo)器件并進(jìn)行引腳鎖定。將未使用的管腳設(shè)置為三態(tài)輸入。8、將key_debounce.bdf設(shè)置為頂層實(shí)體。對(duì)該工程文

35、件進(jìn)行全程編譯處理。若在編譯過(guò)程中發(fā)現(xiàn)錯(cuò)誤,則找出并更正錯(cuò)誤,直到編譯成功為止。9、將產(chǎn)生的key_debounce.sof輸出對(duì)FPGA進(jìn)行配置。分別連續(xù)按KEY1或KEY2觀察數(shù)碼管顯示狀態(tài),看數(shù)值是否連續(xù)遞增,比較前后兩次操作有何不同。五、實(shí)驗(yàn)程序module debounce(clk,key_in,key_out);/按鍵消抖模塊input clk;/系統(tǒng)時(shí)鐘輸入inputKEY_WIDTH-1:0 key_in;/外部按鍵輸入outputKEY_WIDTH-1:0key_out;/按鍵消抖輸出regKEY_WIDTH-1:0dout1,dout2,dout3;/寄存器paramete

36、r KEY_WIDTH = 8;/參數(shù)assign key_out = (dout1 | dout2 | dout3);/按鍵消抖輸出always (posedge clk)begindout1 <= key_in;dout2 <= dout1;dout3 <= dout2;endendmodule六、思考題比較下面兩段程序的異同,并畫(huà)出電路結(jié)構(gòu)圖。always ( posedge clk)begin dout1<=key_in; /非阻塞賦值 dout2<=dout1; dout3<=dout2;endalways ( posedge clk)begin

37、dout1<=key_in; /阻塞賦值 dout2<=dout1; dout3<=dout2;end實(shí)驗(yàn)七 硬件電子琴實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)利用蜂鳴器和按鍵設(shè)計(jì)硬件電子琴。二、實(shí)驗(yàn)內(nèi)容在SmartSOPC實(shí)驗(yàn)箱上實(shí)現(xiàn)一個(gè)簡(jiǎn)易電子琴。按下KEY1KEY7分別表示中音DO、RE、MI、FA、SOL、LA、SI;按住KEY8再按KEY1KEY7分別表示高音的DO、RE、MI、FA、SOL、LA、SI。三、實(shí)驗(yàn)原理樂(lè)曲演奏的原理是:由于組成樂(lè)曲的每個(gè)音符的頻率值(音調(diào))及其持續(xù)時(shí)間(音長(zhǎng))是樂(lè)曲演奏的2個(gè)基本數(shù)據(jù),因此需要控制輸出到揚(yáng)聲器的激勵(lì)信號(hào)的頻率高低和該頻率信號(hào)持續(xù)的時(shí)間。頻

38、率的高低決定了音調(diào)的高低,而樂(lè)曲的簡(jiǎn)譜與各音名的頻率之間也有固定的對(duì)應(yīng)關(guān)系。所有不同頻率的信號(hào)都是從同一基準(zhǔn)頻率分頻而得來(lái)的,由于音階頻率多為非整數(shù),而分頻系數(shù)又不能為小數(shù),故必須將計(jì)算的到的分頻數(shù)進(jìn)行四舍五入取整,基準(zhǔn)頻率和分頻系數(shù)應(yīng)綜合考慮加以選擇,從而保證音樂(lè)不會(huì)走調(diào)。如在48MHz時(shí)鐘下,中音1(對(duì)應(yīng)的頻率值為523.3Hz)的分頻系數(shù)應(yīng)該為:48000000/(2*523.3)=0xb327,這樣只需對(duì)系統(tǒng)時(shí)鐘進(jìn)行45863次分頻即可得到所要的中音1。至于其他音符,同樣可求出對(duì)應(yīng)的分頻系數(shù),這樣利用程序可以很輕松地得到對(duì)應(yīng)的樂(lè)聲。四、實(shí)驗(yàn)步驟1、在Quarters II中建立一個(gè)工程

39、項(xiàng)目文件beep1.qpf。并在該項(xiàng)目下新建Verilog HDL源程序文件beep1.v,輸入程序代碼并保存,進(jìn)行綜合編譯,若在編譯中發(fā)現(xiàn)錯(cuò)誤,則找出并更正錯(cuò)誤,直至編譯成功為止。2、選擇目標(biāo)器件并進(jìn)行引腳鎖定。將未使用的管腳設(shè)置為三態(tài)輸入。3、對(duì)該工程文件進(jìn)行全程編譯處理。若在編譯過(guò)程中發(fā)現(xiàn)錯(cuò)誤,則找出并更正錯(cuò)誤,直到編譯成功為止。4、將產(chǎn)生的beep1.sof輸出對(duì)FPGA進(jìn)行配置。按下按鍵KEY1KEY8就可以開(kāi)始使用電子琴來(lái)演奏音樂(lè)了。五、實(shí)驗(yàn)程序module beep1(clk,key,beep,led);/模塊名稱(chēng)beep1input clk;/系統(tǒng)時(shí)鐘48MHzinput7:0

40、key;/按鍵輸入output beep;/蜂鳴器輸出端output7:0led;/LED輸出reg beep_r;/寄存器reg15:0count,count_end;reg7:0key_r;always(posedge clk)begincount <= count + 1'b1;/計(jì)數(shù)器加1if(count = count_end)&(!(count_end = 16'hffff)begincount <= 16'h0;/計(jì)數(shù)器清零beep_r <= !beep_r;/取反輸出信號(hào)endendalways (key)beginkey_r

41、= key;/取鍵值case(key_r)8'b11111110:count_end = 16'hb327;/中音1的分頻系數(shù)值8'b11111101:count_end = 16'h9fa0;/中音2的分頻系數(shù)值8'b11111011:count_end = 16'h8e32;/中音3的分頻系數(shù)值8'b11110111:count_end = 16'h8637;/中音4的分頻系數(shù)值8'b11101111:count_end = 16'h7794;/中音5的分頻系數(shù)值8'b11011111:count_en

42、d = 16'h6a88;/中音6的分頻系數(shù)值8'b10111111:count_end = 16'h5ee8;/中音7的分頻系數(shù)值8'b01111110:count_end = 16'h59ab;/高音1的分頻系數(shù)值8'b01111101:count_end = 16'h4fce;/高音2的分頻系數(shù)值8'b01111011:count_end = 16'h471a;/高音3的分頻系數(shù)值8'b01110111:count_end = 16'h431c;/高音4的分頻系數(shù)值8'b01101111:co

43、unt_end = 16'h3bca;/高音5的分頻系數(shù)值8'b01011111:count_end = 16'h3544;/高音6的分頻系數(shù)值8'b00111111:count_end = 16'h2f74;/高音7的分頻系數(shù)值default:count_end = 16'hffff;endcaseendassign beep =beep_r;/輸出音樂(lè)assign led =key_r;/輸出按鍵狀態(tài)endmodule六、思考題舉例說(shuō)明產(chǎn)生不同音符的原理。實(shí)驗(yàn)八 數(shù)字時(shí)鐘設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)數(shù)字時(shí)鐘的硬件設(shè)計(jì)。二、實(shí)驗(yàn)內(nèi)容在SmartSOPC

44、實(shí)驗(yàn)箱上完成一個(gè)可以計(jì)時(shí)的數(shù)字時(shí)鐘,其顯示時(shí)間范圍是00:00:0023:59:59,,且該時(shí)鐘具有暫停計(jì)時(shí)和清零等功能。三、實(shí)驗(yàn)原理一個(gè)完整的時(shí)鐘應(yīng)由3部分組成:秒脈沖發(fā)生電路、計(jì)數(shù)顯示部分和時(shí)鐘調(diào)整部分。一個(gè)時(shí)鐘的準(zhǔn)確與否主要取決于秒脈沖的精確度。為了保證時(shí)鐘計(jì)時(shí)準(zhǔn)確我們對(duì)系統(tǒng)時(shí)鐘48MHz進(jìn)行了48000000分頻,從而得到1Hz的秒脈沖。至于顯示部分與LED數(shù)碼管原理相同,而校時(shí)電路用戶(hù)可以自由發(fā)揮,如定義3個(gè)按鍵keystart、keymon和keyadd,分別用于控制時(shí)鐘的計(jì)時(shí)開(kāi)始、調(diào)整功能選擇和加1處理,從而完成對(duì)現(xiàn)在時(shí)間的調(diào)整。本實(shí)驗(yàn)的校時(shí)電路在此僅僅完成了暫停、清零等基本功能

45、。四、實(shí)驗(yàn)步驟1、在Quarters II中建立一個(gè)工程項(xiàng)目文件clock.qpf。并在該項(xiàng)目下新建Verilog HDL源程序文件clock.v,輸入程序代碼并保存,進(jìn)行綜合編譯,若在編譯中發(fā)現(xiàn)錯(cuò)誤,則找出并更正錯(cuò)誤,直至編譯成功為止。2、選擇目標(biāo)器件并進(jìn)行引腳鎖定。將未使用的管腳設(shè)置為三態(tài)輸入。3、對(duì)該工程文件進(jìn)行全程編譯處理。若在編譯過(guò)程中發(fā)現(xiàn)錯(cuò)誤,則找出并更正錯(cuò)誤,直到編譯成功為止。4、將產(chǎn)生的clock.sof輸出對(duì)FPGA進(jìn)行配置。觀察數(shù)碼管的顯示狀態(tài)。按下按鍵KEY1、KEY2觀察數(shù)字鐘上的時(shí)間有什么變化。五、實(shí)驗(yàn)程序module clock(clk,key,dig,seg);/

46、模塊名clockinput clk;/輸入時(shí)鐘input1:0 key;/輸入按鍵output7:0dig;/數(shù)碼管選擇輸出引腳output7:0 seg;/數(shù)碼管段輸出引腳reg7:0 seg_r;/定義數(shù)碼管輸出寄存器reg7:0 dig_r;/定義數(shù)碼管選擇輸出寄存器reg3:0 disp_dat;/定義顯示數(shù)據(jù)寄存器reg24:0count;/定義計(jì)數(shù)寄存器reg23:0hour;/定義現(xiàn)在時(shí)刻寄存器reg sec,keyen;/定義標(biāo)志位reg1:0dout1,dout2,dout3;/寄存器wire1:0key_done;/按鍵消抖輸出assign dig = dig_r;/輸出數(shù)

47、碼管選擇assign seg = seg_r;/輸出數(shù)碼管譯碼結(jié)果/秒信號(hào)產(chǎn)生部分always (posedge clk) /定義clock上升沿觸發(fā)begincount = count + 1'b1;if(count = 25'd24000000)/0.5S到了嗎?begincount = 25'd0;/計(jì)數(shù)器清零sec = sec;/置位秒標(biāo)志endend/按鍵消抖處理部分assign key_done = (dout1 | dout2 | dout3);/按鍵消抖輸出always (posedge count17)begindout1 <= key;dout

48、2 <= dout1;dout3 <= dout2;endalways (negedge key_done0)beginkeyen = keyen;/將琴鍵開(kāi)關(guān)轉(zhuǎn)換為乒乓開(kāi)關(guān)end/數(shù)碼管動(dòng)態(tài)掃描顯示部分always (posedge clk) /count17:15大約1ms改變一次begincase(count17:15)/選擇掃描顯示數(shù)據(jù)3'd0:disp_dat = hour3:0;/秒個(gè)位3'd1:disp_dat = hour7:4;/秒十位3'd2:disp_dat = 4'ha;/顯示"-"3'd3:disp_dat = hour11:8;/分個(gè)位3'd4:disp_dat = hour15:12; /分十位3'd5:disp_dat = 4'ha;/顯示"-"3'd6:disp_dat

溫馨提示

  • 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)論