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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

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

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

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

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

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

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

14、kHz ,M=25000輸出頻率3kHz ,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ù)碼管顯示通過(guò)頻率控制字的大小換算頻率,控制數(shù)碼管的顯示五、遇到問(wèn)題的解決方法 1、這個(gè)問(wèn)題著實(shí)困擾了我們很長(zhǎng)時(shí)間,之前學(xué)習(xí)過(guò)C+,微機(jī)匯編等語(yǔ)言,對(duì)一些簡(jiǎn)單的問(wèn)題進(jìn)行編程。突然接觸一門(mén)新的語(yǔ)言,對(duì)我們來(lái)說(shuō)比較陌生甚至讓人很不適應(yīng),尤為特殊的是Verilog HDL

15、主要為了實(shí)現(xiàn)硬件功能,和上述其他語(yǔ)言還是有很大的不同。加之本學(xué)期完成數(shù)電實(shí)驗(yàn)主要用VHDL語(yǔ)言,因此十分陌生。在花了數(shù)天時(shí)間看其語(yǔ)法后,發(fā)現(xiàn)還是與通用語(yǔ)言有許多共通之處的,只不過(guò)是表示方法不同而已,只要注意語(yǔ)言之間語(yǔ)法別串用,設(shè)計(jì)思路還是大體相同,我們需要寫(xiě)好正確并編譯無(wú)誤的程序并分配合適的管腳,實(shí)現(xiàn)功能還是相對(duì)簡(jiǎn)單的??偟膩?lái)說(shuō),在初步入門(mén)之后,我們才發(fā)現(xiàn)Verilog HDL的易讀性和通用性有多強(qiáng)。 2、正弦波的波形剛開(kāi)始不是很正確,原因是采樣時(shí)取值只用了正半周的數(shù)據(jù)。解決方法:重新計(jì)算采樣值,改變程序里面的采樣值 3、我們?cè)陂_(kāi)始設(shè)計(jì)前瀏覽了一定的相關(guān)書(shū)籍,學(xué)習(xí)硬件描述預(yù)言,查閱開(kāi)發(fā)板的數(shù)據(jù)

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

17、一部分的波形不穩(wěn)定,出現(xiàn)了誤差,甚至有時(shí)候調(diào)不出來(lái)波形,與杜邦線,示波器以及針腳,芯片都有一定的關(guān)系 7、頻率計(jì)算出錯(cuò),調(diào)試程序后發(fā)現(xiàn)步進(jìn)值達(dá)不到要求,檢查后發(fā)現(xiàn)頻率控制字值設(shè)置錯(cuò)誤。六、結(jié)論與心得對(duì)于我們來(lái)說(shuō),課程設(shè)計(jì)是一次學(xué)習(xí)的機(jī)會(huì)。因?yàn)榭倳?huì)遇到一些自己從來(lái)沒(méi)有遇到的問(wèn)題,鍛煉了自己解決問(wèn)題的能力,也學(xué)會(huì)了與人合作。這次課設(shè)讓我加深了對(duì)verilog語(yǔ)言的理解,因?yàn)檎莆詹皇炀?,常?huì)犯一些低級(jí)錯(cuò)誤,在做的過(guò)程中,理解,并運(yùn)用到實(shí)際中,真的提升了自己的能力。當(dāng)調(diào)試出錯(cuò)時(shí),我們認(rèn)真分析問(wèn)題,并請(qǐng)教老師和同學(xué),找到問(wèn)題,并解決。做設(shè)計(jì)是個(gè)綜合的工程,需要從整體把握,將復(fù)雜逐漸變?yōu)楹?jiǎn)單,做到最后,我

18、們發(fā)現(xiàn)一開(kāi)始的困難都不算什么了,因?yàn)槲覀兏畹睦斫饬嗽O(shè)計(jì)概念和方法。本設(shè)計(jì)實(shí)現(xiàn)了可以輸出三種波形發(fā)生器,結(jié)果證明,頻率可以改變,并且可以通過(guò)數(shù)碼管顯示,所以該設(shè)計(jì)正確有效。本系統(tǒng)仍然有著很多可改進(jìn)的地方,比如可以拓展為輸出幅值可調(diào)的波形,或者輸出任意波形以更貼近實(shí)際情況;采樣點(diǎn)數(shù)可以進(jìn)一步提高,提高波形的準(zhǔn)確度。在以后的學(xué)習(xí)中,我們會(huì)更加認(rèn)真,用心。把知識(shí)靈活運(yùn)用。真正做到設(shè)計(jì)。7、 參考文獻(xiàn)1 張永瑞 等著. 電子測(cè)量技術(shù)基礎(chǔ). 西安:西安電子科技大學(xué)出版社. 2004. 1-152 林占江,林放 著. 電子測(cè)量?jī)x器原理與使用. 北京:電子工業(yè)出版社. 2006. 1-213 張學(xué)峰,胡長(zhǎng)江

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

20、tput6:0 a2;output6:0 a3;output6:0 a4;reg31:0 cnt;always (posedge clk )if(cnt < 32'd49_999_999) cnt <= cnt+1'b1;else cnt <= 32'd0;assign a1 = 7'b1001111;assign a2 = 7'b0000100;assign a3 = (cnt <= 32'd24_999_999) ? 7'b0001111:7'b0000000;assign a4 = (cnt <

21、= 32'd24_999_999) ? 7'b0000100:7'b0000000;Endmodule2、 波形發(fā)生器module verilog_iicps2(clk,rst_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; /時(shí)鐘50MHzinput rst_n; /復(fù)位信號(hào)input ps2k_clk; /ps2接口時(shí)鐘信號(hào) input p

22、s2k_data; /ps2數(shù)據(jù)信號(hào)output 7:0 ps2_byte; /1byte數(shù)值,按鍵掃描output 7:0 ps2_byte1;output ps2_state; /鍵盤(pán)當(dāng)前狀態(tài)ps2_state=1表示當(dāng)前有鍵被按下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_c

23、lk_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: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

24、: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 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:

25、0 count_pl;reg 19:0 fb_pl;reg 19:0 sin_pl;reg g_clk;wire neg_ps2k_clk; /ps2k_clk下降沿標(biāo)志位always (posedge clk or negedge rst_n)begin if(!rst_n) begin ps2k_clk_r0 <=1'b0; ps2k_clk_r1 <=1'b0; ps2k_clk_r2 <=1'b0; end else begin ps2k_clk_r0 <=ps2k_clk; ps2k_clk_r1 <=ps2k_clk_r0; p

26、s2k_clk_r2 <=ps2k_clk_r1; endendassign neg_ps2k_clk=ps2k_clk_r1 & ps2k_clk_r2; /檢測(cè)下降沿1有效reg7:0 ps2_byte_r; /pc接收ps2一個(gè)字節(jié)數(shù)據(jù)存儲(chǔ)器reg7:0 temp_data; /當(dāng)前接收數(shù)據(jù)寄存器reg3:0 num; /計(jì)數(shù)寄存器always (posedge clk or negedge rst_n)begin if(!rst_n) begin num<=4'd0; temp_data<=8'd0; end else if(neg_ps2k_

27、clk)begin /檢測(cè)到下降沿 case (num) 4'd0: num<=num+1'b1; /起始位不采樣 4'd1: begin num<=num+1'b1; temp_data0=ps2k_data; /bit0 end 4'd2: begin num<=num+1'b1; temp_data1=ps2k_data; /bit1 end 4'd3: begin num<=num+1'b1; temp_data2=ps2k_data; /. end 4'd4: begin num<=

28、num+1'b1; temp_data3=ps2k_data; end 4'd5: begin num<=num+1'b1; temp_data4=ps2k_data; end 4'd6: begin num<=num+1'b1; temp_data5=ps2k_data; end 4'd7: begin num<=num+1'b1; temp_data6=ps2k_data; /bit6 end 4'd8: begin num<=num+1'b1; temp_data7=ps2k_data; /b

29、it7 end 4'd9: begin num<=num+1'b1; /奇偶校驗(yàn)不處理 end 4'd10:begin num<=4'd0; /結(jié)束位num清零end default: ; /應(yīng)答位不處理 endcase endendreg key_f0; /松鍵標(biāo)志位,置1表示接收到數(shù)據(jù)8'hf0,再接收到下一個(gè)數(shù)據(jù)后清零?reg ps2_state_r; /鍵盤(pán)當(dāng)前狀態(tài),ps2_state_r=1表示有鍵被按下/reg flag=0;always (posedge clk or negedge rst_n) begin /接收數(shù)據(jù)的相應(yīng)處

30、理,這里只對(duì)1byte的鍵值進(jìn)行處理 if(!rst_n)begin key_f0 <= 1'b0; ps2_state_r <= 1'b0; end else if(num=4'd10) begin /剛傳送完一個(gè)字節(jié)數(shù)據(jù) if(temp_data=8'hf0)key_f0<=1'b1; else begin if(!key_f0)begin /說(shuō)明有鍵按下 ps2_state_r<=1'b1; ps2_byte_r<=temp_data; /鎖存當(dāng)前鍵值 / if(flag) transport <=tem

31、p_data; / flag<=flag+1'b1; end else begin ps2_state_r<=1'b0; key_f0<=1'b0; end end 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ù)的相應(yīng)ASCII碼 reg7:0 ps2_asci1; reg count; always (ps2_byte_r) begin coun

32、t<=count+1; / if(count=1)begin case (ps2_byte_r)/鍵值轉(zhuǎn)換為ASCII碼,這里做的比較簡(jiǎn)單8'h45: ps2_asci <= zero;8'h16: ps2_asci <= one;8'h1E: ps2_asci <= two;8'h26: ps2_asci <= three;8'h25: ps2_asci <= four;8'h2E: ps2_asci <= five;8'h36: ps2_asci <= six;8'h3D: ps

33、2_asci <= seven;8'h3E: ps2_asci <= eight;8'h46: ps2_asci <= nine; default: ps2_asci <= nothing;endcase/end/else ps2_asci <= nothing;endalways (posedge ps2_state_r) begin if(ps2_state_r=1)begin case (transport)/鍵值轉(zhuǎn)換為ASCII碼,這里做的比較簡(jiǎn)單8'h45: ps2_asci1 <= zero;8'h16: ps2_

34、asci1 <= one;8'h1E: ps2_asci1 <= two;8'h26: ps2_asci1 <= three;8'h25: ps2_asci1 <= four;8'h2E: ps2_asci1 <= five;8'h36: ps2_asci1 <= six;8'h3D: ps2_asci1 <= seven;8'h3E: ps2_asci1 <= eight;8'h46: ps2_asci1 <= nine; default:ps2_asci1 <= no

35、thing; endcase end else ps2_asci1 <= nothing;endassign ps2_byte = ps2_asci; assign ps2_byte1 = ps2_asci1 ;assign ps2_state = ps2_state_r;parameter zero = 8'b1100_0000, one = 8'b1111_1001, two = 8'b1010_0100, three = 8'b1011_0000, four = 8'b1001_1001, five = 8'b1001_0010, s

36、ix = 8'b1000_0010, seven = 8'b1111_1000, eight = 8'b1000_0000, nine = 8'b1001_0000, nothing = 8'b1111_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

37、<=cnt+1; case(cnt) 8'd01:count_pl<=20'd50000; 8'd02:count_pl<=20'd25000; 8'd03:count_pl<=20'd16666; 8'd04:count_pl<=20'd12500; 8'd05:count_pl<=20'd10000; 8'd06:count_pl<=20'd08333; 8'd07:count_pl<=20'd07142; 8'd08:co

38、unt_pl<=20'd06250; 8'd09:count_pl<=20'd05555; 8'd10:count_pl<=20'd05000; 8'd11:begin fb_pl<=20'd50000; count_pl<=1'b0; end 8'd12:begin fb_pl<=20'd25000; count_pl<=1'b0; end 8'd13:begin fb_pl<=20'd16666; count_pl<=1'b0

39、; end 8'd14:begin fb_pl<=20'd12500; count_pl<=1'b0; end 8'd15:begin fb_pl<=20'd10000; count_pl<=1'b0; end 8'd16:begin fb_pl<=20'd08333; count_pl<=1'b0; end 8'd17:begin fb_pl<=20'd07142; count_pl<=1'b0; end 8'd18:begin fb_pl&

40、lt;=20'd06250; count_pl<=1'b0; end 8'd19:begin fb_pl<=20'd05555; count_pl<=1'b0; end 8'd20:begin fb_pl<=20'd05000; count_pl<=1'b0; end 8'd21:begin sin_pl<=20'd50000; count_pl<=1'b0; end 8'd22:begin sin_pl<=20'd25000; count_p

41、l<=1'b0; end 8'd23:begin sin_pl<=20'd16666; count_pl<=1'b0; end 8'd24:begin sin_pl<=20'd12500; count_pl<=1'b0; end 8'd25:begin sin_pl<=20'd10000; count_pl<=1'b0; end 8'd26:begin sin_pl<=20'd08333; count_pl<=1'b0; end 8

42、9;d27:begin sin_pl<=20'd07142; count_pl<=1'b0; end 8'd28:begin sin_pl<=20'd06250; count_pl<=1'b0; end 8'd29:begin sin_pl<=20'd05555; count_pl<=1'b0; end 8'd30:begin sin_pl<=20'd05000; count_pl<=1'b0; end endcase endalways ( posedge

43、clk) /sanjiaobobeginif ( count1=count_pl ) begin count_jc<=count1; count1<=0; count_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<=co

44、unt1_fb; count1_fb<=0; count_datafb<=count_datafb+1; if(count_datafb<=255) begindata_fb<=8'd255;endelse begin data_fb<=8'd0; end endelse count1_fb<=count1_fb+1; endalways ( posedge clk)beginif ( count3=25000000 ) begin plxs_clk<=plxs_clk; count3<=0; endelse count3<

45、=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 count5<=count5+1; led_out2<=sin_clk;endalways (posedge sin_clk) begin /sin case(count_4)8'd001:data_sin<= 8'd128;

46、 8'd002:data_sin<= 8'd134 ;8'd003:data_sin<= 8'd140 ;8'd004:data_sin<= 8'd146 ;8'd005:data_sin<= 8'd152 ;8'd006:data_sin<= 8'd158 ;8'd007:data_sin<=8'd165 ;8'd008:data_sin<=8'd170 ;8'd009:data_sin<=8'd176 ;8'

47、d010:data_sin<=8'd182 ;8'd011:data_sin<=8'd188 ;8'd012:data_sin<=8'd193 ;8'd013:data_sin<=8'd198 ;8'd014:data_sin<=8'd203 ;8'd015:data_sin<=8'd208 ;8'd016:data_sin<=8'd213 ;8'd017:data_sin<=8'd218 ;8'd018:data_si

48、n<=8'd222 ;8'd019:data_sin<=8'd226 ;8'd020:data_sin<=8'd230 ;8'd021:data_sin<=8'd234 ;8'd022:data_sin<=8'd237 ;8'd023:data_sin<=8'd240 ;8'd024:data_sin<=8'd243 ;8'd025:data_sin<=8'd245 ;8'd026:data_sin<=8'

49、d248 ;8'd027:data_sin<=8'd250 ;8'd028:data_sin<=8'd251 ;8'd029:data_sin<=8'd253 ;8'd030:data_sin<=8'd254 ;8'd031:data_sin<=8'd254 ;8'd032:data_sin<=8'd255 ;8'd033:data_sin<=8'd255 ;8'd034:data_sin<=8'd255 ;8'

50、d035:data_sin<=8'd254 ;8'd036:data_sin<=8'd254 ;8'd037:data_sin<=8'd253 ;8'd038:data_sin<=8'd251 ;8'd039:data_sin<=8'd250 ;8'd040:data_sin<=8'd248 ;8'd041:data_sin<=8'd245 ;8'd042:data_sin<=8'd243 ;8'd043:data_sin<=8'd240 ;8'd044:data_sin<=8'd237 ;8'd045:data_sin<=8'd234 ;8'd046:data_sin<=8'd230 ;8'd047:data_sin<=8'

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論