基于FPGA的PS2鍵盤鼠標(biāo)控制電子琴_第1頁(yè)
基于FPGA的PS2鍵盤鼠標(biāo)控制電子琴_第2頁(yè)
基于FPGA的PS2鍵盤鼠標(biāo)控制電子琴_第3頁(yè)
基于FPGA的PS2鍵盤鼠標(biāo)控制電子琴_第4頁(yè)
基于FPGA的PS2鍵盤鼠標(biāo)控制電子琴_第5頁(yè)
已閱讀5頁(yè),還剩24頁(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è)技術(shù)學(xué)院信息工程系08級(jí)畢 業(yè) 論 文姓 名: 江 太 平 班 級(jí): 08通信電子 設(shè)計(jì)題目:基于FPGA的PS/2鍵盤鼠標(biāo)控制電子琴 指導(dǎo)教師: 吳 康 二一一年五月目錄第一章 FPGA簡(jiǎn)介1.1 FPGA背景1.2 FPGA芯片結(jié)構(gòu)1.3 FPGA的基本特點(diǎn)第二章 FPGA工作原理2.1 查找表(Look-Up-Table)的原理與結(jié)構(gòu)2.2 FPGA工作原理第三章 PS2鍵盤通信3.1 PS2 背景3.2 PS2鍵盤通信3.3 VGA原理第四章 PS2鍵盤控制模型電子琴頂層電路的設(shè)計(jì) 4.1 PS2鍵盤控制電子琴程序結(jié)論、參考文獻(xiàn)第一章 FPGA簡(jiǎn)介1.1 FPGA背景FPG

2、A主要生產(chǎn)廠商1、Altera 2、Xilinx 3、Actel 4、Lattice 其中Altera作為世界老牌可編程邏輯器件的廠家,是當(dāng)前世界范圍內(nèi)市場(chǎng)占有率最大的廠家,它和Xilinx主要生產(chǎn)一般用途FPGA,其主要產(chǎn)品采用RAM工藝。Actel主要提供非易失性FPGA,產(chǎn)品主要基于反熔絲工藝和FLASH工藝。 目前以硬件描述語(yǔ)言(Verilog 或 VHDL)所完成的電路設(shè)計(jì),可以經(jīng)過(guò)簡(jiǎn)單的綜合與布局,快速的燒錄至 FPGA 上進(jìn)行測(cè)試,是現(xiàn)代 IC 設(shè)計(jì)驗(yàn)證的技術(shù)主流。這些可編輯元件可以被用來(lái)實(shí)現(xiàn)一些基本的邏輯門電路(比如AND、OR、XOR、NOT)或者更復(fù)雜一些的組合功能比如解碼

3、器或數(shù)學(xué)方程式。在大多數(shù)的FPGA里面,這些可編輯的元件里也包含記憶元件例如觸發(fā)器(Flipflop)或者其他更加完整的記憶塊。 系統(tǒng)設(shè)計(jì)師可以根據(jù)需要通過(guò)可編輯的連接把FPGA內(nèi)部的邏輯塊連接起來(lái),就好像一個(gè)電路試驗(yàn)板被放在了一個(gè)芯片里。一個(gè)出廠后的成品FPGA的邏輯塊和連接可以按照設(shè)計(jì)者而改變,所以FPGA可以完成所需要的邏輯功能。 FPGA一般來(lái)說(shuō)比ASIC(專用集成芯片)的速度要慢,無(wú)法完成復(fù)雜的設(shè)計(jì),而且消耗更多的電能。但是他們也有很多的優(yōu)點(diǎn)比如可以快速成品,可以被修改來(lái)改正程序中的錯(cuò)誤和更便宜的造價(jià)。廠商也可能會(huì)提供便宜的但是編輯能力差的FPGA。因?yàn)檫@些芯片有比較差的可編輯能力,

4、所以這些設(shè)計(jì)的開(kāi)發(fā)是在普通的FPGA上完成的,然后將設(shè)計(jì)轉(zhuǎn)移到一個(gè)類似于ASIC的芯片上。另外一種方法是用CPLD(復(fù)雜可編程邏輯器件備)。FPGA采用了邏輯單元陣列LCA(Logic Cell Array)這樣一個(gè)概念,內(nèi)部包括可配置邏輯模塊CLB(Configurable Logic Block)、輸出輸入模塊IOB(Input Output Block)和內(nèi)部連線(Interconnect)三個(gè)部分。 1.2 FPGA芯片結(jié)構(gòu)目前主流的FPGA仍是基于查找表技術(shù)的,已經(jīng)遠(yuǎn)遠(yuǎn)超出了先前版本的基本性能,并且整合了常用功能(如RAM、時(shí)鐘管理和DSP)的硬核(ASIC型)模塊。如圖1-1所示(

5、注:圖1-1只是一個(gè)示意圖,實(shí)際上每一個(gè)系列的FPGA都有其相應(yīng)的內(nèi)部結(jié)構(gòu)),F(xiàn)PGA芯片主 要由6部分完成,分別為:可編程輸入輸出單元、基本可編程邏輯單元、完整的時(shí)鐘管理、嵌入塊式RAM、豐富的布線資源、內(nèi)嵌的底層功能單元和內(nèi)嵌專用硬件模塊。 圖1-1 FPGA芯片的內(nèi)部結(jié)構(gòu)    FPGA芯片的內(nèi)部結(jié)構(gòu)每個(gè)模塊的功能如下: 1 可編程輸入輸出單元(IOB) 可編程輸入/輸出單元簡(jiǎn)稱I/O單元,是芯片與外界電路的接口部分,完成不同電氣特性下對(duì)輸入/輸出信號(hào)的驅(qū)動(dòng)與匹配要求,其示意結(jié)構(gòu)如圖1-2所示。 FPGA內(nèi)的I/O按組分類,每組都能夠獨(dú)立地支持不同的I/O標(biāo)準(zhǔn)。通過(guò)軟

6、件的靈活配置,可適配不同的電氣標(biāo)準(zhǔn)與I/O物理特性,可以調(diào)整驅(qū)動(dòng)電流的大小,可以改變上、下拉電阻。目前,I/O口的頻率也越來(lái)越高,一些高端的FPGA通過(guò)DDR寄存器技術(shù)可以支持高達(dá)2Gbps的數(shù)據(jù)速率。 圖1-2 典型的IOB內(nèi)部結(jié)構(gòu)示意圖    典型的IOB內(nèi)部結(jié)構(gòu)示意圖外部輸入信號(hào)可以通過(guò)IOB模塊的存儲(chǔ)單元輸入到FPGA的內(nèi)部,也可以直接輸入FPGA 內(nèi)部。當(dāng)外部輸入信號(hào)經(jīng)過(guò)IOB模塊的存儲(chǔ)單元輸入到FPGA內(nèi)部時(shí),其保持時(shí)間(Hold Time)的要求可以降低,通常默認(rèn)為0。 為了便于管理和適應(yīng)多種電器標(biāo)準(zhǔn),F(xiàn)PGA的IOB被劃分為若干個(gè)組(bank),每個(gè)bank

7、的接口標(biāo)準(zhǔn)由其接口電壓VCCO決定,一個(gè)bank只能有 一種VCCO,但不同bank的VCCO可以不同。只有相同電氣標(biāo)準(zhǔn)的端口才能連接在一起,VCCO電壓相同是接口標(biāo)準(zhǔn)的基本條件。 2 可配置邏輯塊(CLB) CLB是FPGA內(nèi)的基本邏輯單元。CLB的實(shí)際數(shù)量和特性會(huì)依器件的不同而不同,但是每個(gè)CLB都包含一個(gè)可配置開(kāi)關(guān)矩陣,此矩陣由4或6個(gè)輸入、一些 選型電路(多路復(fù)用器等)和觸發(fā)器組成。 開(kāi)關(guān)矩陣是高度靈活的,可以對(duì)其進(jìn)行配置以便處理組合邏輯、移位寄存器或RAM。在Xilinx公司的FPGA器件中,CLB由多個(gè)(一般為4個(gè)或2個(gè))相同的Slice和附加邏輯構(gòu)成,如圖1-3所示。每個(gè)CLB模

8、塊不僅可以用于實(shí)現(xiàn)組合邏輯、時(shí)序邏輯,還可以配置為分布式RAM和分布式ROM。 圖1-3 典型的CLB結(jié)構(gòu)示意圖    典型的CLB結(jié)構(gòu)示意圖Slice是Xilinx公司定義的基本邏輯單位,其內(nèi)部結(jié)構(gòu)如圖1-4所示,一個(gè)Slice由兩個(gè)4輸入的函數(shù)、進(jìn)位邏輯、算術(shù)邏輯、存儲(chǔ)邏輯和函數(shù)復(fù)用器組成。算術(shù)邏輯包括一個(gè)異或門(XORG)和一個(gè)專用與門(MULTAND),一個(gè)異或門可以使一個(gè)Slice實(shí)現(xiàn) 2bit全加操作,專用與門用于提高乘法器的效率;進(jìn)位邏輯由專用進(jìn)位信號(hào)和函數(shù)復(fù)用器(MUXC)組成,用于實(shí)現(xiàn)快速的算術(shù)加減法操作;4輸入函數(shù)發(fā)生 器用于實(shí)現(xiàn)4輸入LUT、分布式RA

9、M或16比特移位寄存器(Virtex-5系列芯片的Slice中的兩個(gè)輸入函數(shù)為6輸入,可以實(shí)現(xiàn)6輸入LUT或 64比特移位寄存器);進(jìn)位邏輯包括兩條快速進(jìn)位鏈,用于提高CLB模塊的處理速度。 圖1-4 典型的4輸入Slice結(jié)構(gòu)示意圖    典型的4輸入Slice結(jié)構(gòu)示意圖3 數(shù)字時(shí)鐘管理模塊(DCM) 業(yè)內(nèi)大多數(shù)FPGA均提供數(shù)字時(shí)鐘管理(Xilinx的全部FPGA均具有這種特性)。Xilinx推出最先進(jìn)的FPGA提供數(shù)字時(shí)鐘管理和相位環(huán)路鎖定。相位環(huán)路鎖定能夠提供精確的時(shí)鐘綜合,且能夠降低抖動(dòng),并實(shí)現(xiàn)過(guò)濾功能。 4 嵌入式塊RAM(BRAM) 大多數(shù)FPGA都具有內(nèi)嵌的

10、塊RAM,這大大拓展了FPGA的應(yīng)用范圍和靈活性。塊RAM可被配置為單端口RAM、雙端口RAM、內(nèi)容地址存儲(chǔ)器 (CAM)以及FIFO等常用存儲(chǔ)結(jié)構(gòu)。RAM、FIFO是比較普及的概念,在此就不冗述。CAM存儲(chǔ)器在其內(nèi)部的每個(gè)存儲(chǔ)單元中都有一個(gè)比較邏輯,寫入 CAM中的數(shù)據(jù)會(huì)和內(nèi)部的每一個(gè)數(shù)據(jù)進(jìn)行比較,并返回與端口數(shù)據(jù)相同的所有數(shù)據(jù)的地址,因而在路由的地址交換器中有廣泛的應(yīng)用。除了塊RAM,還可以將 FPGA中的LUT靈活地配置成RAM、ROM和FIFO等結(jié)構(gòu)。在實(shí)際應(yīng)用中,芯片內(nèi)部塊RAM的數(shù)量也是選擇芯片的一個(gè)重要因素。 單片塊RAM的容量為18k比特,即位寬為18比特、深度為1024,可以

11、根據(jù)需要改變其位寬和深度,但要滿足兩個(gè)原則:首先,修改后的容量(位寬 深度)不能大于18k比特;其次,位寬最大不能超過(guò)36比特。當(dāng)然,可以將多片塊RAM級(jí)聯(lián)起來(lái)形成更大的RAM,此時(shí)只受限于芯片內(nèi)塊RAM的數(shù)量,而 不再受上面兩條原則約束。 5 豐富的布線資源 布線資源連通FPGA內(nèi)部的所有單元,而連線的長(zhǎng)度和工藝決定著信號(hào)在連線上的驅(qū)動(dòng)能力和傳輸速度。FPGA芯片內(nèi)部有著豐富的布線資源,根據(jù)工藝、長(zhǎng)度、寬度和分布位置的不同而劃分為類不同的類別。第一類是全局布線資源,用于芯片內(nèi)部全局時(shí)鐘和全局復(fù)位/置位的布線;第二類是長(zhǎng)線資源,用以完成芯片 Bank間的高速信號(hào)和第二全局時(shí)鐘信號(hào)的布線;第三類

12、是短線資源,用于完成基本邏輯單元之間的邏輯互連和布線;第四類是分布式的布線資源,用于專有時(shí)鐘、復(fù)位等控制信號(hào)線。 在實(shí)際中設(shè)計(jì)者不需要直接選擇布線資源,布局布線器可自動(dòng)地根據(jù)輸入邏輯網(wǎng)表的拓?fù)浣Y(jié)構(gòu)和約束條件選擇布線資源來(lái)連通各個(gè)模塊單元。從本質(zhì)上講,布線資源的使用方法和設(shè)計(jì)的結(jié)果有密切、直接的關(guān)系。 6 底層內(nèi)嵌功能單元 內(nèi)嵌功能模塊主要指DLL(Delay Locked Loop)、PLL(Phase Locked Loop)、DSP和CPU等軟處理核(SoftCore)?,F(xiàn)在越來(lái)越豐富的內(nèi)嵌功能單元,使得單片F(xiàn)PGA成為了系統(tǒng)級(jí)的設(shè)計(jì)工具,使其具備了軟硬件聯(lián)合設(shè)計(jì)的能力,逐步向SOC平臺(tái)過(guò)

13、渡。 DLL和PLL具有類似的功能,可以完成時(shí)鐘高精度、低抖動(dòng)的倍頻和分頻,以及占空比調(diào)整和移相等功能。Xilinx公司生產(chǎn)的芯片上集成了 DLL,Altera公司的芯片集成了PLL,Lattice公司的新型芯片上同時(shí)集成了PLL和DLL。PLL 和DLL可以通過(guò)IP核生成的工具方便地進(jìn)行管理和配置。DLL的結(jié)構(gòu)如圖1-5所示。 圖1-5 典型的DLL模塊示意圖    典型的DLL模塊示意圖7. 內(nèi)嵌專用硬核 內(nèi)嵌專用硬核是相對(duì)底層嵌入的軟核而言的,指FPGA處理能力強(qiáng)大的硬核(Hard Core),等效于ASIC電路。為了提高FPGA性能,芯片生產(chǎn)商在芯片內(nèi)部集成了一些專

14、用的硬核。例如:為了提高FPGA的乘法速度,主流的FPGA 中都集成了專用乘法器;為了適用通信總線與接口標(biāo)準(zhǔn),很多高端的FPGA內(nèi)部都集成了串并收發(fā)器(SERDES),可以達(dá)到數(shù)十Gbps的收發(fā)速度。 Xilinx公司的高端產(chǎn)品不僅集成了Power PC系列CPU,還內(nèi)嵌了DSP Core模塊,其相應(yīng)的系統(tǒng)級(jí)設(shè)計(jì)工具是EDK和Platform Studio,并依此提出了片上系統(tǒng)(System on Chip)的概念。通過(guò)PowerPC、Miroblaze、Picoblaze等平臺(tái),能夠開(kāi)發(fā)標(biāo)準(zhǔn)的DSP處理器及其相關(guān)應(yīng)用,達(dá)到SOC的開(kāi)發(fā)目 的。 1.3 FPGA的基本特點(diǎn)FPGA的基本特點(diǎn):1

15、)采用FPGA設(shè)計(jì)ASIC電路(專用集成電路),用戶不需要投片生產(chǎn),就能得到合用的芯片。 2)FPGA可做其它全定制或半定制ASIC電路的中試樣片。 3)FPGA內(nèi)部有豐富的觸發(fā)器和IO引腳。 4)FPGA是ASIC電路中設(shè)計(jì)周期最短、開(kāi)發(fā)費(fèi)用最低、風(fēng)險(xiǎn)最小的器件之一。 5) FPGA采用高速CHMOS工藝,功耗低,可以與CMOS、TTL電平兼容。 可以說(shuō),F(xiàn)PGA芯片是小批量系統(tǒng)提高系統(tǒng)集成度、可靠性的最佳選擇之一。 FPGA是由存放在片內(nèi)RAM中的程序來(lái)設(shè)置其工作狀態(tài)的,因此,工作時(shí)需要對(duì)片內(nèi)的RAM進(jìn)行編程。用戶可以根據(jù)不同的配置模式,采用不同的編程方式。 加電時(shí),F(xiàn)PGA芯片將EPRO

16、M中數(shù)據(jù)讀入片內(nèi)編程RAM中,配置完成后,F(xiàn)PGA進(jìn)入工作狀態(tài)。掉電后,F(xiàn)PGA恢復(fù)成白片,內(nèi)部邏輯關(guān)系消失,因此,F(xiàn)PGA能夠反復(fù)使用。FPGA的編程無(wú)須專用的FPGA編程器,只須用通用的EPROM、PROM編程器即可。當(dāng)需要修改FPGA功能時(shí),只需換一片EPROM即可。這樣,同一片F(xiàn)PGA,不同的編程數(shù)據(jù),可以產(chǎn)生不同的電路功能。因此,F(xiàn)PGA的使用非常靈活。 FPGA配置模式FPGA有多種配置模式:并行主模式為一片F(xiàn)PGA加一片EPROM的方式;主從模式可以支持一片PROM編程多片F(xiàn)PGA;串行模式可以采用串行PROM編程FPGA;外設(shè)模式可以將FPGA作為微處理器的外設(shè),由微處理器對(duì)其

17、編程。 如何實(shí)現(xiàn)快速的時(shí)序收斂、降低功耗和成本、優(yōu)化時(shí)鐘管理并降低FPGA與PCB并行設(shè)計(jì)的復(fù)雜性等問(wèn)題,一直是采用FPGA的系統(tǒng)設(shè)計(jì)工程師需要考慮的關(guān)鍵問(wèn)題。如今,隨著FPGA向更高密度、更大容量、更低功耗和集成更多IP的方向發(fā)展,系統(tǒng)設(shè)計(jì)工程師在從這些優(yōu)異性能獲益的同時(shí),不得不面對(duì)由于FPGA前所未有的性能和能力水平而帶來(lái)的新的設(shè)計(jì)挑戰(zhàn)。 例如,領(lǐng)先FPGA廠商Xilinx最近推出的Virtex-5系列采用65nm工藝,可提供高達(dá)33萬(wàn)個(gè)邏輯單元、1,200個(gè)I/O和大量硬IP塊。超大容量和密度使復(fù)雜的布線變得更加不可預(yù)測(cè),由此帶來(lái)更嚴(yán)重的時(shí)序收斂問(wèn)題。此外,針對(duì)不同應(yīng)用而集成的更多數(shù)量的

18、邏輯功能、DSP、嵌入式處理和接口模塊,也讓時(shí)鐘管理和電壓分配問(wèn)題變得更加困難。 幸運(yùn)地是,F(xiàn)PGA廠商、EDA工具供應(yīng)商正在通力合作解決65nm FPGA獨(dú)特的設(shè)計(jì)挑戰(zhàn)。不久以前,Synplicity與Xilinx宣布成立超大容量時(shí)序收斂聯(lián)合工作小組,旨在最大程度地幫助系統(tǒng)設(shè)計(jì)工程師以更快、更高效的方式應(yīng)用65nm FPGA器件。設(shè)計(jì)軟件供應(yīng)商Magma推出的綜合工具Blast FPGA能幫助建立優(yōu)化的布局,加快時(shí)序的收斂。 最近FPGA的配置方式已經(jīng)多元化!第二章 FPGA工作原理FPGA工作原理FPGA采用了邏輯單元陣列LCA(Logic Cell Array)這樣一個(gè)概念,內(nèi)部包括可配

19、置邏輯模塊CLB(Configurable Logic Block)、輸出輸入模塊IOB(Input Output Block)和內(nèi)部連線(Interconnect)三個(gè)部分。 2.1 查找表(Look-Up-Table)的原理與結(jié)構(gòu)采用這種結(jié)構(gòu)的PLD芯片我們也可以稱之為FPGA:如altera的ACEX,APEX系列,xilinx的Spartan,Virtex系列等。查找表(Look-Up-Table)簡(jiǎn)稱為L(zhǎng)UT,LUT本質(zhì)上就是一個(gè)RAM。目前FPGA中多使用4輸入的LUT,所以每一個(gè)LUT可以看成一個(gè)有4位地址線的16x1的RAM。當(dāng)用戶通過(guò)原理圖或HDL語(yǔ)言描述了一個(gè)邏輯電路以后,

20、PLD/FPGA開(kāi)發(fā)軟件會(huì)自動(dòng)計(jì)算邏輯電路的所有可能的結(jié)果,并把結(jié)果事先寫入RAM,這樣,每輸入一個(gè)信號(hào)進(jìn)行邏輯運(yùn)算就等于輸入一個(gè)地址進(jìn)行查表,找出地址對(duì)應(yīng)的內(nèi)容,然后輸出即可。下面是一個(gè)4輸入與門的例子,實(shí)際邏輯電路LUT的實(shí)現(xiàn)方式a,b,c,d 輸入邏輯輸出地址RAM中存儲(chǔ)的內(nèi)容00000000000001000010.0.01111111111一.基于查找表(LUT)的FPGA的結(jié)構(gòu)我們看一看xilinx Spartan-II的內(nèi)部結(jié)構(gòu),如下圖:xilinx Spartan-II 芯片內(nèi)部結(jié)構(gòu)Slices結(jié)構(gòu)Spartan-II主要包括CLBs,I/O塊,RAM塊和可編程連線(未表示出)

21、。在spartan-II中,一個(gè)CLB包括2個(gè)Slices,每個(gè)slices包括兩個(gè)LUT,兩個(gè)觸發(fā)器和相關(guān)邏輯。 Slices可以看成是SpartanII實(shí)現(xiàn)邏輯的最基本結(jié)構(gòu) (xilinx其他系列,如SpartanXL,Virtex的結(jié)構(gòu)與此稍有不同,具體請(qǐng)參閱數(shù)據(jù)手冊(cè))altera的FLEX/ACEX等芯片的結(jié)構(gòu)如下圖: altera FLEX/ACEX 芯片的內(nèi)部結(jié)構(gòu) 邏輯單元(LE)內(nèi)部結(jié)構(gòu)FLEX/ACEX的結(jié)構(gòu)主要包括LAB,I/O塊,RAM塊(未表示出)和可編程行/列連線。在FLEX/ACEX中,一個(gè)LAB包括8個(gè)邏輯單元(LE),每個(gè)LE包括一個(gè)LUT,一

22、個(gè)觸發(fā)器和相關(guān)的相關(guān)邏輯。LE是FLEX/ACEX芯片實(shí)現(xiàn)邏輯的最基本結(jié)構(gòu)(altera其他系列,如APEX的結(jié)構(gòu)與此基本相同,具體請(qǐng)參閱數(shù)據(jù)手冊(cè)) 二.查找表結(jié)構(gòu)的FPGA邏輯實(shí)現(xiàn)原理 我們還是以這個(gè)電路的為例:A,B,C,D由FPGA芯片的管腳輸入后進(jìn)入可編程連線,然后作為地址線連到到LUT,LUT中已經(jīng)事先寫入了所有可能的邏輯結(jié)果,通過(guò)地址查找到相應(yīng)的數(shù)據(jù)然后輸出,這樣組合邏輯就實(shí)現(xiàn)了。該電路中D觸發(fā)器是直接利用LUT后面D觸發(fā)器來(lái)實(shí)現(xiàn)。時(shí)鐘信號(hào)CLK由I/O腳輸入后進(jìn)入芯片內(nèi)部的時(shí)鐘專用通道,直接連接到觸發(fā)器的時(shí)鐘端。觸發(fā)器的輸出與I/O腳相連,把結(jié)果輸出到芯片管腳

23、。這樣PLD就完成了圖3所示電路的功能。(以上這些步驟都是由軟件自動(dòng)完成的,不需要人為干預(yù))這個(gè)電路是一個(gè)很簡(jiǎn)單的例子,只需要一個(gè)LUT加上一個(gè)觸發(fā)器就可以完成。對(duì)于一個(gè)LUT無(wú)法完成的的電路,就需要通過(guò)進(jìn)位邏輯將多個(gè)單元相連,這樣FPGA就可以實(shí)現(xiàn)復(fù)雜的邏輯。由于LUT主要適合SRAM工藝生產(chǎn),所以目前大部分FPGA都是基于SRAM工藝的,而SRAM工藝的芯片在掉電后信息就會(huì)丟失,一定需要外加一片專用配置芯片,在上電的時(shí)候,由這個(gè)專用配置芯片把數(shù)據(jù)加載到FPGA中,然后FPGA就可以正常工作,由于配置時(shí)間很短,不會(huì)影響系統(tǒng)正常工作。也有少數(shù)FPGA采用反熔絲或Flash工藝,對(duì)這種FPGA,

24、就不需要外加專用的配置芯片。 第三章 PS2鍵盤通信3.1 PS2背景PS2背景PS/2接口是目前最常見(jiàn)的鼠標(biāo)接口,最初是IBM公司的專利,俗稱“小口”。這是一種鼠標(biāo)和鍵盤的專用接口,是一種6針的圓型接口。但鼠標(biāo)只使用其中的4針傳輸數(shù)據(jù)和供電,其余2個(gè)為空腳。PS/2接口的傳輸速率比COM接口稍快一些,而且是ATX主板的標(biāo)準(zhǔn)接口,是目前應(yīng)用最為廣泛的鼠標(biāo)接口之一,但仍然不能使高檔鼠標(biāo)完全發(fā)揮其性能,而且不支持熱插拔。在BTX主板規(guī)范中,這也是即將被淘汰掉的接口。     需要注意的是,在連接PS/2接口鼠標(biāo)時(shí)不能錯(cuò)誤地插入鍵盤PS/2接口(當(dāng)然,也不能把

25、PS/2鍵盤插入鼠標(biāo)PS/2接口)。一般情況下,符合PC99規(guī)范的主板,其鼠標(biāo)的接口為綠色、鍵盤的接口為紫色,另外也可以從PS/2接口的相對(duì)位置來(lái)判斷:靠近主板PCB的是鍵盤接口,其上方的是鼠標(biāo)接口。  PS2設(shè)備有主從之分,主設(shè)備采用Female插座,從設(shè)備采用Male插頭,現(xiàn)在廣泛實(shí)用的PS2鍵盤鼠標(biāo)均在從設(shè)備方式下工作。PS2接口的時(shí)鐘與數(shù)據(jù)線都是集電極開(kāi)路結(jié)構(gòu)。主從設(shè)備之間數(shù)據(jù)通信采用雙向同步串行方式傳輸,時(shí)鐘信號(hào)由從設(shè)備產(chǎn)生。a.從設(shè)備到主設(shè)備的通信當(dāng)從設(shè)備向主設(shè)備發(fā)送數(shù)據(jù)時(shí),首先檢查時(shí)鐘線,以確認(rèn)時(shí)鐘線是否為高電平。如果是高電平,從設(shè)備就可以開(kāi)始傳輸數(shù)據(jù);反之,

26、從設(shè)備要等待獲得總線的控制權(quán),才能開(kāi)始傳輸數(shù)據(jù)。傳輸?shù)拿恳粠?1位組成,發(fā)送時(shí)序及每一位的含義如圖2所示。每一幀數(shù)據(jù)中開(kāi)始位總是為0,數(shù)據(jù)校驗(yàn)采用奇校驗(yàn)方式,停止位始終為1。從設(shè)備到主設(shè)備通信時(shí),從設(shè)備總是在時(shí)鐘線為高時(shí)改變數(shù)據(jù)線狀態(tài),主設(shè)備在時(shí)鐘下降沿讀入數(shù)據(jù)線狀態(tài)。如表1所示:3.2 PS2鍵盤通信目前,鍵盤有許多種,PS2鍵盤是當(dāng)今PC機(jī)最常用的種類,這里僅涉及最常用的鍵盤,也就是6引腳發(fā)送數(shù)據(jù)的鍵盤。鍵盤通信時(shí)需要四根連接線:電源線、地線、時(shí)鐘線CLK、數(shù)據(jù)線DATA。DATA和CLK是可雙向通信的I/O線,也就是說(shuō),通過(guò)這兩根線,即可以把主機(jī)的數(shù)據(jù)發(fā)送到PS2設(shè)備,又可以把設(shè)備的數(shù)

27、據(jù)發(fā)向主機(jī)。在無(wú)鍵按下時(shí),DATA和CLK一直處于高電平狀態(tài)。但有鍵按下時(shí),鍵盤先檢查CLK,看它是否處于處于高電平,如果是處在低電平,說(shuō)明主機(jī)無(wú)空閑接受數(shù)據(jù),這時(shí)鍵盤將會(huì)把數(shù)據(jù)放在自己的緩沖區(qū),直到CLK重新被拉高。鍵盤CLK首先產(chǎn)生下降沿,這時(shí)已在數(shù)據(jù)線上產(chǎn)生信號(hào),如:起始位總是為0,之后每一個(gè)時(shí)鐘周期時(shí)鐘電平為高時(shí)數(shù)據(jù)線上加將要輸出的電平,在時(shí)鐘的下降沿它將被主機(jī)讀取。3.3 原理掃描是從屏幕的左上方開(kāi)始的,從左到右、從上到下地進(jìn)行掃描。每掃描完一行,電子束就會(huì)回到屏幕左邊下一行的起始位置。在這期間,CRT對(duì)電子束進(jìn)行消隱。每行結(jié)束時(shí),用行同步信號(hào)進(jìn)行行同步。掃描完所有行后,用場(chǎng)同步信號(hào)

28、進(jìn)行場(chǎng)同步,并使掃描回到屏幕的左上方,同時(shí)進(jìn)行場(chǎng)消隱,預(yù)備下一次的掃描。PS2鍵盤控制模型電子琴頂層電路的設(shè)計(jì)如圖所示,該圖是電子琴頂層設(shè)計(jì)電路。按實(shí)現(xiàn)功能電路主要分成這幾個(gè)模塊:1) 鎖相環(huán)、用宏模塊搭建的22位.23位.24位計(jì)數(shù)器、用Verilog寫的時(shí)鐘分頻模塊fdiv:1 提供25MHz的時(shí)鐘信號(hào)驅(qū)動(dòng)VGA顯示2 與24位計(jì)數(shù)器結(jié)合提供1Hz給數(shù)字時(shí)鐘用以計(jì)時(shí)3 與23位計(jì)數(shù)器結(jié)合提供2MHz給CNT138T與rom_qupu以控制節(jié)奏4 與22位計(jì)數(shù)器結(jié)合提供4MHz給cnt10b以控制RAM的地址5 與fdiv結(jié)合提供1MHz給SPEAK2) 模塊PS2_2:PS2通信模塊,將鍵

29、盤輸出碼轉(zhuǎn)換為ASCII碼,只處理字母3) 二進(jìn)制編碼器CODE3:根據(jù)鍵盤碼的ASCII碼,用verilog寫高、中、低三個(gè)音階的分別對(duì)應(yīng)的鍵盤字母代碼,與F_CODE模塊相對(duì)應(yīng),以此來(lái)擴(kuò)大音域4) 模塊F_CODE:1 模塊F_CODE的功能首先是為模塊SPKER提供決定所發(fā)音符的分頻預(yù)置數(shù),而此數(shù)在SPKER輸入口停留的時(shí)間即為此音符的節(jié)拍長(zhǎng)度。2 同時(shí),F(xiàn)_CODE把CODE3中音符的代碼轉(zhuǎn)化為音符頻率所對(duì)應(yīng)的數(shù)值3 與模塊DECL7S結(jié)合顯示音符4 H3.0顯示0,1,2表示高、中、低三個(gè)音階5) 模塊DECL7S:7段譯碼顯示模塊,在數(shù)碼管上顯示1,2,3,4,5,6,7音符6)

30、模塊RAM:與模塊cnt10b結(jié)合記錄彈奏的樂(lè)曲7) 模塊ROM:與模塊cnt138b結(jié)合可自動(dòng)播放儲(chǔ)存的音樂(lè)8) 模塊shizhong:可記錄彈奏時(shí)間9) 模塊VGA:顯示按鍵的位置,當(dāng)音樂(lè)響時(shí)同步顯示對(duì)應(yīng)的音的鍵盤位置10)模塊SPEAK輸出每一個(gè)音符的音調(diào)11)模塊MUX21選擇播放中的音樂(lè)或中的儲(chǔ)存音樂(lè)第四章 PS2鍵盤控制電子琴(VHDL)4.1 PS2鍵盤控制電子琴程序共分為DIV1、DIV2分頻模塊,PS2鍵盤控制模塊,music發(fā)音模塊,tone音符分頻模塊,spk發(fā)聲模塊。library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.ST

31、D_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;- Uncomment the following library declaration if instantiating- any Xilinx primitives in this code.-library UNISIM;-use UNISIM.VComponents.all;entity Div1 is    PORT(clk_50mhz: IN STD_LOGIC;           

32、0;-輸入時(shí)鐘為50MHZ;     c0: OUT STD_LOGIC;c1: OUT STD_LOGIC);      END Div1;architecture art of Div1 isbeginD1: PROCESS(clk_50mhz)          -工作進(jìn)程開(kāi)始,將50MHZ時(shí)鐘50分頻,=1MHZ;  VARIABLE count6:INTEGER RANGE 0 TO 50;   BEGIN

33、  IF(clk_50mhz 'EVENT AND clk_50mhz ='1')THEN         count6:=count6+1;                     IF count6=25 THEN               

34、;    c0 <='1'   ELSIF count6=50 THEN     c0 <='0' count6:=0;END IF;END IF;END PROCESS;D2: PROCESS(clk_50mhz)                -將50MHZ時(shí)鐘100分頻,=0.5MHZ;VARIABLE count7: INTEGER RANGE 0 TO

35、100;BEGINIF(clk_50mhz 'EVENT AND clk_50mhz ='1')THEN         count7:=count7+1;                     IF count7=50 THEN                &

36、#160;  c1<='1'   ELSIF count7=100 THEN     c1 <='0' count7:=0;END IF;END IF;END PROCESS;END art;library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;- Uncomment the following library declar

37、ation if instantiating- any Xilinx primitives in this code.-library UNISIM;-use UNISIM.VComponents.all;entity Div2 is    PORT(clk4: IN STD_LOGIC;            -輸入時(shí)鐘為1MHZ;     c2: OUT STD_LOGIC;         

38、  -輸出100khz;          c3ut std_logic);       -輸出時(shí)鐘為4HZ;END Div2;ARCHITECTURE art OF Div2 ISbeginD1: PROCESS(clk4)          -工作進(jìn)程開(kāi)始,將1MHZ時(shí)鐘10分頻;  VARIABLE count8:INTEGER RANGE 0 TO 10;   BEGI

39、N  IF(clk4 'EVENT AND clk4 ='1')THEN         count8:=count8+1;                     IF count8=5 THEN                 &#

40、160; c2 <='1'   ELSIF count8=10 THEN     c2 <='0' count8:=0;END IF;END IF;END PROCESS;D2: PROCESS(clk4)                -250000分頻;VARIABLE count9: INTEGER RANGE 0 TO 250000;BEGINIF(clk4 'EVE

41、NT AND clk4 ='1')THEN         count9:=count9+1;                     IF count9=125000 THEN                   c3<='1&

42、#39;   ELSIF count9=250000 THEN     c3 <='0' count9:=0;END IF;END IF;END PROCESS;END art;library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;- Uncomment the following library declaration if instantiating- any

43、Xilinx primitives in this code.-library UNISIM;-use UNISIM.VComponents.all;entity ps2 is    Port ( sysclk: in std_logic;                                      ps2clk: in s

44、td_logic;                                      ps2data: in std_logic;                         

45、          reset: in std_logic;       result: out std_logic_vector(7 downto 0); end ps2;architecture art of ps2 issignal ps2clk_r : std_logic_vector(2 downto 0);            signal ps2clkfall : std_logic;

46、60;                           signal q : std_logic_vector(11 downto 0);                  signal ps2serialdata : std_logic_vector(10 downto 0) ;   

47、;  begin        process(sysclk,reset) beginif reset='0' then  ps2clk_r <= "000"elsif rising_edge(sysclk) then     ps2clk_r(2) <= ps2clk_r(1);  ps2clk_r(1) <= ps2clk_r(0);  ps2clk_r(0) <= ps2

48、clk;end if;end process;ps2clkfall<='1' when ps2clk_r="110" else '0' process(sysclk) beginif rising_edge(sysclk) then                         if reset='0' then q <= (other

49、s =>'0');            elsif ps2clkfall='1' then                   if q(0)='0' then                     &

50、#160;      q <= ps2data & "01111111111"          else      q <= ps2data & q(11 downto 1);            end if;        end if;  &

51、#160; end if;end process;process(q)beginif q(0) = '0' then  ps2serialdata <= q(11 downto 1);  result <= not ps2serialdata(8 downto 1);else  result <="11111111"end if;end process;end art;library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOG

52、IC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;- Uncomment the following library declaration if instantiating- any Xilinx primitives in this code.-library UNISIM;-use UNISIM.VComponents.all;entity music is    PORT(clk2:   IN STD_LOGIC;           &

53、#160;           -4HZ時(shí)鐘信號(hào)          index1: IN STD_LOGIC_VECTOR(7 DOWNTO 0);   -鍵盤輸入信號(hào)       index2: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);  -音符信號(hào)輸出END music;ARCHITECTURE art OF music ISSIGNAL coun

54、t3:INTEGER RANGE 0 TO 31;  -定義信號(hào)計(jì)數(shù)器,有32個(gè)元素BEGINM1ROCESS(count3,clk2,index1)               -music工作進(jìn)程開(kāi)始BEGIN  IF(clk2 'EVENT AND clk2 ='1')THEN       -時(shí)鐘信號(hào)2為1    IF(count3=31)THEN  

55、60;                -計(jì)數(shù)器值為31      count3<=0;                        -計(jì)數(shù)器清0ELSE      count3<=count3+1;END IF;END IF;END PROCES

56、S;M2ROCESS(count3,index1)-除去了敏感信號(hào)auto1BEGINIF index1="01001101" THEN                      按下P鍵生效CASE count3 IS          -由計(jì)數(shù)器從0到31的取?斷音符信號(hào)?制? WHEN 0=>index2<="00000011"&

57、#160;   -3WHEN 1=> index2<="00000011"    -3WHEN 2=> index2<="00000011"    -3WHEN 3=> index2<="00000011"    -3WHEN 4=> index2<="00000101"    -5WHEN 5=> index2<="00000101" 

58、   -5WHEN 6=> index2<="00000101"    -5WHEN 7=> index2<="00000110"    -6WHEN 8=> index2<="00001000"    -8WHEN 9=> index2<="00001000"    -8WHEN 10=> index2<="00001000"  

59、60;-8WHEN 11=> index2<="00000011"   -3WHEN 12=> index2<="00000010"   -2WHEN 13=> index2<="00000010"   -2WHEN 14=> index2<="00000001"   -1WHEN 15=> index2<="00000001"   -1

60、WHEN 16=> index2<="00000101"   -5WHEN 17=> index2<="00000101"   -5WHEN 18=> index2<="00000100"   -4WHEN 19=> index2<="00000100"   -4WHEN 20=> index2<="00000100"   -4WHEN

61、21=> index2<="00000011"   -3WHEN 22=> index2<="00000010"   -2WHEN 23=> index2<="00000010"   -2WHEN 24=> index2<="00000101"   -5WHEN 25=> index2<="00000101"   -5WHEN 26=&g

62、t; index2<="00000100"   -4WHEN 27=> index2<="00000100"   -4WHEN 28=> index2<="00000011"   -3WHEN 29=> index2<="00000011"   -3WHEN 30=> index2<="00000010"   -2WHEN 31=> in

63、dex2<="00000010"   -2WHEN OTHERS=>NULL;END CASE;ELSE -index2<=index1; case index1 iswhen"00010101"=>index2<="00000001"-qwhen"00011101"=>index2<="00000010"-wwhen"00100100"=>index2<="00000011"-ew

64、hen"00101101"=>index2<="00000100"-rwhen"00101100"=>index2<="00000101"-twhen"00110101"=>index2<="00000110"-ywhen"00111100"=>index2<="00000111"-uwhen"00011100"=>index2<="0000100

65、0"-awhen"00011011"=>index2<="00001001"-swhen"00100011"=>index2<="00001010"-dwhen"00101011"=>index2<="00001011"-fwhen"00110100"=>index2<="00001100"-gwhen"00110011"=>index2<=&qu

66、ot;00001101"-hwhen"00111011"=>index2<="00001110"-jwhen"00011010"=>index2<="00001111"-zwhen"00100010"=>index2<="00010000"-xwhen"00100001"=>index2<="00010001"-cwhen"00101010"=>inde

67、x2<="00010010"-vwhen"00110010"=>index2<="00010011"-bwhen"00110001"=>index2<="00010100"-nwhen"00111010"=>index2<="00010101"-mwhen         others=>index2<="11111111"end case;&

68、#160;                END IF;END PROCESS;  END art;library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;- Uncomment the following library declaration if instantiating- any Xilinx primitiv

69、es in this code.-library UNISIM;-use UNISIM.VComponents.all;entity tone is    Port (index3: IN STD_LOGIC_VECTOR(7 DOWNTO 0);  -音符輸入信號(hào)     code1:  OUT STD_LOGIC_VECTOR(6 DOWNTO 0);  -音符顯示信號(hào)     high1:  OUT STD_LOGIC_

70、VECTOR(2 DOWNTO 0);   -高低音顯示信號(hào)     tone1:  OUT INTEGER RANGE 0 TO 2047);       -音符的分頻系數(shù)end tone;architecture art of tone isbeginT1:process(index3)begincase index3 iswhen"00000001"=> tone1<=1191; code1<="1001111"

71、 high1<="001"WHEN"00000010"=> tone1<=1702; code1<="0010010" high1<="001"WHEN"00000011"=> tone1<=1517; code1<="0000110" high1<="001"WHEN"00000100"=> tone1<=1432; code1<="1001100&qu

72、ot; high1<="001"WHEN"00000101"=> tone1<=1276; code1<="0100100" high1<="001"WHEN"00000110"=> tone1<=1136; code1<="0100000" high1<="001"WHEN"00000111"=> tone1<=1012;  code1<=&q

73、uot;0001111" high1<="001"WHEN"00001000"=> tone1<=955;  code1<="1001111" high1<="010"WHEN"00001001"=> tone1<=851;  code1<="0010010" high1<="010"  WHEN"00001010"

74、;=> tone1<=758;  code1<="0000110" high1<="010"WHEN"00001011"=> tone1<=716;  code1<="1001100" high1<="010"WHEN"00001100"=> tone1<=638;  code1<="0100100" high1<="

75、;010"WHEN"00001101"=> tone1<=568;  code1<="0100000" high1<="010"WHEN"00001110"=> tone1<=506;  code1<="0001111" high1<="010"WHEN"00001111"=> tone1<=478;  code1<="1001111" high1<="100"WHEN"0001

溫馨提示

  • 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)論