![[信息與通信]ga接口_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/16/bd54bc48-3b0b-4aab-a392-57372a95c738/bd54bc48-3b0b-4aab-a392-57372a95c7381.gif)
![[信息與通信]ga接口_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/16/bd54bc48-3b0b-4aab-a392-57372a95c738/bd54bc48-3b0b-4aab-a392-57372a95c7382.gif)
![[信息與通信]ga接口_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/16/bd54bc48-3b0b-4aab-a392-57372a95c738/bd54bc48-3b0b-4aab-a392-57372a95c7383.gif)
![[信息與通信]ga接口_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/16/bd54bc48-3b0b-4aab-a392-57372a95c738/bd54bc48-3b0b-4aab-a392-57372a95c7384.gif)
![[信息與通信]ga接口_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/16/bd54bc48-3b0b-4aab-a392-57372a95c738/bd54bc48-3b0b-4aab-a392-57372a95c7385.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.畢 業(yè) 設(shè) 計(jì)題 目 基于FPGA的VGA圖像顯示控制系統(tǒng)的設(shè)計(jì) 班 級(jí) 08應(yīng)用電子技術(shù) 姓 名 余琪 陳亮 邱淑萍 學(xué) 號(hào) 08353013 08353026 08353038 指導(dǎo)老師:張 龍 濱發(fā)題日期: 2010 年 2 月 完成日期: 2010 年 3 月 目 錄摘要:2一 設(shè)計(jì)目的2二 設(shè)計(jì)內(nèi)容2三 設(shè)計(jì)工具2四 實(shí)驗(yàn)原理34-1 PS/2通信協(xié)議34-2 PS/2設(shè)備到主機(jī)的通訊34-3 主機(jī)到PS/2設(shè)備的通訊44-4 PS/2鼠標(biāo)簡(jiǎn)介44-5 PS/2鼠標(biāo)位移數(shù)據(jù)包54-6 設(shè)計(jì)思想54-7 PS2_mouse_interface模塊的接口與控制5五設(shè)計(jì)步驟6六實(shí)驗(yàn)參考程
2、序66-1 PS2鼠標(biāo)接口設(shè)計(jì)頂層文件,文件名ps2_mouse_test.v76-2 Ps2鼠標(biāo)接口模塊,文件名ps2_mouse_inferface.v96-3 Ps2鼠標(biāo)坐標(biāo)位置計(jì)算模塊,文件名count.v186-4 鼠標(biāo)按鍵測(cè)試模塊,文件名Ps2mouse_test.v206-5 pll模塊,文件名Pll.v226-6 VGA-logic模塊,文件名VGA-logic.v26七M(jìn)agicSOPC開發(fā)平臺(tái)連接圖及30八參考資料34九畢業(yè)設(shè)計(jì)感想34摘要:颶風(fēng) (Cyclone)Altera公司FPGA系列知名品牌系列:Cyclone(颶風(fēng)):Altera中等規(guī)模FPGA,2003年推出
3、,0.13um工藝,1.5v內(nèi)核供電,與Stratix結(jié)構(gòu)類似,是一種低成本FPGA系列 ,是目前主流產(chǎn)品,其配置芯片也改用全新的產(chǎn)品。 CycloneII:Cyclone的下一代產(chǎn)品,2005年開始推出,90nm工藝,1.2v內(nèi)核供電,屬于低成本FPGA,性能和Cyclone相當(dāng),提供了硬件乘法器單元。 CycloneIII FPGA系列2007年推出,采用臺(tái)積電(TSMC)65nm低功耗(LP)工藝技術(shù)制造,以相當(dāng)于ASIC的價(jià)格實(shí)現(xiàn)了低功耗。Cyclone IV FPGA系列2009年推出,60nm工藝,面向?qū)Τ杀久舾械拇笈繎?yīng)用,幫助您滿足越來越大的帶寬需求,同時(shí)降低了成本。Cyclo
4、neV FPGA系列2011年推出,28nm工藝,實(shí)現(xiàn)了業(yè)界最低的系統(tǒng)成本和功耗,其性能水平使得該器件系列成為突出您大批量應(yīng)用優(yōu)勢(shì)的理想選擇。與前幾代產(chǎn)品相比,它具有高效的邏輯集成功能,提供集成收發(fā)器型號(hào),總功耗降低了40,靜態(tài)功耗降低了30.一設(shè)計(jì)目的 學(xué)習(xí)PS/2鼠標(biāo)接口的設(shè)計(jì)與應(yīng)用 熟悉ps/2傳輸協(xié)議 熟悉quartuss軟件的操作及流程 能夠運(yùn)用quartuss軟件的波形仿真圖分析二設(shè)計(jì)內(nèi)容本設(shè)計(jì)的內(nèi)容是學(xué)習(xí)PS/2鼠標(biāo)接口模塊的設(shè)計(jì),通過VGA模塊(vga-logic)控制顯示器顯示可以動(dòng)的鼠標(biāo)指針(windows系統(tǒng)的鼠標(biāo)操作一樣):通過按鼠標(biāo)的鍵,可改變顯示器的顏色。利用Qua
5、rtusII完成設(shè)計(jì),仿真等工作,最后在MagicSOPC平臺(tái)上進(jìn)行硬件測(cè)試PS/2鼠標(biāo)接口電路原理圖1.4所示三設(shè)計(jì)工具 Quartus軟件,MagicSOPC平臺(tái)四 實(shí)驗(yàn)原理4-1 PS/2通信協(xié)議PS/2通信協(xié)議是一種雙向同步串行通訊協(xié)議。通訊的兩端通過Clock(時(shí)鐘腳)同步并通過Data(數(shù)據(jù)腳)交換數(shù)據(jù)。任何一方如果想抑制另外一方通訊時(shí),只需要把clock(時(shí)鐘腳)拉到低電平。如果是PC機(jī)和PS/2鍵盤的通訊,則PC機(jī)必須做主機(jī),也就是說,PC機(jī)可以抑制PS/2鍵盤發(fā)送數(shù)據(jù),而PS/2鍵盤則不會(huì)抑制PC機(jī)發(fā)送數(shù)據(jù),也即主機(jī)總是在總線上有優(yōu)先權(quán)。推薦值在15KHz左右,也就是說,cl
6、ock(時(shí)鐘腳)高、低電平的持續(xù)時(shí)間為40us。每一數(shù)據(jù)幀包含1112個(gè)位,具體含義如表1.1所示 表1.1 PS/2通訊數(shù)據(jù)幀格式1個(gè)起始位總是邏輯08個(gè)數(shù)據(jù)位(LSB)低位在前1個(gè)奇偶校驗(yàn)位奇校驗(yàn)1個(gè)停止位總是邏輯11個(gè)應(yīng)答位僅用在主機(jī)對(duì)設(shè)備的通訊中 表中,如果數(shù)據(jù)位中1的個(gè)數(shù)為偶數(shù),校驗(yàn)位就為1;如果數(shù)據(jù)位中1的個(gè)數(shù)為奇數(shù),校驗(yàn)位就為0;總之,數(shù)據(jù)位中1的個(gè)數(shù)加上校驗(yàn)位中1的個(gè)數(shù)總為奇數(shù),因此總進(jìn)行奇校驗(yàn)。4-2 PS/2設(shè)備到主機(jī)的通訊 PS/2到主機(jī)的通訊時(shí)序圖如圖1.1所示。數(shù)據(jù)在PS/2時(shí)鐘的下降沿讀取,PS/2的時(shí)鐘頻率為1016.7KHz。對(duì)于PS/2設(shè)備,一般來說從時(shí)鐘脈沖
7、的上升沿到一個(gè)數(shù)據(jù)轉(zhuǎn)變的時(shí)間至少要有5微秒;數(shù)據(jù)變化到時(shí)鐘脈沖的下降沿的時(shí)間至少要有5微秒,并且不大于25微秒,這個(gè)時(shí)序非常重要應(yīng)該嚴(yán)格遵循。主機(jī)可以在第11個(gè)時(shí)鐘脈沖停止位之前把時(shí)鐘線拉低,使設(shè)備放棄發(fā)送當(dāng)字節(jié),當(dāng)然這個(gè)比較少見。在停止位發(fā)送后設(shè)備在發(fā)送下個(gè)包前應(yīng)該至少等待50微秒,給主機(jī)時(shí)間做相應(yīng)的處理。不過主機(jī)處理接收到的字節(jié)時(shí)一般會(huì)抑制發(fā)送(主機(jī)在收到每個(gè)包時(shí)通常自動(dòng)做這個(gè))。在主機(jī)釋放抑制后,設(shè)備應(yīng)該在發(fā)送任何數(shù)據(jù)前等50微秒。 圖1.1設(shè)備到主機(jī)的通訊4-3 主機(jī)到PS/2設(shè)備的通訊 由于時(shí)鐘信號(hào)總是由PS/2設(shè)備產(chǎn)生,所以如果主機(jī)要發(fā)送數(shù)據(jù)就應(yīng)該必須先把時(shí)鐘和數(shù)據(jù)線設(shè)置位請(qǐng)求。發(fā)
8、送狀態(tài)如下所示l 通過下拉時(shí)鐘線至少100微秒來抑制通訊。l 通過下拉數(shù)據(jù)線來應(yīng)用請(qǐng)求,發(fā)送然后釋放時(shí)鐘。設(shè)備應(yīng)該在不超過10毫秒的時(shí)間間隔內(nèi)就要檢查這個(gè)狀態(tài)。當(dāng)設(shè)備檢測(cè)到這個(gè)它將開始產(chǎn)生時(shí)鐘信號(hào),并且時(shí)鐘脈沖標(biāo)記下輸入八個(gè)數(shù)據(jù)和一位停止位。主機(jī)應(yīng)該在時(shí)鐘線為低的時(shí)候改變數(shù)據(jù)線,而數(shù)據(jù)在時(shí)鐘脈沖的上升沿被所存,這與PS/2設(shè)備到主機(jī)的通訊的過程正好相反。在停止位發(fā)送后,設(shè)備要應(yīng)答接收到的字節(jié),會(huì)把數(shù)據(jù)線拉低并產(chǎn)生最后一個(gè)時(shí)鐘脈沖,如果主機(jī)在第11個(gè)時(shí)鐘脈沖后不釋放數(shù)據(jù)線,設(shè)備將繼續(xù)產(chǎn)生時(shí)鐘脈沖直到數(shù)據(jù)線被釋放。然后設(shè)備將產(chǎn)生一個(gè)錯(cuò)誤。通訊時(shí)序圖如圖1.2,1.3所示。主機(jī)也可以在第11個(gè)時(shí)鐘脈
9、沖應(yīng)答位前中止一次傳送,只要下拉時(shí)鐘至少100微秒。圖1.2主機(jī)到設(shè)備的通訊 圖1.3 主機(jī)到設(shè)備通訊的詳細(xì)過程4-4 PS/2鼠標(biāo)簡(jiǎn)介標(biāo)準(zhǔn)的PS/2鼠標(biāo),支持下面的輸入X(左右)位移、Y(上下)位移、左鍵、中建和右鍵鼠標(biāo)以一個(gè)固定的頻率讀取這些輸入,并更新不同的計(jì)數(shù)器,然后標(biāo)出反映的移動(dòng)和按鍵狀態(tài)。標(biāo)準(zhǔn)的鼠標(biāo)有兩個(gè)計(jì)數(shù)器,保持位移的跟蹤,X位移計(jì)數(shù)器和Y位移計(jì)數(shù)器??纱娣?位的2進(jìn)制補(bǔ)碼,并且每個(gè)計(jì)數(shù)器都有相關(guān)的益處標(biāo)志,它們的內(nèi)容連同三個(gè)鼠標(biāo)按鈕的狀態(tài)一起以三個(gè)字節(jié)移動(dòng)數(shù)據(jù)包的形式發(fā)送給主機(jī)。位移計(jì)數(shù)器表示從最后一次位移數(shù)據(jù)包送往主機(jī)后,有位移量發(fā)生。當(dāng)鼠標(biāo)讀取它的輸入的時(shí)候,它記錄按鍵的
10、當(dāng)前狀態(tài),然后檢查位移,如果位移發(fā)生它就增加(對(duì)正位移)或減少(對(duì)負(fù)移位 )X和/或Y位移計(jì)數(shù)器的值。如果有一個(gè)計(jì)數(shù)器溢出了就設(shè)置相應(yīng)的益出標(biāo)志。4-5 PS/2鼠標(biāo)位移數(shù)據(jù)包標(biāo)準(zhǔn)的PS/2鼠標(biāo),發(fā)送位移和按鍵信息給主機(jī)采用如表5.3所示所列的3節(jié)數(shù)據(jù)包格式。 表5.33字節(jié)數(shù)據(jù)包格式 字節(jié)D7D6D5D4D3D2D1D0Byet1Y溢出位Y符號(hào)位X符號(hào)位X符號(hào)位Always1中間按鍵右按鍵左按鍵BYTE2X位移增量BYTE3 Y位移增量 位移計(jì)數(shù)器是一個(gè)9位2進(jìn)制的補(bǔ)碼整數(shù)。它的是最高位作為符號(hào)出現(xiàn),當(dāng)鼠標(biāo)讀取輸入發(fā)現(xiàn)有位移是被計(jì)數(shù)器更新。這些值是自從上一次發(fā)送位移數(shù)據(jù)包給主機(jī)后位移的累(即
11、最后一次數(shù)據(jù)包發(fā)給主機(jī)后位移計(jì)數(shù)器被復(fù)位)。位移計(jì)數(shù)器可以表示的值的范圍是-255到+255.如果超過了范圍,相應(yīng)的溢出位就被設(shè)置,并且在復(fù)位前計(jì)數(shù)器不會(huì)增減。一旦位移數(shù)據(jù)包成功地發(fā)送給主機(jī),位移計(jì)數(shù)器就會(huì)復(fù)位,同樣鼠標(biāo)在收到主機(jī)不是Resend(0xFE)命令外的其他命令計(jì)數(shù)器也會(huì)復(fù)位。 設(shè)計(jì)要注意時(shí)序驅(qū)動(dòng),詳細(xì)情況可參考相關(guān)資料。4-6 設(shè)計(jì)思想針對(duì)FPGA做時(shí)序狀態(tài)控制不靈活的缺點(diǎn),本設(shè)計(jì)簡(jiǎn)化了通訊過程,對(duì)PS2鼠標(biāo)讀取的操作只用了一條指令,使能數(shù)據(jù)報(bào)告(0xF4)。利用鼠標(biāo)上電自動(dòng)復(fù)位并進(jìn)入Stream模式后,送使能數(shù)據(jù)報(bào)告指令(0xF4),便完成對(duì)鼠標(biāo)的初始化。之后便可以接受PS2鼠
12、標(biāo)發(fā)送過來的數(shù)據(jù)包。該方案的優(yōu)點(diǎn)是簡(jiǎn)化程序,節(jié)省資源:缺點(diǎn)是不能軟復(fù)位,即鼠標(biāo)由于出現(xiàn)異常情況而不正常工作,不能用軟件復(fù)位,只能重新拔插鼠標(biāo)。但出現(xiàn)異常狀況的情況比較少,所以總來的該方案是比較合理的。4-7 PS2_mouse_interface模塊的接口與控制l Clock(input)系統(tǒng)時(shí)鐘,默認(rèn)為100MHz,如要改為其他頻率,需改動(dòng)如下幾個(gè)參數(shù):Parameter WATCHDOG_TIME_CALUE=40000; /看門狗計(jì)時(shí)器,400usParameter WATCHDOG_TIME_BITS =16;/400us計(jì)時(shí)器所需計(jì)數(shù)器位數(shù)ParameterTIMER_5US_VAL
13、UE =500;/5us計(jì)數(shù)值ParameterTIMER_5US_BITS =;/5us計(jì)時(shí)器所需計(jì)數(shù)器位數(shù)l Reset(inpt)復(fù)位信號(hào),高電平有效。復(fù)位時(shí)不會(huì)向PS/2鼠標(biāo)發(fā)送復(fù)位命令,只向鼠標(biāo)發(fā)送數(shù)據(jù)使能報(bào)告。l Ps2_clk(bidir)PS/2時(shí)鐘線,為雙向端口,外圍電路需加上拉電阻。l Ps2_clk(bidir)PS/2數(shù)據(jù)線,位雙向端口,外圍電路需加上上拉電阻。l Left_button(output)左鍵標(biāo)志位,高電平表示左鍵按下。l Right_button(output)右鍵標(biāo)志位,高電平表示右鍵按下。l Middle_button(putput)中間標(biāo)志位,高電
14、平表示中建按下、l X_increment80(output)X軸曾量,位9位二進(jìn)制補(bǔ)碼,最高位為符位。鼠標(biāo)左移,位移增量為負(fù);右移增量正。l Y_ increment80(output)Y軸增量,為9位二進(jìn)制補(bǔ)碼,最高位為符位。鼠標(biāo)上移,位移增量為負(fù);下移,位移增量為正。l Data_ready(output)高電平表示有新數(shù)據(jù)輸出。輸出為一個(gè)時(shí)鐘脈沖。 五設(shè)計(jì)步驟 啟動(dòng)QuartusII建立一個(gè)空白工程,然后命名為PS2_mouse_test.qpf。 建立PLL宏單元,命名為pll,設(shè)置輸入頻率位50MHz,c0輸出頻率位00MHz,cl輸出頻率位25MHz. 將光盤中EDA_Compo
15、net目錄下的vga_logic.vqm、ps2_mouse_test.tcl和mouse_inc.mif為鼠標(biāo)圖形數(shù)據(jù)文件。 新建Verilong HDL源程序文件ps2_mouse_.v、ps2_mouse_interface.v、mouse_test.v和count.v,寫出程序代碼并報(bào)保存(完整的Verilog HDL程序參考程序清單5.2),進(jìn)行綜合編譯,若在編譯過程中發(fā)信錯(cuò)誤,則找出并更正錯(cuò)誤,直到編譯成功為止。 選擇目標(biāo)期器件并對(duì)相應(yīng)的引腳進(jìn)行鎖定,在這里所選擇的器件為Altera公司Cyclone系列的EP2C35F72C8芯片,引腳鎖定方法如表所列(表5.1中的ps2_key
16、board_data、ps2_keybord_clk這兩個(gè)信號(hào)不用分配;disp_dato7:0、hsync、vsync應(yīng)該選擇2.5V的I/O標(biāo)準(zhǔn))將未使用的引腳設(shè)置為三態(tài)輸入(一定要設(shè)置,否則可能會(huì)損壞芯片)。設(shè)置方法見3.1節(jié)?;蛴肅TL命令行完成引腳分配,使用方法見5.1. 對(duì)該工程文件進(jìn)行全程編譯處理,若在編譯過程中發(fā)現(xiàn)錯(cuò)誤,則找出并更正錯(cuò)誤,直到編譯成功為止。 將顯示器和PS/2鼠標(biāo)分別接到256色VGA接口和PS/2鼠標(biāo)接口上,然后把程序下載到FPGA器件中。移動(dòng)PS/2鼠標(biāo),按鼠標(biāo)按鍵,觀察顯示器的現(xiàn)實(shí)情況,應(yīng)該是單擊鼠標(biāo)左鍵顯示器顏色變化相對(duì)較小,單擊右鍵顏色變化相對(duì)大一點(diǎn),
17、單擊中鍵中變?yōu)闇\藍(lán)色。移動(dòng)鼠標(biāo),顯示器上的鼠標(biāo)指針也跟著移動(dòng)。六實(shí)驗(yàn)參考程序程序設(shè)計(jì)6-1 PS2鼠標(biāo)接口設(shè)計(jì)頂層文件,文件名ps2_mouse_test.v本模塊的主要作用是對(duì)鼠標(biāo)接口模塊(PS2_mouse_interface)、鼠標(biāo)移位累計(jì)模塊(count)、鼠標(biāo)按鍵測(cè)試模塊(mouse_tset)及VGA模塊(vga_logic)進(jìn)行封裝。實(shí)現(xiàn)的功能是在顯示器上顯示移動(dòng)的鼠標(biāo)。module ps2_mouse_test(clock,rst_n,ps2_mouse_clk,ps2_mouse_data,sram_data,sram_nwe,sram_noe,sram_addr,sram_
18、ncs,byte3,byte2,byte1,byte0,hsync,vsync,disp_dato); input clock; input rst_n; inout ps2_mouse_clk; inout ps2_mouse_data; inout15:0 sram_data; output17:0 sram_addr; output sram_nwe; output sram_noe; output sram_ncs; output byte3; output byte2; output byte1; output byte0; output hsync; output vsync; o
19、utput 7:0 disp_dato; wire clk_100m; wire clk_25m; wire wr_ack; wire wr_req; wire 18:0 wr_addr; wire 7:0 wr_data; wire 9:0 mouse_x; wire 8:0 mouse_y; wire left_button; wire middle_button; wire right_button; wire 8:0 x_increment;wire 8:0 y_increment;wire datn_ready;pll pll(.inclk0(clock),.c0(clk_100m)
20、,.c1(clk_25m);ps2_mouse_interface ps2_mouse_interface(.clock(clk_100m),.reset(rst_n),.ps2_clk_in(ps2_mouse_clk),.ps2_data_in(ps2_mouse_data),.left_button(left_button),.right_button(right_button),.middle_button(middle_button),.x_increment(x_increment),.y_increment(y_increment),.data_ready(data_ready)
21、;count count(.clock(clk_100m),.data_ready(data_ready),.x_inc(x_increment),.y_inc(y_increment),.x_addr(mouse_x),.y_addr(mouse_y);mouse_test mouse_test(.clock(clk_100m),.left_btn(left_button),.right_btn(right_button),.middle_btn(mddle_button),.wr_addr(wr_addr),.wr_data(wr_data),.wr_ack(wr_ack),.wr_req
22、(wr_req);vga_logic vga_logic(.ico_wr_clk(clk_100m),.clk_100m(clk_100m),.clk_25m(clk_25m),.vga_clk(),.vga_reset(rst_n),.wr_req( wr_req),.wr_addr(wr_addr),.wr_data(wr_data),.wr_ack(wr_ack),.sram_nwe(sram_nwe),.sram_noe(sram_noe),.sram_addr(sram_addr),.sram_data(sram_data),.ico_wr_data(),.ico_wr_en(1
23、39;b0),.mouse_en(1'b1),.mouse_x(mouse_x),.mouse_y(mouse_y),.hsync(hsync),.vsync(vsync),.disp_dato(disp_dato),.data_enab(data_enab);Endmodule 圖1.4 PS_MOSUE_TEST RTL結(jié)構(gòu)圖6-2 Ps2鼠標(biāo)接口模塊,文件名ps2_mouse_inferface.vdefine TOTAL_BITS 33 / 一個(gè)數(shù)據(jù)包有33位數(shù)據(jù)module ps2_mouse_interface (clock,reset, /復(fù)位,高電平有效ps2_clk_
24、in,ps2_data_in,ps2_clk_out,left_button,right_button,middle_button,ps2_data_out,ps2_clk_dir,ps2_data_dir,x_increment,y_increment,data_ready); /數(shù)據(jù)已經(jīng)正確收到input clock;input reset;input ps2_clk_in; /PS/2時(shí)鐘線,輸入口input ps2_data_in; /PS/2數(shù)據(jù)線,輸入口output ps2_clk_out; /PS/2時(shí)鐘線,輸出口output ps2_data_out; /PS/2數(shù)據(jù)線,輸出口
25、output ps2_clk_dir; /PS/2時(shí)鐘方向控制,高電平為輸出,低電平為輸output ps2_data_dir; /PS/2數(shù)據(jù)方向控制,高電平為輸出,低電平為輸output left_button;output right_button;output middle_button;output 8:0 x_increment;output 8:0 y_increment;output data_ready;/輸出寄存器reg left_button_r;reg right_button_r;reg middle_button_r;reg 8:0 x_increment_r;re
26、g 8:0 y_increment_r;reg data_ready_r;reg ps2_clk_out_r;reg ps2_data_out_r;reg ps2_clk_dir_r;reg ps2_data_dir_r;/內(nèi)部節(jié)點(diǎn)wire watchdog_timer_done; /看門狗狀態(tài)指示,SP2無時(shí)鐘脈沖超過400US置位wire timer_5us_done; /用于延時(shí)緩沖,防止毛刺干擾wire packet_good; /數(shù)據(jù)包正確收到-狀態(tài)指示/內(nèi)部寄存器reg TOTAL_BITS-1:0 q; /移位寄存器reg 2:0 m1_state;reg 2:0 m1_next
27、_state;reg 3:0 m2_state;reg 3:0 m2_next_state;reg 5:0 bit_count; /發(fā)送接收數(shù)據(jù)是的位計(jì)數(shù)器reg WATCHDOG_TIMER_BITS-1:0 watchdog_timer_count; /看門狗計(jì)時(shí)器,400usreg TIMER_5US_BITS-1:0 timer_5us_count; /5uS計(jì)時(shí)器reg ps2_clk_in_r; /同步后的PS2時(shí)鐘reg ps2_data_in_r; /同步后的PS2數(shù)據(jù)reg sync_clk; /濾波后的PS2時(shí)鐘-由狀態(tài)機(jī)M1產(chǎn)生輸出reg rising_edge; /PS
28、2時(shí)鐘上升沿標(biāo)志-由狀態(tài)機(jī)M1產(chǎn)生輸出reg falling_edge; /PS2時(shí)鐘下降沿標(biāo)志-由狀態(tài)機(jī)M1產(chǎn)生輸出parameter WATCHDOG_TIMER_VALUE = 30000; /看門狗計(jì)時(shí)器,400uSparameter WATCHDOG_TIMER_BITS = 16; /400uS計(jì)時(shí)器所需計(jì)數(shù)器位數(shù)parameter TIMER_5US_VALUE = 375; / 5uS計(jì)數(shù)值parameter TIMER_5US_BITS = 9; / 5uS計(jì)時(shí)器所需計(jì)數(shù)器位數(shù)/狀態(tài)機(jī)M1參數(shù)表parameter m1_clk_h = 3'b000,m1_fallin
29、g_edge = 3'b001,m1_falling_wait = 3'b011,m1_clk_l = 3'b010,m1_rising_edge = 3'b110,m1_rising_wait = 3'b100;/狀態(tài)機(jī)M2參數(shù)表parameter m2_reset = 4'b0000,m2_wait = 4'b0001,m2_gather = 4'b0011,m2_verify = 4'b0010,m2_use = 4'b0110,m2_hold_clk_l = 4'b0111,m2_data_low_
30、1 = 4'b0101,m2_data_high_1 = 4'b0100,m2_data_low_2 = 4'b1100,m2_data_high_2 = 4'b1101,m2_data_low_3 = 4'b1001,m2_data_high_3 = 4'b1011,m2_await_response = 4'b1010;assign ps2_clk_out = ps2_clk_out_r; /PS2時(shí)鐘線輸出assign ps2_data_out = ps2_data_out_r; /PS2數(shù)據(jù)線輸出assign ps2_clk_di
31、r = ps2_clk_dir_r; /PS2時(shí)鐘方向assign ps2_data_dir = ps2_data_dir_r; /PS2數(shù)據(jù)方向assign left_button = left_button_r;assign right_button = right_button_r;assign middle_button = middle_button_r;assign y_increment = y_increment_r;assign x_increment = x_increment_r;assign data_ready = data_ready_r;always (posed
32、ge clock)beginps2_clk_in_r <= ps2_clk_in;ps2_data_in_r <= ps2_data_in;endalways (posedge clock)beginif (reset = 1'b1)m1_state <= m1_clk_h;elsem1_state <= m1_next_state;endalways (m1_state or ps2_clk_in_r or timer_5us_done or watchdog_timer_done)beginsync_clk <= 1'b0;rising_edg
33、e <= 1'b0;falling_edge <= 1'b0;case (m1_state)m1_clk_h : /時(shí)鐘高電平beginsync_clk <= 1'b1;if(ps2_clk_in_r)m1_next_state <= m1_falling_edge;elsem1_next_state <= m1_clk_h;endm1_falling_edge : /時(shí)鐘下降沿beginfalling_edge <= 1'b1;m1_next_state <= m1_falling_wait;endm1_falling
34、_wait : /等待5US延時(shí)防止毛刺干擾beginif(timer_5us_done)m1_next_state <= m1_clk_l;elsem1_next_state <= m1_falling_wait;endm1_clk_l : /時(shí)鐘低電平beginif(ps2_clk_in_r)m1_next_state <= m1_rising_edge;elsem1_next_state <= m1_clk_l;endm1_rising_edge : /時(shí)鐘上升沿beginrising_edge <= 1'b1;m1_next_state <=
35、 m1_rising_wait;endm1_rising_wait : /等待5US延時(shí)防止毛刺干擾beginsync_clk <= 1'b1;if(timer_5us_done)m1_next_state <= m1_clk_h;elsem1_next_state <= m1_rising_wait;enddefault : m1_next_state <= m1_clk_h;endcaseendalways (posedge clock)beginif(reset = 1'b1)m2_state <= m2_reset;elsem2_state
36、 <= m2_next_state;endalways (m2_stateor qor falling_edgeor rising_edgeor watchdog_timer_doneor bit_countor packet_goodor ps2_data_in_ror sync_clk)beginps2_clk_out_r <= 1'b1;ps2_data_out_r <= 1'b1;ps2_clk_dir_r <= 1'b0;ps2_data_dir_r <= 1'b0;data_ready_r <= 1'b0;
37、case (m2_state)m2_reset : beginm2_next_state <= m2_hold_clk_l;endm2_wait :beginif (falling_edge)m2_next_state <= m2_gather;elsem2_next_state <= m2_wait;endm2_gather : /判斷數(shù)據(jù)是否收完beginif (watchdog_timer_done && (bit_count = TOTAL_BITS)m2_next_state <= m2_verify;else if (watchdog_tim
38、er_done && (bit_count < TOTAL_BITS)m2_next_state <= m2_hold_clk_l;elsem2_next_state <= m2_gather;endm2_verify : /檢驗(yàn)數(shù)據(jù)包是否正確beginif (packet_good)m2_next_state <= m2_use;elsem2_next_state <= m2_wait;endm2_use : /數(shù)據(jù)包是否正確begindata_ready_r <= 1'b1;m2_next_state <= m2_wait;
39、endm2_hold_clk_l : /拉低時(shí)鐘線400US,準(zhǔn)備發(fā)送命令beginps2_clk_dir_r <= 1'b1;ps2_clk_out_r <= 1'b0;if(watchdog_timer_done && sync_clk)m2_next_state <= m2_data_low_1;elsem2_next_state <= m2_hold_clk_l;endm2_data_low_1 : /發(fā)送起始位"0",d0,d1beginps2_data_dir_r <= 1'b1;ps2_da
40、ta_out_r <= 1'b0;if (falling_edge && (bit_count = 6'd2)m2_next_state <= m2_data_high_1;elsem2_next_state <= m2_data_low_1;endm2_data_high_1 : /發(fā)送位d2beginps2_data_dir_r <= 1'b1;if (falling_edge)m2_next_state <= m2_data_low_2;elsem2_next_state <= m2_data_high_1;en
41、dm2_data_low_2 :beginps2_data_dir_r <= 1'b1;ps2_data_out_r <= 1'b0; /發(fā)送位d3if (falling_edge)m2_next_state <= m2_data_high_2;elsem2_next_state <= m2_data_low_2;endm2_data_high_2 : /發(fā)送位d4,d5,d6,d7beginps2_data_dir_r <= 1'b1;if (falling_edge && (bit_count = 6'd8)m2
42、_next_state <= m2_data_low_3;elsem2_next_state <= m2_data_high_2;endm2_data_low_3 : /發(fā)送奇偶校驗(yàn)位beginps2_data_dir_r <= 1'b1;ps2_data_out_r <= 1'b0;if(falling_edge)m2_next_state <= m2_data_high_3;elsem2_next_state <= m2_data_low_3;endm2_data_high_3 : /停止位"1",應(yīng)答處理begini
43、f (falling_edge && ps2_data_in_r)m2_next_state <= m2_hold_clk_l; /有錯(cuò)誤產(chǎn)生,重新復(fù)位else if (falling_edge && ps2_data_in_r)m2_next_state <= m2_await_response;elsem2_next_state <= m2_data_high_3;endm2_await_response :beginif (bit_count = 6'd22)m2_next_state <= m2_verify;elsem2
44、_next_state <= m2_await_response;enddefault : m2_next_state <= m2_wait;endcaseendalways (posedge clock)beginif(reset = 1'b1)bit_count <= 6'd0; /復(fù)位時(shí)計(jì)數(shù)器清零else if(falling_edge)bit_count <= bit_count + 6'd1;else if(watchdog_timer_done)bit_count <= 6'd0; /接收完一個(gè)數(shù)據(jù)包后計(jì)數(shù)器清零end/
45、移位寄存器,在時(shí)鐘的下降沿鎖存數(shù)據(jù)/功能:接收PS2發(fā)送到來的數(shù)據(jù)always (posedge clock)beginif (reset = 1'b1) q <= TOTAL_BITS'd0; else if (falling_edge) q <= ps2_data_in_r,qTOTAL_BITS-1:1;endalways (posedge clock)begin if(reset | rising_edge | falling_edge) watchdog_timer_count <= 0; else if(watchdog_timer_done) w
46、atchdog_timer_count <= watchdog_timer_count + 1;endassign watchdog_timer_done = (watchdog_timer_count=WATCHDOG_TIMER_VALUE-1);/緩沖時(shí)間5US計(jì)數(shù)器always (posedge clock)begin if (reset | falling_edge | rising_edge ) timer_5us_count <= 0; else timer_5us_count <= timer_5us_count + 1;endassign timer_5us
47、_done = (timer_5us_count = TIMER_5US_VALUE-1);/驗(yàn)證收到的數(shù)據(jù)包數(shù)據(jù)是否有效、正確assign packet_good = ( (q0 = 1'b0) /第一字節(jié)起始位 && (q10 = 1'b1) /第一字節(jié)停止位 && (q11 = 1'b0)/第二字節(jié)起始位 && (q21 = 1'b1)/第二字節(jié)停止位 && (q22 = 1'b0)/第三字節(jié)起始位 && (q32 = 1'b1)/第三字節(jié)停止位 &&a
48、mp; (q9 = q8:1) /第一字節(jié)奇驗(yàn)證位 && (q20 = q19:12) /第二字節(jié)奇驗(yàn)證位 && (q31 = q30:23) /第三字節(jié)奇驗(yàn)證位 );always (posedge clock)begin if (reset = 1'b1) begin left_button_r <= 1'b0; right_button_r <= 1'b0; middle_button_r <= 1'b0; x_increment_r <= 1'b0; y_increment_r <= 1
49、'b0; end else if (data_ready_r = 1'b1) begin left_button_r <= q1; /BIT10 right_button_r <= q2; /BIT11 middle_button_r <= q3; /BIT12 x_increment_r <= q5,q19:12; /BIT14,BIT2 y_increment_r <= q6,q30:23; /BIT15,BIT3 endendendmodule 圖1.5 PS_MOSUE_INTERFACE RTL結(jié)構(gòu)圖6-3 Ps2鼠標(biāo)坐標(biāo)位置計(jì)算模塊,文
50、件名count.v該模塊的主要功能是將鼠標(biāo)接口模塊發(fā)送過來的鼠標(biāo)位移增量信號(hào)裝換成坐標(biāo)參數(shù)信號(hào)輸出,送給vga_logic。 module count(clock,data_ready,x_inc, y_inc, x_addr,y_addr); input clock; input data_ready; input8:0 x_inc; input8:0 y_inc; output9:0 x_addr; output8:0 y_addr; reg10:0 x_addr_r; reg9:0 y_addr_r; assign x_addr=x_addr_r9:0; assign y_addr=y_addr_r8:0; always (posedge clock) begin if(data_ready) begin if(x_inc8) begin if(x_addr_r<=11'd1024) x_addr_r<=11'd102; else x_addr_r<=x_addr_r+x_inc-10'h200; end else begin if(x_addr_r>11'd1662) x_addr_r<=11'd1662; else x_addr_r<=x_addr_r+x_in
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 品牌口碑提升計(jì)劃
- 創(chuàng)新思維與解決方案探討計(jì)劃
- 《四川省木里縣灰?guī)r山金礦普查實(shí)施方案》評(píng)審意見書
- 2025年美術(shù)元宵燈會(huì)標(biāo)準(zhǔn)教案
- 三年級(jí)數(shù)學(xué)下冊(cè)7小數(shù)的初步認(rèn)識(shí)教學(xué)反思二新人教版
- 健康保險(xiǎn)類知識(shí)培訓(xùn)課件
- 2025年山西道路貨運(yùn)從業(yè)資格證考試
- 2025年甘肅貨運(yùn)從業(yè)資格證模擬考試試題答案
- 人教版八年級(jí)歷史與社會(huì)下冊(cè)教學(xué)設(shè)計(jì):5.1.3《農(nóng)耕文明的繁盛》
- 2025年巢湖道路運(yùn)輸從業(yè)資格證
- 湖南省2023年普通高等學(xué)校對(duì)口招生考試英語(yǔ)試卷
- 中國(guó)大米等糧食項(xiàng)目投資可行性研究報(bào)告
- 第11課《山地回憶》公開課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)
- 5.第五周 植此青綠共筑“雙碳”新未來
- java安全編碼規(guī)范
- 學(xué)校保潔服務(wù)投標(biāo)方案(技術(shù)標(biāo))
- 環(huán)境和職業(yè)健康安全類法律法規(guī)、標(biāo)準(zhǔn)規(guī)范清單(2023年7月)
- 獸醫(yī)檢驗(yàn)測(cè)試題(附參考答案)
- 《臍橙采摘機(jī)器人結(jié)構(gòu)設(shè)計(jì)》13000字(論文)
- 2025年保險(xiǎn)公司工作計(jì)劃
- 蜜柚種植基地新建項(xiàng)目可行性研究報(bào)告
評(píng)論
0/150
提交評(píng)論