版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上摘要: 鍵盤是最常用人機(jī)接口設(shè)備之一,在嵌入式系統(tǒng)中有著相當(dāng)廣泛的應(yīng)用。一般自行設(shè)計(jì)的簡(jiǎn)易矩陣鍵盤僅僅是按行、列排列起來的矩陣開關(guān)。當(dāng)需要較多的按鍵時(shí),則會(huì)占用較多的I/O 端口,在軟件上則要進(jìn)行上電復(fù)位按鍵掃描及通信處理,而且還要加上按鍵的去抖動(dòng)處理,增大了軟硬件開銷。而PS/2 鍵盤,內(nèi)嵌自動(dòng)去除按鍵抖動(dòng)設(shè)計(jì),自動(dòng)地識(shí)別鍵的按下與釋放,軟硬件開發(fā)簡(jiǎn)便,價(jià)格便宜,穩(wěn)定可靠,將PS/2 鍵盤作為嵌入式系統(tǒng)的輸入設(shè)備已經(jīng)成為可行的方案。本設(shè)計(jì)是以現(xiàn)場(chǎng)可編程邏輯器件(FPGA)為核心的PS/2接口鍵盤的輸入識(shí)別電路。利用Quartus軟件編寫verilog HDL硬件描述
2、語言程序以實(shí)現(xiàn)鍵盤部分簡(jiǎn)單鍵值的識(shí)別與輸出。本設(shè)計(jì)主要以程序?yàn)楹诵?,硬件電路的搭建使用FPGA實(shí)驗(yàn)箱,將程序頂層文件里定義的輸入輸出端口與實(shí)驗(yàn)箱管腳進(jìn)行相應(yīng)的配置,除實(shí)驗(yàn)箱上的reset鍵以外,外設(shè)是一個(gè)與實(shí)驗(yàn)箱通過PS/2接口相連的鍵盤和VGA接口相連的顯示屏。當(dāng)系統(tǒng)上電后,按下鍵盤上的按鍵,實(shí)驗(yàn)箱上的數(shù)碼管可以依次顯示從鍵盤上輸入的鍵值,同時(shí)VGA顯示屏顯示鍵值。關(guān)鍵字:Ps/2接口鍵盤、FPGA 、Quartus 、Verilog HDL、 VGA接口鍵盤輸入顯示 課程設(shè)計(jì)目的(1)鞏固和加深所學(xué)電子技術(shù)課程的基本知識(shí), 提高綜合運(yùn)用所學(xué)知識(shí)的能力;(2)培養(yǎng)學(xué)生根據(jù)課題需要選
3、用參考書、查閱手冊(cè)、圖表和文獻(xiàn)資料的能力,提高學(xué)生獨(dú)立解決工程實(shí)際問題的能力(3)通過設(shè)計(jì)方案的分析比較、設(shè)計(jì)計(jì)算、元件選繹及電路安裝調(diào)試等環(huán)節(jié)初步掌握簡(jiǎn)單實(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è)計(jì)說明書,能正確反映設(shè)計(jì)和實(shí)驗(yàn)成果,能正確繪制電路固等 設(shè)計(jì)任務(wù)與要求 1.任務(wù):設(shè)計(jì)一個(gè)鍵盤輸入顯示控制電路 2.要求和指標(biāo):(1)由鍵盤輸入0F,總計(jì)16個(gè)字符,由開發(fā)板上的數(shù)碼管顯示;(2) 該字符同時(shí)能在VGA上顯示輸出;3
4、. 擴(kuò)展要求: (A)能在VGA顯示屏上切換字符顯示的大小。 (B)能連續(xù)顯示輸入字符; 三、方案設(shè)計(jì)與論證本電路總共分為分頻模塊、PS/2鍵盤輸入模塊、字符碼轉(zhuǎn)換模塊、VGA驅(qū)動(dòng)模塊。各模塊之間的關(guān)系如下圖所示:使用現(xiàn)場(chǎng)可編程邏輯器件(FPGA)制作,利用Verilog HDL硬件描述語言編程進(jìn)行控制,然后下載至實(shí)驗(yàn)箱實(shí)現(xiàn)。利用Quartus軟件編寫verilog HDL硬件描述語言程序以實(shí)現(xiàn)鍵盤部分簡(jiǎn)單鍵值的識(shí)別與輸出。硬件電路的搭建使用FPGA實(shí)驗(yàn)箱,將程序頂層文件里定義的輸入輸出端口與實(shí)驗(yàn)箱管腳進(jìn)行相應(yīng)的配置,除實(shí)驗(yàn)箱上的reset鍵以外,外設(shè)是一個(gè)與實(shí)驗(yàn)箱通過PS/2接口相連的鍵盤。
5、工作原理:對(duì)鍵盤按鍵進(jìn)行掃描,采集按鍵的掃描碼,然后字符碼轉(zhuǎn)換分為兩路傳送:一條送入數(shù)碼顯示管進(jìn)行字符顯示;另一條通過字模軟件獲取鍵盤輸入字的字模數(shù)據(jù),送入VGA驅(qū)動(dòng),進(jìn)行字符的VGA顯示。四單元電路設(shè)計(jì)與參數(shù)計(jì)算設(shè)計(jì)分為三部分。分別為鍵盤數(shù)據(jù)接收部分、數(shù)碼管顯示部分和VGA顯示部分。模塊電路設(shè)計(jì)及說明:1鍵盤數(shù)據(jù)接收部分鍵盤PS/2的接口簡(jiǎn)介:接口的六個(gè)腳中,只有四個(gè)腳有意義,分別是:時(shí)鐘腳、數(shù)據(jù)腳、電源腳、電源地。其余為保留腳。PS/2靠系統(tǒng)的PS/2端口提供+5V電源。這里需要用到的即是:時(shí)鐘腳和數(shù)據(jù)腳。這兩個(gè)腳都是集電極開路,所以必須接大阻值的上拉電阻。他們平時(shí)保持高電平,有輸出時(shí)才被
6、拉到低電平,之后自動(dòng)上浮到高電平。PS/2設(shè)備的clock和data平時(shí)都是高電平。當(dāng)設(shè)備等待發(fā)送數(shù)據(jù)時(shí),它首先檢查clock是否為高。如果為低,則認(rèn)為PC抑制了通訊,此時(shí)它緩沖數(shù)據(jù)知道獲得總線的控制權(quán)。如果clock為高電平,PS/2設(shè)備則開始向PC發(fā)送數(shù)據(jù)。數(shù)據(jù)位在clock為高電平時(shí)準(zhǔn)備好,在clock下降沿被PC讀入。數(shù)據(jù)從鍵盤發(fā)送到主機(jī)或從主機(jī)發(fā)送到鍵盤,時(shí)鐘都是PS/2設(shè)備產(chǎn)生,主機(jī)對(duì)時(shí)鐘控制有優(yōu)先權(quán),即主機(jī)想發(fā)送控制指令給PS/2設(shè)備時(shí),可以拉低時(shí)鐘線至少100us。然后再下拉數(shù)據(jù)線,最后釋放時(shí)鐘線為高。PS/2設(shè)備的時(shí)鐘線和數(shù)據(jù)線都是集電極開路的,容易實(shí)現(xiàn)拉低電平。其數(shù)據(jù)發(fā)送時(shí)
7、序如下: 鍵盤發(fā)送時(shí)序 鍵盤接收時(shí)序因?yàn)槲覀兊墓δ苤簧婕暗芥I盤的數(shù)據(jù)發(fā)送,所以對(duì)接收不做具體說明?,F(xiàn)在的PC機(jī)使用的PS/2鍵盤都默認(rèn)采用第二套掃描碼集,掃描碼有兩種不同的類型:通碼和斷碼。當(dāng)一個(gè)鍵被按下或持續(xù)按住時(shí),鍵盤會(huì)將改鍵的通碼發(fā)送給主機(jī);而當(dāng)一個(gè)鍵被釋放時(shí),鍵盤會(huì)將該鍵的斷碼發(fā)送給主機(jī)。我們做的比較簡(jiǎn)單,因此只用到了第一類按鍵。(返回值見附錄)第一類按鍵:通碼為1字節(jié),斷碼為0xF0+通碼形式。如1鍵,其通碼為0x16,斷碼為0xF0 0x1C.在具體的實(shí)驗(yàn)過程中,PS/2鍵盤通過Clock管腳來控制通信方向并且充當(dāng)本次實(shí)驗(yàn)的一個(gè)時(shí)鐘管腳,在鍵盤時(shí)鐘下,數(shù)據(jù)段進(jìn)行收發(fā)數(shù)據(jù),本次實(shí)驗(yàn)只
8、是使用它來發(fā)送數(shù)據(jù),未設(shè)計(jì)鍵盤接收數(shù)據(jù)。每按下一個(gè)鍵,data管腳發(fā)送一個(gè)數(shù)據(jù)幀,具體格式如下: PS/2鍵盤掃描碼1個(gè)起始位總是邏輯08個(gè)數(shù)據(jù)位(LSB)低位在前1個(gè)奇偶校驗(yàn)位奇檢驗(yàn)1個(gè)停止位總是邏輯11個(gè)應(yīng)答位僅用在主機(jī)對(duì)設(shè)備的通訊中此模塊的功能說明:當(dāng)按下一個(gè)鍵時(shí),F(xiàn)PGA在時(shí)鐘信號(hào)下接受來自PS/2鍵盤的數(shù)據(jù)(8個(gè)數(shù)據(jù)位),接收完畢后鎖存并轉(zhuǎn)化為十六進(jìn)制數(shù)據(jù),例如4ha。當(dāng)按鍵放開時(shí),發(fā)出信號(hào)change。這時(shí)開始識(shí)別按鍵,如果接收到8d102,則表示接收到按鍵Backspace,則清空顯示數(shù)據(jù)。否則,數(shù)碼管進(jìn)行譯碼后則顯示鍵盤的鍵值??傮w來說,此部分分為接收數(shù)據(jù)模塊、數(shù)據(jù)判斷與鎖存模
9、塊、鍵值轉(zhuǎn)化模塊。2數(shù)碼管顯示部分此模塊的功能說明:這部分內(nèi)容較簡(jiǎn)單,由于已經(jīng)得到了鍵盤信息,在接收到change信號(hào)后,且十六進(jìn)制數(shù)據(jù)不是8d102時(shí)(即不是Backspace清零信號(hào)),則根據(jù)數(shù)字對(duì)應(yīng)的通碼反過來找數(shù)字,經(jīng)過8段數(shù)碼管的譯碼后顯示鍵盤鍵值。可顯示的鍵值有:09,af。此部分總體分為數(shù)據(jù)接收模塊、分頻模塊、位選信號(hào)模塊、譯碼模塊。之所以有分頻主要是為了提供數(shù)碼管動(dòng)態(tài)掃描的掃描頻率,頻率要適中。否則數(shù)碼管不能正常工作。3VGA顯示部分 VGA時(shí)序控制模塊是整個(gè)顯示控制器的關(guān)鍵部分,最終的輸出信號(hào)行、場(chǎng)同步信號(hào)必須嚴(yán)格按照VGA時(shí)序標(biāo)準(zhǔn)產(chǎn)生相應(yīng)的脈沖信號(hào)。對(duì)于普通的VGA顯示器,
10、其引出線的共含5個(gè)信號(hào):G,R,B(三基色信號(hào)),HS(行同步信號(hào))VS(場(chǎng)同步信號(hào))。在五個(gè)信號(hào)時(shí)序驅(qū)動(dòng)時(shí),VGA顯示器要嚴(yán)格遵循“VGA工業(yè)標(biāo)準(zhǔn)”,即640×480×25MHz模式或800×600×40MHz模式,本次字符顯示試驗(yàn)采用800×600×40MHz模式。五程序設(shè)計(jì)程序代碼見附錄六程序調(diào)試1、運(yùn)行Quartus II軟件,新建工程和命名頂層文件。2、建立文件Verilog HDL File。命名為ps2.v 。在文件中寫入程序,保存,編譯。3、分配管腳。保存,編譯。4、先下載簡(jiǎn)單的程序,已確定實(shí)驗(yàn)箱可用。5、之
11、后將生成的.sof文件下載至FPGA實(shí)驗(yàn)箱中。6、在鍵盤上一次輸入09,af。觀察數(shù)碼管顯示的數(shù)據(jù)是否與鍵盤的輸入鍵值相同。7、若不相同或不完全相同,則分模塊調(diào)試。調(diào)試現(xiàn)象:1、分別輸入09和af,數(shù)碼管上均能正確顯示,VGA正確顯示。2、輸入其他的鍵值,數(shù)碼管顯示0,VGA顯示0。七遇到的問題及解決方法1.不會(huì)使用Quartus II軟件及verilog HDL語言編寫程序。學(xué)習(xí)老師給的資料,并在圖書館借閱資料,嘗試編寫一些簡(jiǎn)單的verilog HDL程序,熟悉Quartus II軟件及verilog HDL語言編寫程序的方法。2. 數(shù)碼管顯示不正確。 不會(huì)連接DE0的管
12、腳,管腳配置不正確導(dǎo)致數(shù)碼管顯示異常。查看老師給的文件DE0_User_manual.pdf,學(xué)習(xí)DE0管腳接法。3.VGA顯示時(shí),屏幕無顯示,且出現(xiàn)閃屏。VGA的時(shí)鐘控制信號(hào)要求為25M Hz,編程時(shí)為編寫分頻器模塊,因此時(shí)鐘輸入為50M Hz。解決辦法是利用DE0的鎖相環(huán)二分頻得到25M Hz 輸入信號(hào)。八結(jié)論與心得通過本次課程設(shè)計(jì),讓我對(duì)FPGA有了進(jìn)一步的了解,雖然我們只做了一些最底層、最基本的設(shè)計(jì),也只接觸了那么一些小小的內(nèi)容,但通過整個(gè)設(shè)計(jì)過程使我深深地了解了FPGA的強(qiáng)大功能,認(rèn)識(shí)了一些單元的工作原理。我們小組做的是鍵盤輸入顯示,能在DE0的七段數(shù)碼顯示管上顯示,也能在VGA上顯
13、示鍵盤輸入的字符,從頭到尾讓我對(duì)PS/2鍵盤、VGA顯示原理都有了深刻的認(rèn)識(shí)。在此過程中我們也遇到了許多困難,最開始不會(huì)使用Quartus II軟件及verilog HDL語言編寫程序,我們就開始學(xué)習(xí)老師給的資料,并在圖書館借閱資料,嘗試編寫一些簡(jiǎn)單的verilog HDL程序,熟悉Quartus II軟件及verilog HDL語言編寫程序的方法,但是對(duì)所選的題沒有思路,于是我們就看老師所給的程序,理解它的功能,從而得到編程的“靈感”。通過不斷地努力,我們初步編寫出程序。在調(diào)試程序時(shí)出現(xiàn)了不少語法錯(cuò)誤,在看了verilog HDL語言的書后,我們發(fā)現(xiàn)了這些錯(cuò)誤??傊?,設(shè)計(jì)
14、過程中困難是多種多樣的,但我們沒放棄,通過查閱資料、詢問老師、小組討論、商量都一一解決了。在此過程中也讓我們提高了真正地去發(fā)現(xiàn)問題、分析問題、解決問題的能力,獲益匪淺。本次課程設(shè)計(jì)也讓認(rèn)識(shí)到只有真正的理解一個(gè)東西的工作原理過后,才知道如何下手去解決問題,盲目地寫程序,摘抄別人的東西最終還是一無所獲。九參考文獻(xiàn)【1】崔葛瑾.基于FPGA的數(shù)字電路系統(tǒng)設(shè)計(jì).西安電子科技大學(xué)出版社.2008【2】郭永貞.數(shù)字電路實(shí)驗(yàn)與EDA技術(shù).東南大學(xué)出版.2010附錄一:掃描碼表:KEY通碼斷碼045F0 45116F0 1621EF0 1E326F0 26425F0 2552EF0 2E636F0 3673D
15、F0 3D83EF0 3E946F0 46a1CF0 1Cb32F0 32c21F0 21d23F0 23e24F0 24f2BF0 2B附錄二:鍵盤數(shù)據(jù)接收部分:timescale 1ns / 1ps/module ps2(clk,rst_n,ps2k_clk,ps2k_data,oSEG,hsync,vsync,vga_r,vga_g,vga_b);input clk;/50M時(shí)鐘信號(hào)input rst_n;/復(fù)位信號(hào),active_lowinput ps2k_clk;/PS2接口時(shí)鐘信號(hào)input ps2k_data;/PS2接口數(shù)據(jù)信號(hào) output6:0oSEG;/數(shù)碼管顯示值out
16、put hsync;/行同步信號(hào)output vsync;/場(chǎng)同步信號(hào)output2:0 vga_r;output2:0 vga_g;output1:0 vga_b;reg6:0oSEG;reg7:0 ps2_asci;/1byte鍵值,只做簡(jiǎn)單的按鍵掃描,以ASCII碼保存。/-reg ps2k_clk_r0,ps2k_clk_r1,ps2k_clk_r2;/ps2k_clk狀態(tài)寄存器wire pos_ps2k_clk; / ps2k_clk上升沿標(biāo)志位wire neg_ps2k_clk;/ ps2k_clk下降沿標(biāo)志位always (posedge clk or negedge rst_n
17、) begin /去抖動(dòng) if(!rst_n) beginps2k_clk_r0 <= 1'b0;ps2k_clk_r1 <= 1'b0;ps2k_clk_r2 <= 1'b0;endelse begin/鎖存狀態(tài),sequential executionps2k_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;/下降沿/-
18、reg7:0 ps2_byte_r;/接收來自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) beginnum <= 4'd0;temp_data <= 8'd0;endelse if(neg_ps2k_clk) begin/檢測(cè)到ps2k_clk的下降沿case (num)4'd0:num <= num+1'b1;4'd1:beginnum <= num+
19、1'b1;temp_data0 <= ps2k_data;/bit0end4'd2:beginnum <= num+1'b1;temp_data1 <= ps2k_data;/bit1end4'd3:beginnum <= num+1'b1;temp_data2 <= ps2k_data;/bit2end4'd4:beginnum <= num+1'b1;temp_data3 <= ps2k_data;/bit3end4'd5:beginnum <= num+1'b1;tem
20、p_data4 <= ps2k_data;/bit4end4'd6:beginnum <= num+1'b1;temp_data5 <= ps2k_data;/bit5end4'd7:beginnum <= num+1'b1;temp_data6 <= ps2k_data;/bit6end4'd8:beginnum <= num+1'b1;temp_data7 <= ps2k_data;/bit7end4'd9:beginnum <= num+1'b1;/odd-even check
21、 bitend4'd10: beginnum <= 4'd0;/ num清零enddefault: ;endcaseendendreg key_f0;/松鍵標(biāo)志位,置1表示接收到鍵盤斷碼數(shù)據(jù)8'hf0,再接收到下一個(gè)數(shù)據(jù)后清零reg ps2_state_r;/鍵盤當(dāng)前狀態(tài),ps2_state_r=1表示有鍵被按下 always (posedge clk or negedge rst_n) begin/接收數(shù)據(jù)的相應(yīng)處理,這里只對(duì)1byte的鍵值進(jìn)行處理if(!rst_n) beginkey_f0 <= 1'b0;ps2_byte_r <= 8&
22、#39;h45; endelse if(num=4'd10)/剛傳送完一個(gè)字節(jié)數(shù)據(jù) begin if(temp_data = 8'hf0) key_f0 <= 1'b1;else beginif(!key_f0) begin/說明有鍵按下ps2_state_r <= 1'b1;ps2_byte_r <= temp_data;/鎖存當(dāng)前鍵值endelse beginps2_state_r <= 1'b0;key_f0 <= 1'b0;endendendend數(shù)碼管顯示部分:always (ps2_byte_r) beg
23、incase (ps2_byte_r)/鍵值轉(zhuǎn)換為ASCII碼,只處理十六進(jìn)制數(shù)字 8'h24: ps2_asci <= 8'h45;/E 8'h1c: ps2_asci <= 8'h41;/A8'h23: ps2_asci <= 8'h44;/D8'h2b: ps2_asci <= 8'h46;/F8'h21: ps2_asci <= 8'h43;/C 8'h32: ps2_asci <= 8'h42;/B 8'h45: ps2_asci <= 8
24、'h30; /0 8'h16: ps2_asci <= 8'h31; /1 8'h1e: ps2_asci <= 8'h32; /2 8'h26: ps2_asci <= 8'h33; /3 8'h25: ps2_asci <= 8'h34; /4 8'h2e: ps2_asci <= 8'h35; /5 8'h36: ps2_asci <= 8'h36; /6 8'h3d: ps2_asci <= 8'h37; /7 8'h
25、3e: ps2_asci <= 8'h38; /8 8'h46: ps2_asci <= 8'h39; /9 default: ps2_asci <= 8'h30;endcaseendalways (ps2_asci) begin /oSEG的7位和數(shù)碼管的7段的codecase(ps2_asci)8'd14: oSEG <= 7'b;/ -t- /reference:DE0 demonstration default8'h41: oSEG <= 7'b; / | |8'h44: oSEG &
26、lt;= 7'b; / lt rt8'h46: oSEG <= 7'b; / | |8'h43: oSEG <= 7'b; / -8'h42: oSEG <= 7'b; / | |8'h30: oSEG <= 7'b; / lb rb8'h31: oSEG <= 7'b; / | |8'h32: oSEG <= 7'b; / -b-8'h33: oSEG <= 7'b;8'h34: oSEG <= 7'b;8
27、39;h35: oSEG <= 7'b;8'h36: oSEG <= 7'b;8'h37: oSEG <= 7'b;8'h38: oSEG <= 7'b; 8'h39: oSEG <= 7'b;endcaseend/*clk PIN_G21rst_nPIN_H2 /BUTTON0ps2k_clk PIN_P22ps2k_data PIN_P21oSEG0 PIN_E11oSEG1 PIN_F11oSEG2PIN_H12oSEG3 PIN_H13oSEG4 PIN_G12oSEG5 PIN_F1
28、2oSEG6 PIN_F13 */VGA顯示部分:reg 1:0 c;wire clk_25m;pll u1 (.inclk0(clk), .c0(clk_25m);/-/ 坐標(biāo)計(jì)數(shù)reg9:0 x_cnt;/行坐標(biāo)reg9:0 y_cnt;/列坐標(biāo)reg7:0 char_line0,char_line1,char_line2,char_line3,char_line4,char_line5;reg7:0 char_line6,char_line7,char_line8,char_line9,char_linea;reg7:0 char_lineb,char_linec,char_lined,
29、char_linee,char_linef;always (posedge clk_25m or negedge rst_n)if(!rst_n) x_cnt <= 10'd0;else if(x_cnt = 10'd799) x_cnt <= 10'd0;else x_cnt <= x_cnt+1'b1;always (posedge clk_25m or negedge rst_n)if(!rst_n) y_cnt <= 10'd0;else if(y_cnt = 10'd524) y_cnt <= 10'
30、;d0;else if(x_cnt = 10'd799) y_cnt <= y_cnt+1'b1;/-/ VGA場(chǎng)同步,行同步信號(hào)reg hsync_r,vsync_r;/同步信號(hào) always (posedge clk_25m or negedge rst_n)if(!rst_n) hsync_r <= 1'b1;else if(x_cnt = 10'd0) hsync_r <= 1'b0;/產(chǎn)生hsync信號(hào)else if(x_cnt = 10'd96) hsync_r <= 1'b1;always (pose
31、dge clk_25m or negedge rst_n)if(!rst_n) vsync_r <= 1'b1; else if(y_cnt = 10'd0) vsync_r <= 1'b0;/產(chǎn)生vsync信號(hào)else if(y_cnt = 10'd2) vsync_r <= 1'b1;assign hsync = hsync_r;assign vsync = vsync_r;/-/有效顯示標(biāo)志位產(chǎn)生reg valid_yr;/行顯示有效信號(hào)always (posedge clk_25m or negedge rst_n)if(!rs
32、t_n) valid_yr <= 1'b0;else if(y_cnt = 10'd32) valid_yr <= 1'b1;else if(y_cnt = 10'd512) valid_yr <= 1'b0;wire valid_y = valid_yr;reg valid_r;/ VGA有效顯示區(qū)標(biāo)志位always (posedge clk_25m or negedge rst_n)if(!rst_n) valid_r <= 1'b0;else if(x_cnt = 10'd141) && va
33、lid_y) valid_r <= 1'b1;else if(x_cnt = 10'd781) && valid_y) valid_r <= 1'b0;wire valid = valid_r;/wire9:0 x_dis;/橫坐標(biāo)顯示有效區(qū)域相對(duì)坐標(biāo)值0-639wire9:0 y_dis;/豎坐標(biāo)顯示有效區(qū)域相對(duì)坐標(biāo)值0-479/assign x_dis = x_cnt - 10'd142;assign y_dis = y_cnt - 10'd33;/-/- / VGA色彩信號(hào)產(chǎn)生/*RGB = 000 黑色RGB = 10
34、0紅色= 001 藍(lán)色= 101紫色= 010綠色= 110黃色= 011青色= 111白色*/*EDN字模參數(shù)*/always (ps2_asci)begin if(ps2_asci=8'h30) begin char_line0<= 8'h00; char_line1 <= 8'h00; char_line2 <= 8'h00; char_line3 <= 8'h18; char_line4 <= 8'h24; char_line5 <= 8'h42; char_line6 <= 8'
35、h42; char_line7 <= 8'h42;char_line8 <= 8'h42;char_line9 <= 8'h42;char_linea <= 8'h42;char_lineb <= 8'h42;char_linec <= 8'h24;char_lined <= 8'h18;char_linee <= 8'h00;char_linef <= 8'h00; /0endelse if(ps2_asci=8'h31) begin char_line0&l
36、t;= 8'h00;char_line1 <= 8'h00;char_line2 <= 8'h10;char_line3 <= 8'h70;char_line4 <= 8'h10;char_line5 <= 8'h10;char_line6 <= 8'h10;char_line7 <= 8'h10;char_line8 <= 8'h10;char_line9 <= 8'h10;char_linea <= 8'h10;char_lineb <=
37、 8'h10;char_linec <= 8'h7C;char_lined <= 8'h00;char_linef <= 8'h00; /1end else if(ps2_asci=8'h32) begin char_line0<= 8'h00;char_line1 <= 8'h00;char_line2 <= 8'h3C;char_line3 <= 8'h42;char_line4 <= 8'h42;char_line5 <= 8'h42;char_l
38、ine6 <= 8'h04;char_line7 <= 8'h04;char_line8 <= 8'h08;char_line9 <= 8'h10;char_linea <= 8'h20;char_linec <= 8'h42;char_lined <= 8'h7E;char_linee <= 8'h00;char_linef <= 8'h00;/2end else if(ps2_asci=8'h33) begin char_line0<= 8'h
39、00;char_line1 <= 8'h00;char_line2 <= 8'h00;char_line3 <= 8'h3C;char_line4 <= 8'h42;char_line5 <= 8'h42;char_line6 <= 8'h04;char_line7 <= 8'h18;char_line8 <= 8'h04;char_line9 <= 8'h02;char_linea <= 8'h02;char_lineb <= 8'h42;
40、char_linec <= 8'h44;char_lined <= 8'h38;char_linee <= 8'h00;char_linef <= 8'h00; /3end else if(ps2_asci=8'h34) begin char_line0<= 8'h00;char_line1 <= 8'h00;char_line2 <= 8'h00;char_line3 <= 8'h04;char_line4 <= 8'h0C;char_line5 <=
41、8'h14;char_line6 <= 8'h24;char_line7 <= 8'h24;char_line8 <= 8'h44;char_line9 <= 8'h44;char_linea <= 8'h7E;char_lineb <= 8'h04;char_linec <= 8'h04;char_lined <= 8'h1E;char_linee <= 8'h00;char_linef <= 8'h00; /4end else if(ps2_a
42、sci=8'h35) begin char_line0<= 8'h00;char_line1 <= 8'h00;char_line2 <= 8'h00;char_line3 <= 8'h7E;char_line4 <= 8'h40;char_line5 <= 8'h40;char_line6 <= 8'h40;char_line7 <= 8'h58;char_line8 <= 8'h64;char_line9 <= 8'h02;char_linea
43、 <= 8'h02;char_lineb <= 8'h42;char_linec <= 8'h44;char_lined <= 8'h38;char_linee <= 8'h00;char_linef <= 8'h00; /5end else if(ps2_asci=8'h36)beginchar_line0 <= 8'h00;char_line1 <= 8'h00;char_line2 <= 8'h00;char_line3 <= 8'h1C;c
44、har_line4 <= 8'h24;char_line5 <= 8'h40;char_line6 <= 8'h40;char_line7 <= 8'h58;char_line8 <= 8'h64;char_line9 <= 8'h42;char_linea <= 8'h42;char_lineb <= 8'h42;char_linec <= 8'h24;char_lined <= 8'h18;char_linee <= 8'h00;char
45、_linef <= 8'h00; /6end else if(ps2_asci=8'h37) begin char_line0<= 8'h00;char_line1 <= 8'h00;char_line2 <= 8'h00;char_line3 <= 8'h7E;char_line4 <= 8'h44;char_line5 <= 8'h44;char_line6 <= 8'h08;char_line7 <= 8'h08;char_line8 <= 8
46、9;h10;char_line9 <= 8'h10;char_linea <= 8'h10;char_lineb <= 8'h10;char_linec <= 8'h10;char_lined <= 8'h10;char_linee <= 8'h00;char_linef <= 8'h00; /7end else if(ps2_asci=8'h38) begin char_line0<= 8'h00;char_line1 <= 8'h00;char_line2
47、<= 8'h00;char_line3 <= 8'h3C;char_line4 <= 8'h42;char_line5 <= 8'h42;char_line6 <= 8'h42;char_line7 <= 8'h24;char_line8 <= 8'h18;char_line9 <= 8'h24;char_linea <= 8'h42;char_lineb <= 8'h42;char_linec <= 8'h42;char_lined <
48、;= 8'h3C;char_linee <= 8'h00;char_linef <= 8'h00; /8end else if(ps2_asci=8'h39) begin char_line0<= 8'h00;char_line1 <= 8'h00;char_line2 <= 8'h00;char_line3 <= 8'h18;char_line4 <= 8'h24;char_line5 <= 8'h42;char_line6 <= 8'h42;char
49、_line7 <= 8'h42;char_line8 <= 8'h26;char_line9 <= 8'h1A;char_linea <= 8'h02;char_lineb <= 8'h02;char_linec <= 8'h24;char_lined <= 8'h38;char_linee <= 8'h00;char_linef <= 8'h00; /9end else if(ps2_asci=8'h41) begin char_line0<= 8
50、9;h00;char_line1 <= 8'h00;char_line2 <= 8'h00;char_line3 <= 8'h10;char_line4 <= 8'h10;char_line5 <= 8'h18;char_line6 <= 8'h28;char_line7 <= 8'h28;char_line8 <= 8'h24;char_line9 <= 8'h3C;char_linea <= 8'h44;char_lineb <= 8'h
51、42;char_linec <= 8'h42;char_lined <= 8'hE7;char_linee <= 8'h00;char_linef <= 8'h00;/Aendelse if(ps2_asci=8'h42) begin char_line0<= 8'h00;char_line1 <= 8'h00;char_line2 <= 8'h00;char_line3 <= 8'hF8;char_line4 <= 8'h44;char_line5 <=
52、 8'h44;char_line6 <= 8'h44;char_line7 <= 8'h78;char_line8 <= 8'h44;char_line9 <= 8'h42;char_linea <= 8'h42;char_lineb <= 8'h42;char_linec <= 8'h44;char_lined <= 8'hF8;char_linee <= 8'h00;char_linef <= 8'h00; /Bendelse if(ps2_a
53、sci= 8'h43) begin char_line0<= 8'h00;char_line1 <= 8'h00;char_line2 <= 8'h00;char_line3 <= 8'h3E;char_line4 <= 8'h42;char_line5 <= 8'h42;char_line6 <= 8'h80;char_line7 <= 8'h80;char_line8 <= 8'h80;char_line9 <= 8'h80;char_line
54、a <= 8'h80;char_lineb <= 8'h42;char_linec <= 8'h44;char_lined <= 8'h38;char_linee <= 8'h00;char_linef <= 8'h00;/Cend else if(ps2_asci=8'h44) begin char_line0<= 8'h00;char_line1 <= 8'h00;char_line2 <= 8'h00;char_line3 <= 8'hF8;
55、char_line4 <= 8'h44;char_line5 <= 8'h42;char_line6 <= 8'h42;char_line7 <= 8'h42;char_line8 <= 8'h42;char_line9 <= 8'h42;char_linea <= 8'h42;char_lineb <= 8'h42;char_linec <= 8'h44;char_lined <= 8'hF8;char_linee <= 8'h00;cha
56、r_linef <= 8'h00; /Dend else if(ps2_asci=8'h45) beginchar_line0<= 8'h00;char_line1 <= 8'h00;char_line2 <= 8'h00;char_line3 <= 8'hFC;char_line4 <= 8'h42;char_line5 <= 8'h48;char_line6 <= 8'h48;char_line7 <= 8'h78;char_line8 <= 8
57、9;h48;char_line9 <= 8'h48;char_linea <= 8'h40;char_lineb <= 8'h42;char_linec <= 8'h42;char_lined <= 8'hFC;char_linee <= 8'h00;char_linef <= 8'h00;/Eend else begin char_line0<= 8'h00;char_line1 <= 8'h00;char_line2 <= 8'h00;char_lin
58、e3 <= 8'hFC;char_line4 <= 8'h42;char_line5 <= 8'h48;char_line6 <= 8'h48;char_line7 <= 8'h78;char_line8 <= 8'h48;char_line9 <= 8'h48;char_linea <= 8'h40;char_lineb <= 8'h40;char_linec <= 8'h40;char_lined <= 8'hE0;char_linee <= 8'h00;char_linef <= 8'h00;/Fendendreg4:0 char_bit;/顯示位計(jì)算always (posedge clk_25m or negedge rst_n)if(!rst_n) char_bit <= 5'h1f;else if(x_cnt =
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度天然氣儲(chǔ)備庫(kù)安全運(yùn)營(yíng)管理合同
- 二零二五年度工業(yè)設(shè)備安裝與調(diào)試服務(wù)合同3篇
- 二零二五版快遞企業(yè)快遞物品安全防護(hù)合同大全3篇
- 2025年度城市綜合體門頭廣告品牌形象改造合同3篇
- 2025年度拆遷安置房交易全程跟蹤服務(wù)合同協(xié)議3篇
- 個(gè)人消費(fèi)性借款合同(2024版)9篇
- 二零二五年度可再生能源發(fā)電特許經(jīng)營(yíng)合作協(xié)議合同范本
- 二零二五年度醫(yī)療健康信息化運(yùn)維保障合同2篇
- 2025版商業(yè)物業(yè)安全責(zé)任書(含應(yīng)急預(yù)案)3篇
- 2025年度個(gè)性化產(chǎn)后恢復(fù)與新生兒護(hù)理個(gè)人月嫂服務(wù)協(xié)議4篇
- 《裝配式蒸壓加氣混凝土外墻板保溫系統(tǒng)構(gòu)造》中
- T-CSTM 01124-2024 油氣管道工程用工廠預(yù)制袖管三通
- 2019版新人教版高中英語必修+選擇性必修共7冊(cè)詞匯表匯總(帶音標(biāo))
- 新譯林版高中英語必修二全冊(cè)短語匯總
- 基于自適應(yīng)神經(jīng)網(wǎng)絡(luò)模糊推理系統(tǒng)的游客規(guī)模預(yù)測(cè)研究
- 河道保潔服務(wù)投標(biāo)方案(完整技術(shù)標(biāo))
- 品管圈(QCC)案例-縮短接臺(tái)手術(shù)送手術(shù)時(shí)間
- 精神科病程記錄
- 閱讀理解特訓(xùn)卷-英語四年級(jí)上冊(cè)譯林版三起含答案
- 清華大學(xué)考博英語歷年真題詳解
- 人教版三年級(jí)上冊(cè)口算題(全冊(cè)完整20份 )
評(píng)論
0/150
提交評(píng)論