版權(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 32d49_999_9993 )數(shù)碼管顯示部分:對(duì)于2 )中的CP脈沖上升沿的計(jì)數(shù),前兩個(gè)數(shù)碼管顯示輸出19部分,后兩面數(shù)碼管當(dāng)cnt = 32d24_999_99
5、9的時(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)換器(DAC)和低通濾波器(LPF)組成
6、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í)鐘脈沖,相位累加器把頻率字累加一次,累加器的輸出相應(yīng)增加一個(gè)步長(zhǎng)的相位
7、增量,由此可以看出,相位累加器的輸出數(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í)的低通平滑濾波器進(jìn)一步抑制不必要的雜波就可以得
8、到頻譜比較純凈的正弦波信號(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)生任意波形基于前面對(duì)DDS系統(tǒng)的基本結(jié)構(gòu)分析
9、,很容易理解,只要改變存儲(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ì)迅速合成這個(gè)新的頻率,實(shí)際的頻率切換時(shí)間可以達(dá)n
10、s級(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)完成的,系統(tǒng)時(shí)鐘頻率越高,切換速度越快。另
11、外,從前面對(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è)鍵被釋放就發(fā)送斷碼。每個(gè)按鍵被分配了唯一的通碼
12、和斷碼。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,VCC,GND,D/A等主要接口,用F
13、PGA實(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輸出頻率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ù)碼管顯示通過(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主要為了實(shí)現(xiàn)硬件功能,和上述其他語(yǔ)言還
15、是有很大的不同。加之本學(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ù)手冊(cè),詳細(xì)了解開(kāi)發(fā)板的模塊、功能。4、
16、對(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ò)誤,其中有一部分的波形不穩(wěn)定,出現(xiàn)了誤差,甚至有
17、時(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)單,做到最后,我們發(fā)現(xiàn)一開(kāi)始的困難都不算什么了,因?yàn)槲?/p>
18、們更深的理解了設(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)江. 功能各異的各種任意波形發(fā)生器. 國(guó)
19、外電子測(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王金明VerilogHDL程序設(shè)計(jì)教程人民郵電出版社8PCF8591芯片手冊(cè)【9】DEO芯片手冊(cè)附錄:(各模塊程序代碼)1、顯示學(xué)號(hào)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; /時(shí)鐘50MHzinput rst_n; /復(fù)位信號(hào)input ps2k_clk; /ps2接口時(shí)鐘信號(hào) input ps2k_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
22、_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_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下降沿標(biāo)志位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; /檢測(cè)下降沿1有效reg7:0 ps2_byte_r; /pc接收ps2一個(gè)字節(jié)數(shù)據(jù)存儲(chǔ)器reg7:0 temp_d
26、ata; /當(dāng)前接收數(shù)據(jù)寄存器reg3:0 num; /計(jì)數(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 /檢測(cè)到下降沿 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; /奇偶校驗(yàn)不處理 end 4d10:begin num=4d0; /結(jié)束位num清零end default: ; /應(yīng)答位不處理 endcase endendreg key_f0; /松鍵標(biāo)志位,置1表示接收到數(shù)據(jù)8hf0,再接收到下一個(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)處理,這里只對(duì)1byte的鍵值進(jìn)行處理 if
29、(!rst_n)begin key_f0 = 1b0; ps2_state_r = 1b0; end else if(num=4d10) begin /剛傳送完一個(gè)字節(jié)數(shù)據(jù) if(temp_data=8hf0)key_f0=1b1; else begin if(!key_f0)begin /說(shuō)明有鍵按下 ps2_state_r=1b1; ps2_byte_r=temp_data; /鎖存當(dāng)前鍵值 / 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ù)的相應(yīng)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碼,這里做的比較簡(jiǎn)單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碼,這里做的比較簡(jiǎn)單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. 本站所有資源如無(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2visio2024教程:圖形界面全探索
- 2024年教案革新:《上學(xué)歌》設(shè)計(jì)理念與實(shí)踐
- 《接觸網(wǎng)施工》課件 4.9.2 電連接線壓接
- 2024年教育革新:《生理學(xué)》電子教案在醫(yī)學(xué)教育中的應(yīng)用
- 2024年全新策劃:列夫·托爾斯泰的7個(gè)維度
- 《拿來(lái)主義》課堂實(shí)踐案例匯編2024
- 第45屆世賽全國(guó)選拔賽初步技術(shù)思路(烘焙項(xiàng)目)
- 2024年教育創(chuàng)新:《圓柱的認(rèn)識(shí)》課件實(shí)踐與探索
- 2024年物流行業(yè):《最佳路徑》課件提高貨車運(yùn)輸效率
- 靜音木門(mén)廠賬務(wù)處理-記賬實(shí)操
- 材料力學(xué)課程導(dǎo)學(xué)與考研指導(dǎo)
- 小學(xué)各年級(jí)小學(xué)一年級(jí)提高思維能力的方法主題班會(huì)
- 宣傳欄安裝施工方案
- 張曉風(fēng)散文自選集
- 膽囊息肉的護(hù)理查房
- 新課標(biāo)下小學(xué)生運(yùn)算能力的培養(yǎng)研究的開(kāi)題報(bào)告
- 餐飲行業(yè)初期投資預(yù)算分析
- 遼寧省重點(diǎn)高中沈陽(yáng)市郊聯(lián)體2023-2024學(xué)年高三上學(xué)期期中生物試題(解析版)
- 退費(fèi)申請(qǐng)表模板(直接打?。?/a>
- 剪映:手機(jī)短視頻制作-配套課件
- 西氣東輸二線25標(biāo)段山嶺隧道內(nèi)管道安裝技術(shù)
評(píng)論
0/150
提交評(píng)論