FPGA的波形發(fā)生器_第1頁
FPGA的波形發(fā)生器_第2頁
FPGA的波形發(fā)生器_第3頁
FPGA的波形發(fā)生器_第4頁
FPGA的波形發(fā)生器_第5頁
已閱讀5頁,還剩26頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 西北工業(yè)大學課 程 設 計 報 告題 目: 波形發(fā)生器 學 院: 電子信息學院 班 級: 08041202 學生(學號): 2012301995 學生(姓名): 張雨 日期: 2014 年 1月 20日 摘 要本設計基于FPGA開發(fā)板,利用硬件描述語言Verilog進行編程,通過DDS數(shù)字頻率合成實現(xiàn)頻率可調(diào)的正弦波、三角波、方波簡易發(fā)生器。本文所設計的內(nèi)容就是基于Altera公司的現(xiàn)場可編程門陣列(FPGA)實現(xiàn)數(shù)字信號發(fā)生器的設計,F(xiàn)PGA具有密度高,功耗低,體積小,可靠性高等特點,設計時可以不必過多考慮具體硬件連接;本設計中應用Verilog硬件描述語言進行描述,使該數(shù)字信號發(fā)生器可以

2、產(chǎn)生正弦波、方波、三角波、鋸齒波四個獨立的波形,并能對所產(chǎn)生的四種波形的頻率和進行調(diào)節(jié)。設計輸出頻率范圍是1kz10kHz步進是1KHZ,測量的結(jié)果在數(shù)碼管上顯示 。關鍵詞:FPGA Verilog PS2協(xié)議 IIC協(xié)議 PCF8591目 錄目錄課程設計目的4設計任務與要求4方案設計與論證5單元電路設計與參數(shù)計算11遇到問題的解決方法13結(jié)論與心得14參考文獻15附錄16題目:波形發(fā)生器一、 課程設計目的 1)鞏固和加深所學電子技術(shù)課程的基本知識, 提高綜合運用所學知識的能力;2)培養(yǎng)學生根據(jù)課題需要選用參考書、查閱手冊、圖表和文獻資料的能力,提高學生獨立解決工程實際問題的能力;3)通過設計

3、方案的分析比較、設計計算、元件選繹及電路安裝調(diào)試等環(huán)節(jié)初步掌握單實用電路的工程設計方法; 4)提高學生的動手能力掌握常用儀器設備的正確使用方法,學會對簡單實用電路的實驗調(diào)試和對整機指標的測試方法;5)了解與課題有關的電路以及元器件的工程技術(shù)規(guī)范,能按課程設計任務書的要求編寫設計說明書,能正確反映設計和實驗成果,能正確繪制電路圖等二、 設計任務與要求一) 任務: 利用Verilog HDL或VHDL硬件描述語言及FPGA開發(fā)板實現(xiàn)波形發(fā)生器和學號循環(huán)顯示。二) 設計要求: 1、顯示學號1) 采用數(shù)碼管顯示;2) 循環(huán)顯示2個人的學號后四位;2、根據(jù)按鍵輸出波形1)根據(jù)按鍵輸入不同,分別輸出正弦波

4、、方波、三角波(頻率=1KHz);2)根據(jù)按鍵改變頻率(頻率變化范圍:1KHz-10KHz,每次頻率變化1KHz);3)輸出頻率在數(shù)碼管上顯示三、 方案設計與論證1、 顯示學號:直接給數(shù)碼管賦值顯示學號,設計時鐘頻率,控制跳變。1)頻率部分:開發(fā)板的時鐘脈沖是50MHz,作為顯示脈沖頻率太高,因而首先進行分頻,分到肉眼可辨別的頻率;2)顯示計數(shù)部分:要求循環(huán)顯示兩人的學號后四位,當CP脈沖的上升沿到來的時候?qū)ζ溥M行計數(shù),直到cnt 32d49_999_9993 )數(shù)碼管顯示部分:對于2 )中的CP脈沖上升沿的計數(shù),前兩個數(shù)碼管顯示輸出19部分,后兩面數(shù)碼管當cnt = 32d24_999_99

5、9的時候顯示79,否則顯示88,即能實現(xiàn)學號后四位的循環(huán)顯示2、 根據(jù)按鍵輸出波形(一) 總體方案實現(xiàn)及系統(tǒng)框圖該設計以FPGA開發(fā)平臺為核心,將各波形的幅值相位量化數(shù)據(jù)存儲在ROM內(nèi),按照設定頻率,以相應頻率控制字k為步進,對相位進行累加,以累加相位值作為地址碼讀取存放在存儲器內(nèi)的波形數(shù)據(jù),經(jīng)DA轉(zhuǎn)換和幅度控制、濾波即可得到所需波形。波形發(fā)生器采取全數(shù)字化結(jié)構(gòu),用硬件描述語言Verilog設計實現(xiàn)其頻率可調(diào)可顯示。經(jīng)開發(fā)平臺的DA轉(zhuǎn)化和外加濾波整形處理波形數(shù)據(jù),理論上能夠?qū)崿F(xiàn)任意頻率的各種波形。DDS電路一般由參考時鐘、相位累加器、波形存儲器、D/A轉(zhuǎn)換器(DAC)和低通濾波器(LPF)組成

6、7。其結(jié)構(gòu)框圖如圖2.5所示。圖2.5 DDS基本結(jié)構(gòu)框圖其中,為參考時鐘頻率,為頻率控制字,為相位累加器位數(shù),為波形存儲器位數(shù),為波形存儲器的數(shù)據(jù)位字長和D/A轉(zhuǎn)換器位數(shù)。(二)直接數(shù)字頻率合成技術(shù)原理DDS系統(tǒng)中的參考時鐘通常由一個高穩(wěn)定度的晶體振蕩器來產(chǎn)生,用來作為整個系統(tǒng)各個組成部分的同步時鐘。頻率控制字(Frequency Control Word,F(xiàn)CW)實際上是二進制編碼的相位增量值,它作為相位累加器的輸入累加值。相位累加器由加法器和寄存器級聯(lián)構(gòu)成,它將寄存器的輸出反饋到加法器的輸入端實現(xiàn)累加的功能。在每一個時鐘脈沖,相位累加器把頻率字累加一次,累加器的輸出相應增加一個步長的相位

7、增量,由此可以看出,相位累加器的輸出數(shù)據(jù)實質(zhì)上是以為步長的線性遞增序列(在相位累加器產(chǎn)生溢出以前),它反映了合成信號的相位信息。相位累加器的輸出與波形存儲器的地址線相連,相當于對波形存儲器進行查表,這樣就可以把存儲在波形存儲器中的信號抽樣值(二進制編碼值)查出。在系統(tǒng)時鐘脈沖的作用下,相位累加器不停的累加,即不停的查表。波形存儲器的輸出數(shù)據(jù)送到D/A轉(zhuǎn)換器,D/A轉(zhuǎn)換器將數(shù)字量形式的波形幅度值轉(zhuǎn)換成所要求合成頻率的模擬量形式信號,從而將波形重新合成出來。若波形存儲器中存放的是正弦波幅度量化數(shù)據(jù),那么D/A轉(zhuǎn)換器的輸出是近似正弦波的階梯波,還需要后級的低通平滑濾波器進一步抑制不必要的雜波就可以得

8、到頻譜比較純凈的正弦波信號。圖2.6所示為DDS各個部分的輸出信號。由于受到字長的限制,相位累加器累加到一定值后,就會產(chǎn)生一次累加溢出,這樣波形存儲器的地址就會循環(huán)一次,輸出波形循環(huán)一周。相位累加器的溢出頻率即為合成信號的頻率??梢姡l率控制字K越大,相位累加器產(chǎn)生溢出的速度越快,輸出頻率也就越高。故改變頻率字(即相位增量),就可以改變相位累加器的溢出時間,在參考頻率不變的條件下就可以改變輸出信號的頻率。圖2.6 DDS各部分輸出波形DDS系統(tǒng)的優(yōu)點有很多,它的很多特性是其他頻率合成技術(shù)所沒有的,其中最主要的特性有以下三點:(1)DDS技術(shù)可以用于產(chǎn)生任意波形基于前面對DDS系統(tǒng)的基本結(jié)構(gòu)分析

9、,很容易理解,只要改變存儲在波形存儲器中的波形數(shù)據(jù),就可以改變輸出波形。所以對于任何周期性波形,只要滿足采樣定理,都可以利用DDS技術(shù)來實現(xiàn)。(2)DDS系統(tǒng)具有很高的頻率分辨率DDS系統(tǒng)輸出頻率的分辨率和頻點數(shù)隨相位累加器的位數(shù)成指數(shù)增長,由可知,在系統(tǒng)時鐘頻率不變的情況下,只要增大相位累加器的位數(shù),就可以得到幾乎是任意小的頻率分辨率,可以滿足精細頻率控制的要求。DDS如此精細的頻率分辨率,使其輸出頻率已十分逼近連續(xù)變化。(3)輸出頻率切換速度快且相位保持連續(xù)與鎖相頻率合成相比,由于DDS系統(tǒng)是一個開環(huán)系統(tǒng),所以當一個新的頻率控制字送到時,它會迅速合成這個新的頻率,實際的頻率切換時間可以達n

10、s級。同時,頻率切換時,DDS系統(tǒng)的輸出波形的相位是連續(xù)的。DDS系統(tǒng)的頻率字改變時,輸出波形的變化過程可以用圖2.12描述。圖2.12 頻率控制字改變時累加器的輸出值和輸出波形的變化(仿真)在波形輸出到點時,頻率字發(fā)生了改變(變小),相位累加器的累加值即相位步進變小,其輸出值斜率也變小,系統(tǒng)的輸出波形的頻率也在同時刻變小。DDS系統(tǒng)在頻率字發(fā)生改變后的一個時鐘周期,其輸出頻率就可以就轉(zhuǎn)換到了新的頻率上,也即在頻率字的值改變以后,累加器在經(jīng)過一個時鐘周期后就按照新的頻率字進行累加,開始合成新的頻率。所以我們可以認為DDS的頻率切換是在一個系統(tǒng)時鐘周期內(nèi)完成的,系統(tǒng)時鐘頻率越高,切換速度越快。另

11、外,從前面對DDS技術(shù)原理的分析可知,要改變輸出頻率,實際上改變的是頻率字,也就是相位增量。當頻率字的值從改變?yōu)橹?,相位累加器是在已有的累積相位上,再對進行累加,相位函數(shù)曲線是連續(xù)的。從圖2.12也可以看出,只是在頻率字改變的瞬間相位函數(shù)曲線的斜率發(fā)生了突變,相位值并沒有發(fā)生跳躍,因此DDS能夠在頻率切換的過程中保持相位連續(xù),輸出波形能夠平滑地從一個頻率過渡到另外一個頻率。(三) 1 總體設計模塊1 )按鍵控制模塊鍵盤的處理器如果發(fā)現(xiàn)有鍵被按下或釋放將發(fā)送掃描碼的信息包到計算機。掃描碼有兩種不同的類型:通碼和斷碼。當一個鍵被按下就發(fā)送通碼,當一個鍵被釋放就發(fā)送斷碼。每個按鍵被分配了唯一的通碼

12、和斷碼。2 )波形控制模塊(1)波形產(chǎn)生模塊 分別產(chǎn)生三角波,方波,正弦波三種波形,對三種波形在一個周期內(nèi)采取其中的255個樣點數(shù)據(jù),clock為系統(tǒng)時鐘信號(2)波形顯示模塊 IIC總線并行轉(zhuǎn)串行模塊,利用其D/A轉(zhuǎn)換模塊從而實現(xiàn)其產(chǎn)生的波形在示波器上顯示IIC通信中只涉及兩條信號線,時鐘線SCL和數(shù)據(jù)線SDA。時鐘線的下降沿鎖存數(shù)據(jù)。當SCL高電平時,把SDA從高電平拉倒低電平,則表示開始通信;反之,把SDA從低電平拉倒高電平,則表示通信結(jié)束。 D/A轉(zhuǎn)換模塊:利用8591器件實現(xiàn)數(shù)據(jù)D/A轉(zhuǎn)換,最終將波形顯示在波形顯示器上。其中要利用SCL,SDA,VCC,GND,D/A等主要接口,用F

13、PGA實現(xiàn)IIC總線,實現(xiàn)和PCF8591連接,并用8591進行D/A轉(zhuǎn)換,實現(xiàn)波行輸出。3)數(shù)碼管顯示部分:開發(fā)板的時鐘脈沖是50MHz,要求實現(xiàn)的是1KHz到10KHz以步長為1KHz進行變化,所以對50MHz進行10種分頻;要求對應顯示十個頻率,因而利用按鍵按下的次數(shù)進行模10計數(shù),每計一次數(shù),將對應頻率進行輸出顯示。四、單元電路設計與參數(shù)計算1、顯示學號時鐘脈沖為50MHZ,將其分為占空比為50%的頻率時鐘信號,得到的頻率為1HZ的時鐘信號作為學號顯示的頻率2、 根據(jù)按鍵輸出波形DDS輸出頻率關系式計算:輸出頻率1kHz ,M=50000輸出頻率2kHz ,M=25000輸出頻率3kH

14、z ,M=16666輸出頻率4kHz ,M=12500輸出頻率5kHz ,M=10000輸出頻率6kHz ,M=08333輸出頻率7kHz ,M=07142輸出頻率8kHz ,M=06250輸出頻率9kHz ,M=05555輸出頻率10kHz ,M=05000依次為三角波,方波,正玄波的頻率產(chǎn)生數(shù)碼管顯示通過頻率控制字的大小換算頻率,控制數(shù)碼管的顯示五、遇到問題的解決方法 1、這個問題著實困擾了我們很長時間,之前學習過C+,微機匯編等語言,對一些簡單的問題進行編程。突然接觸一門新的語言,對我們來說比較陌生甚至讓人很不適應,尤為特殊的是Verilog HDL主要為了實現(xiàn)硬件功能,和上述其他語言還

15、是有很大的不同。加之本學期完成數(shù)電實驗主要用VHDL語言,因此十分陌生。在花了數(shù)天時間看其語法后,發(fā)現(xiàn)還是與通用語言有許多共通之處的,只不過是表示方法不同而已,只要注意語言之間語法別串用,設計思路還是大體相同,我們需要寫好正確并編譯無誤的程序并分配合適的管腳,實現(xiàn)功能還是相對簡單的。總的來說,在初步入門之后,我們才發(fā)現(xiàn)Verilog HDL的易讀性和通用性有多強。 2、正弦波的波形剛開始不是很正確,原因是采樣時取值只用了正半周的數(shù)據(jù)。解決方法:重新計算采樣值,改變程序里面的采樣值 3、我們在開始設計前瀏覽了一定的相關書籍,學習硬件描述預言,查閱開發(fā)板的數(shù)據(jù)手冊,詳細了解開發(fā)板的模塊、功能。4、

16、對于題目的要求難以構(gòu)思,無從下手。開始設計時,對于整個程序的框架還很模糊,于是上網(wǎng)查閱了不少關于基于FPGA的波形發(fā)生器的實例,發(fā)現(xiàn)應用DDS技術(shù)可以很好的解決這一問題。查閱資料了解DDS的其基本原理后基于本次設計的要求提出了我們自己的方案。 5、 但是對于波形發(fā)生器所涉及的PS2協(xié)議和顯示部分所用到的IIC協(xié)議,我們無從下手,后來通過網(wǎng)上下載程序不斷的修改程序,終于調(diào)試出了三種波形,但還是未能實現(xiàn)通過按鍵不同來產(chǎn)生的不同通碼控制信號,從而來改變?nèi)N波形的輸出,最后只能設計出通過接不同的針腳從而來實現(xiàn)三種波形的轉(zhuǎn)換! 6、正弦波的波形顯示出現(xiàn)了錯誤,其中有一部分的波形不穩(wěn)定,出現(xiàn)了誤差,甚至有

17、時候調(diào)不出來波形,與杜邦線,示波器以及針腳,芯片都有一定的關系 7、頻率計算出錯,調(diào)試程序后發(fā)現(xiàn)步進值達不到要求,檢查后發(fā)現(xiàn)頻率控制字值設置錯誤。六、結(jié)論與心得對于我們來說,課程設計是一次學習的機會。因為總會遇到一些自己從來沒有遇到的問題,鍛煉了自己解決問題的能力,也學會了與人合作。這次課設讓我加深了對verilog語言的理解,因為掌握不熟練,常會犯一些低級錯誤,在做的過程中,理解,并運用到實際中,真的提升了自己的能力。當調(diào)試出錯時,我們認真分析問題,并請教老師和同學,找到問題,并解決。做設計是個綜合的工程,需要從整體把握,將復雜逐漸變?yōu)楹唵危龅阶詈?,我們發(fā)現(xiàn)一開始的困難都不算什么了,因為我

18、們更深的理解了設計概念和方法。本設計實現(xiàn)了可以輸出三種波形發(fā)生器,結(jié)果證明,頻率可以改變,并且可以通過數(shù)碼管顯示,所以該設計正確有效。本系統(tǒng)仍然有著很多可改進的地方,比如可以拓展為輸出幅值可調(diào)的波形,或者輸出任意波形以更貼近實際情況;采樣點數(shù)可以進一步提高,提高波形的準確度。在以后的學習中,我們會更加認真,用心。把知識靈活運用。真正做到設計。7、 參考文獻1 張永瑞 等著. 電子測量技術(shù)基礎. 西安:西安電子科技大學出版社. 2004. 1-152 林占江,林放 著. 電子測量儀器原理與使用. 北京:電子工業(yè)出版社. 2006. 1-213 張學峰,胡長江. 功能各異的各種任意波形發(fā)生器. 國

19、外電子測量技術(shù). 2000,4. 17-184 毛敏. 基于DDS的高精度方波信號發(fā)生器的研究. 西安電子科技大學工學碩士論文. 2006. 5-65 張有正 等著. 頻率合成技術(shù). 北京:人民郵電出版社. 1984. 1-336杜慧敏、趙全良著基于Verilog的FPGA設計基礎西安電子科技大學出版社7王金明VerilogHDL程序設計教程人民郵電出版社8PCF8591芯片手冊【9】DEO芯片手冊附錄:(各模塊程序代碼)1、顯示學號module abc_fp(clk,a1,a2,a3,a4);input clk;output6:0 a1;output6:0 a2;output6:0 a3;o

20、utput6:0 a4;reg31:0 cnt;always (posedge clk )if(cnt 32d49_999_999) cnt = cnt+1b1;else cnt = 32d0;assign a1 = 7b1001111;assign a2 = 7b0000100;assign a3 = (cnt = 32d24_999_999) ? 7b0001111:7b0000000;assign a4 = (cnt = 32d24_999_999) ? 7b0000100:7b0000000;Endmodule2、 波形發(fā)生器module verilog_iicps2(clk,rst_

21、n,ps2k_clk,ps2k_data,ps2_byte,ps2_byte1, ps2_state,led_out,led_out1,scl,sda,scl1,scl2,sda1,sda2,scpl,scpl_fb,scpl_sin,led_out2);input clk; /時鐘50MHzinput rst_n; /復位信號input ps2k_clk; /ps2接口時鐘信號 input ps2k_data; /ps2數(shù)據(jù)信號output 7:0 ps2_byte; /1byte數(shù)值,按鍵掃描output 7:0 ps2_byte1;output ps2_state; /鍵盤當前狀態(tài)ps2

22、_state=1表示當前有鍵被按下output led_out;output led_out1;output led_out2;output scl;output sda;output scl1;output sda1;output scl2;output sda2;output 7:0 scpl;output 7:0 scpl_fb;output 7:0 scpl_sin;reg ps2k_clk_r0,ps2k_clk_r1,ps2k_clk_r2; /ps2k_clk狀態(tài)寄存? reg 24:0 count2;reg 24:0 count1;reg 24:0 count3;reg 24:

23、0 count_4;reg 24:0 count5;reg 24:0 count1_fb;reg 24:0 count1_sin;reg div_clk;reg led_out;reg led_out1;reg led_out2;reg plxs_clk;reg sin_clk;reg7:0 numb;reg7:0 numb_fb;reg7:0 numb_sin;reg7:0 data;reg7:0 data_sin;reg7:0 data_fb;reg 8:0 count_data;reg 8:0 count_datafb;reg 8:0 count_datasin;reg scl;reg

24、scl1;reg scl2;reg sda;reg sda1;reg sda2;reg flag;reg 7:0 scpl;reg 7:0 scpl_fb;reg 7:0 scpl_sin;reg 19:0 count_jc;reg 19:0 count_jcfb;reg 19:0 count_jcsin;reg 7:0 cnt;reg 7:0 cnt1;reg 7:0 cnt2;reg 19:0 count_pl;reg 19:0 fb_pl;reg 19:0 sin_pl;reg g_clk;wire neg_ps2k_clk; /ps2k_clk下降沿標志位always (posedge

25、 clk or negedge rst_n)begin if(!rst_n) begin ps2k_clk_r0 =1b0; ps2k_clk_r1 =1b0; ps2k_clk_r2 =1b0; end else begin ps2k_clk_r0 =ps2k_clk; ps2k_clk_r1 =ps2k_clk_r0; ps2k_clk_r2 =ps2k_clk_r1; endendassign neg_ps2k_clk=ps2k_clk_r1 & ps2k_clk_r2; /檢測下降沿1有效reg7:0 ps2_byte_r; /pc接收ps2一個字節(jié)數(shù)據(jù)存儲器reg7:0 temp_d

26、ata; /當前接收數(shù)據(jù)寄存器reg3:0 num; /計數(shù)寄存器always (posedge clk or negedge rst_n)begin if(!rst_n) begin num=4d0; temp_data=8d0; end else if(neg_ps2k_clk)begin /檢測到下降沿 case (num) 4d0: num=num+1b1; /起始位不采樣 4d1: begin num=num+1b1; temp_data0=ps2k_data; /bit0 end 4d2: begin num=num+1b1; temp_data1=ps2k_data; /bit1

27、 end 4d3: begin num=num+1b1; temp_data2=ps2k_data; /. end 4d4: begin num=num+1b1; temp_data3=ps2k_data; end 4d5: begin num=num+1b1; temp_data4=ps2k_data; end 4d6: begin num=num+1b1; temp_data5=ps2k_data; end 4d7: begin num=num+1b1; temp_data6=ps2k_data; /bit6 end 4d8: begin num=num+1b1; temp_data7=p

28、s2k_data; /bit7 end 4d9: begin num=num+1b1; /奇偶校驗不處理 end 4d10:begin num=4d0; /結(jié)束位num清零end default: ; /應答位不處理 endcase endendreg key_f0; /松鍵標志位,置1表示接收到數(shù)據(jù)8hf0,再接收到下一個數(shù)據(jù)后清零?reg ps2_state_r; /鍵盤當前狀態(tài),ps2_state_r=1表示有鍵被按下/reg flag=0;always (posedge clk or negedge rst_n) begin /接收數(shù)據(jù)的相應處理,這里只對1byte的鍵值進行處理 if

29、(!rst_n)begin key_f0 = 1b0; ps2_state_r = 1b0; end else if(num=4d10) begin /剛傳送完一個字節(jié)數(shù)據(jù) if(temp_data=8hf0)key_f0=1b1; else begin if(!key_f0)begin /說明有鍵按下 ps2_state_r=1b1; ps2_byte_r=temp_data; /鎖存當前鍵值 / if(flag) transport =temp_data; / flag=flag+1b1; end else begin ps2_state_r=1b0; key_f0=1b0; end en

30、d end endalways (negedge ps2_state_r)begin if(ps2_state_r=0) transport =ps2_byte_r;endreg7:0 transport;reg7:0 ps2_asci; /接收數(shù)據(jù)的相應ASCII碼 reg7:0 ps2_asci1; reg count; always (ps2_byte_r) begin count=count+1; / if(count=1)begin case (ps2_byte_r)/鍵值轉(zhuǎn)換為ASCII碼,這里做的比較簡單8h45: ps2_asci = zero;8h16: ps2_asci =

31、 one;8h1E: ps2_asci = two;8h26: ps2_asci = three;8h25: ps2_asci = four;8h2E: ps2_asci = five;8h36: ps2_asci = six;8h3D: ps2_asci = seven;8h3E: ps2_asci = eight;8h46: ps2_asci = nine; default: ps2_asci = nothing;endcase/end/else ps2_asci = nothing;endalways (posedge ps2_state_r) begin if(ps2_state_r=

32、1)begin case (transport)/鍵值轉(zhuǎn)換為ASCII碼,這里做的比較簡單8h45: ps2_asci1 = zero;8h16: ps2_asci1 = one;8h1E: ps2_asci1 = two;8h26: ps2_asci1 = three;8h25: ps2_asci1 = four;8h2E: ps2_asci1 = five;8h36: ps2_asci1 = six;8h3D: ps2_asci1 = seven;8h3E: ps2_asci1 = eight;8h46: ps2_asci1 = nine; default:ps2_asci1 = noth

33、ing; endcase end else ps2_asci1 = nothing;endassign ps2_byte = ps2_asci; assign ps2_byte1 = ps2_asci1 ;assign ps2_state = ps2_state_r;parameter zero = 8b1100_0000, one = 8b1111_1001, two = 8b1010_0100, three = 8b1011_0000, four = 8b1001_1001, five = 8b1001_0010, six = 8b1000_0010, seven = 8b1111_100

34、0, eight = 8b1000_0000, nine = 8b1001_0000, nothing = 8b1111_1111;always ( posedge clk)beginif ( count2=500 ) begin div_clk=div_clk; count2=0; endelse count2=count2+1; led_out=div_clk;endalways (posedge ps2_state) begin cnt=cnt+1; case(cnt) 8d01:count_pl=20d50000; 8d02:count_pl=20d25000; 8d03:count_

35、pl=20d16666; 8d04:count_pl=20d12500; 8d05:count_pl=20d10000; 8d06:count_pl=20d08333; 8d07:count_pl=20d07142; 8d08:count_pl=20d06250; 8d09:count_pl=20d05555; 8d10:count_pl=20d05000; 8d11:begin fb_pl=20d50000; count_pl=1b0; end 8d12:begin fb_pl=20d25000; count_pl=1b0; end 8d13:begin fb_pl=20d16666; co

36、unt_pl=1b0; end 8d14:begin fb_pl=20d12500; count_pl=1b0; end 8d15:begin fb_pl=20d10000; count_pl=1b0; end 8d16:begin fb_pl=20d08333; count_pl=1b0; end 8d17:begin fb_pl=20d07142; count_pl=1b0; end 8d18:begin fb_pl=20d06250; count_pl=1b0; end 8d19:begin fb_pl=20d05555; count_pl=1b0; end 8d20:begin fb_

37、pl=20d05000; count_pl=1b0; end 8d21:begin sin_pl=20d50000; count_pl=1b0; end 8d22:begin sin_pl=20d25000; count_pl=1b0; end 8d23:begin sin_pl=20d16666; count_pl=1b0; end 8d24:begin sin_pl=20d12500; count_pl=1b0; end 8d25:begin sin_pl=20d10000; count_pl=1b0; end 8d26:begin sin_pl=20d08333; count_pl=1b

38、0; end 8d27:begin sin_pl=20d07142; count_pl=1b0; end 8d28:begin sin_pl=20d06250; count_pl=1b0; end 8d29:begin sin_pl=20d05555; count_pl=1b0; end 8d30:begin sin_pl=20d05000; count_pl=1b0; end endcase endalways ( posedge clk) /sanjiaobobeginif ( count1=count_pl ) begin count_jc=count1; count1=0; count

39、_data=count_data+1; if(count_data=255) begindata=data+1;endelse begin data=data-1; end endelse count1=count1+1;endalways ( posedge clk) /fangbobeginif ( count1_fb=fb_pl ) begin count_jcfb=count1_fb; count1_fb=0; count_datafb=count_datafb+1; if(count_datafb=255) begindata_fb=8d255;endelse begin data_

40、fb=8d0; end endelse count1_fb=count1_fb+1;endalways ( posedge clk)beginif ( count3=25000000 ) begin plxs_clk=plxs_clk; count3=0; endelse count3=count3+1; led_out1=plxs_clk;endalways ( posedge clk) /sin fenpinqibeginif ( count5=sin_pl ) begin count_jcsin=count5; sin_clk=sin_clk; count5=0; endelse cou

41、nt5=count5+1; led_out2=sin_clk;endalways (posedge sin_clk) begin /sin case(count_4)8d001:data_sin= 8d128; 8d002:data_sin= 8d134 ;8d003:data_sin= 8d140 ;8d004:data_sin= 8d146 ;8d005:data_sin= 8d152 ;8d006:data_sin= 8d158 ;8d007:data_sin=8d165 ;8d008:data_sin=8d170 ;8d009:data_sin=8d176 ;8d010:data_si

42、n=8d182 ;8d011:data_sin=8d188 ;8d012:data_sin=8d193 ;8d013:data_sin=8d198 ;8d014:data_sin=8d203 ;8d015:data_sin=8d208 ;8d016:data_sin=8d213 ;8d017:data_sin=8d218 ;8d018:data_sin=8d222 ;8d019:data_sin=8d226 ;8d020:data_sin=8d230 ;8d021:data_sin=8d234 ;8d022:data_sin=8d237 ;8d023:data_sin=8d240 ;8d024:data_sin=8d243 ;8d025:data_sin=8d245 ;8d026:data_sin=8d248 ;8d027:data_sin=8d250 ;8d028:data_sin=8d251 ;8d029:data_sin=8d253 ;8d030:data_sin=8d254 ;8d031:data_sin=8d254 ;8d032:data_sin=8d255 ;8d033:data_sin=8d255 ;8d034:data_sin=8d25

溫馨提示

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

評論

0/150

提交評論