




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、江西制造職業(yè)技術(shù)學院信息工程系 08 級 畢 業(yè) 論 文 姓名: 江 太 平 班級: 08 通信電子 設(shè)計題目 : 基于 FPGA的 PS/2 鍵盤鼠標控制電子琴 指導教師: 吳 康 二一一年五月 目錄 第一章 FPGA 簡介 1.1 FPGA 背景 1.2 FPGA 芯片結(jié)構(gòu) 1.3 FPGA 的基本特點 第二章 FPGA 工作原理 2.1 查找表( Look-Up-Table)的原理與結(jié)構(gòu) 2.2 FPGA 工作原理 第三章 PS2 鍵盤通信 3.1 PS2 背景 3.2 PS2 鍵盤通信 3.3 VGA 原理 第四章 PS2 鍵盤控制模型電子琴頂層電路的設(shè)計 4.1 PS2鍵盤控制電子琴
2、程序 結(jié)論、參考文獻 第一章 FPGA 簡介 1.1 FPGA 背景 FPGA主要生產(chǎn)廠商 1、Altera 2、Xilinx 3、Actel 4、Lattice 其中 Altera 作為世界老牌可編程邏輯器件的廠家,是當前世界范圍內(nèi) 市場占有率最大的廠家,它和 Xilinx 主要生產(chǎn)一般用途 FPGA,其主要產(chǎn)品 采用 RAM工藝。 Actel 主要提供非易失性 FPGA,產(chǎn)品主要基于反熔絲工藝 和 FLASH工藝。 目前以硬件描述語言( Verilog 或 VHDL)所完成的電路設(shè)計,可以經(jīng) 過簡單的綜合與布局,快速的燒錄至 FPGA 上進行測試,是現(xiàn)代 IC 設(shè)計 驗證的技術(shù)主流。這些可
3、編輯元件可以被用來實現(xiàn)一些基本的邏輯門 電路 (比如 AND、OR、XOR、NOT)或者更復雜一些的組合功能比如解碼器或數(shù)學 方程式。在大多數(shù)的 FPGA里面,這些可編輯的元件里也包含記憶元件例如 觸發(fā)器 ( Flip flop )或者其他更加完整的記憶塊。 系統(tǒng)設(shè)計師 可以根據(jù)需要通過可編輯的連接把FPGA內(nèi)部的邏輯塊連接 起來,就好像一個電路試驗板被放在了一個芯片 里。一個出廠后的成品 FPGA 的邏輯塊和連接可以按照設(shè)計者而改變,所以FPGA可以完成所需要的邏輯 功能。 FPGA一般來說比 ASIC(專用 集成芯片 )的速度要慢,無法完成復雜的 設(shè)計,而且消耗更多的電能。但是他們也有很多
4、的優(yōu)點比如可以快速成品, 可以被修改來改正程序中的錯誤和更便宜的造價。廠商也可能會提供便宜 的但是編輯能力差的 FPGA。因為這些芯片有比較差的可編輯能力,所以這 些設(shè)計的開發(fā)是在普通的 FPGA 上完成的,然后將設(shè)計轉(zhuǎn)移到一個類似于 ASIC的芯片上。另外一種方法是用CPLD(復雜 可編程邏輯器件 備)。 FPGA采用了邏輯單元陣列 LCA( Logic Cell Array)這樣一個概念, 內(nèi)部包括可配置邏輯模塊 CLB( Configurable Logic Block )、輸出輸入模 塊 IOB( Input Output Block )和內(nèi)部連線( Interconnect )三個部
5、分。 1.2 FPGA 芯片結(jié)構(gòu) 目前主流的 FPGA仍是基于查找表技術(shù)的,已經(jīng)遠遠超出了先前版本的 基本性能,并且整合了常用功能(如RAM、時鐘管理和 DSP)的硬核( ASIC 型)模塊。如圖 1-1 所示(注:圖 1-1 只是一個示意圖,實際上每一個系 列的 FPGA都有其相應的內(nèi)部結(jié)構(gòu)), FPGA芯片主 要由 6 部分完成,分別 為:可編程輸入輸出單元、基本可編程邏輯單元、完整的時鐘管理、嵌入 塊式 RAM、豐富的布線資源、內(nèi)嵌的底層功能單元和內(nèi)嵌專用硬件模塊。 圖 1-1 FPGA 芯片的內(nèi)部結(jié)構(gòu) FPGA芯片的內(nèi)部結(jié)構(gòu) 每個模塊的功能如下 : 1 可編程輸入輸出單元( IOB)
6、可編程輸入 / 輸出單元簡稱 I/O 單元,是芯片與外界電路的接口部分, 完成不同電氣特性下對輸入 / 輸出信號的驅(qū)動與匹配要求,其示意結(jié)構(gòu)如圖 1-2 所示。 FPGA 內(nèi)的 I/O 按組分類,每組都能夠獨立地支持不同的 I/O 標 準。通過軟件的靈活配置,可適配不同的電氣標準與 I/O 物理特性,可以 調(diào)整驅(qū)動電流的大小,可以改變上、下拉電阻。目前, I/O 口的頻率也越來 越高,一些高端的 FPGA通過 DDR寄存器技術(shù)可以支持高達 2Gbps 的數(shù)據(jù)速 率。 圖 1-2 典型的 IOB 內(nèi)部結(jié)構(gòu)示意圖 典型的 IOB 內(nèi)部結(jié)構(gòu)示意圖 外部輸入信號可以通過 IOB 模塊的存儲單元輸入到
7、FPGA的內(nèi)部,也可以直 接輸入 FPGA 內(nèi)部。當外部輸入信號經(jīng)過 IOB 模塊的存儲單元輸入到 FPGA 內(nèi)部時,其保持時間( Hold Time )的要求可以降低,通常默認為0。 為了便于管理和適應多種電器標準,F(xiàn)PGA的 IOB 被劃分為若干個組 ( bank ),每個 bank 的接口標準由其接口電壓 VCCO決定,一個 bank 只能有 一種 VCCO,但不同 bank 的 VCCO可以不同。只有相同電氣標準的端口才 能連接在一起, VCCO電壓相同是接口標準的基本條件。 2 可配置邏輯塊( CLB) CLB是 FPGA內(nèi)的基本邏輯單元。 CLB的實際數(shù)量和特性會依器件的不 同而不
8、同,但是每個 CLB 都包含一個可配置開關(guān)矩陣,此矩陣由4 或 6 個 輸入、一些 選型電路(多路復用器等)和觸發(fā)器組成。 開關(guān)矩陣是高度 靈活的,可以對其進行配置以便處理組合邏輯、 移位寄存器或 RAM。在 Xilinx 公司的 FPGA器件中, CLB由多個(一般為 4 個或 2 個)相同的 Slice 和附 加邏輯構(gòu)成,如圖 1-3 所示。每個 CLB模塊不僅可以用于實現(xiàn)組合邏輯、 時序邏輯,還可以配置為分布式RAM和分布式 ROM。 圖 1-3 典型的 CLB 結(jié)構(gòu)示意圖 典型的 CLB 結(jié)構(gòu)示意圖 Slice 是 Xilinx 公司定義的基本邏輯單位,其內(nèi)部結(jié)構(gòu)如圖 1-4 所示,一
9、 個 Slice 由兩個 4 輸入的函數(shù)、進位邏輯、算術(shù)邏輯、存儲邏輯和函數(shù)復 用器組成。算術(shù)邏輯包括一個異或門(XORG)和一個專用與門( MULTAN)D , 一個異或門可以使一個 Slice 實現(xiàn) 2bit 全加操作, 專用與門用于提高乘法 器的效率;進位邏輯由專用進位信號和函數(shù)復用器(MUXC)組成,用于實 現(xiàn)快速的算術(shù)加減法操作; 4 輸入函數(shù)發(fā)生 器用于實現(xiàn) 4 輸入 LUT、分布 式 RAM或 16 比特移位寄存器 ( Virtex-5 系列芯片的 Slice 中的兩個輸入函 數(shù)為 6 輸入,可以實現(xiàn) 6 輸入 LUT或 64 比特移位寄存器);進位邏輯包括 兩條快速進位鏈,用于
10、提高CLB模塊的處理速度。 圖 1-4 典型的 4 輸入 Slice 結(jié)構(gòu)示意圖 典型的 4 輸入 Slice 結(jié)構(gòu)示意圖 3 數(shù)字時鐘管理模塊( DCM) 業(yè)內(nèi)大多數(shù) FPGA均提供數(shù)字時鐘管理( Xilinx 的全部 FPGA均具有這 種特性)。 Xilinx 推出最先進的 FPGA提供數(shù)字時鐘管理和相位環(huán)路鎖定。 相位環(huán)路鎖定能夠提供精確的時鐘綜合,且能夠降低抖動,并實現(xiàn)過濾功 能。 4 嵌入式塊 RAM( BRAM) 大多數(shù) FPGA都具有內(nèi)嵌的塊 RAM,這大大拓展了 FPGA的應用范圍和靈 活性。塊 RAM可被配置為單端口 RAM、雙端口 RAM、內(nèi)容地址存儲器 ( CAM) 以及
11、 FIFO 等常用存儲結(jié)構(gòu)。 RAM、FIFO 是比較普及的概念,在此就不冗述。 CAM存儲器在其內(nèi)部的每個存儲單元中都有一個比較邏輯,寫入 CAM 中的 數(shù)據(jù)會和內(nèi)部的每一個數(shù)據(jù)進行比較,并返回與端口數(shù)據(jù)相同的所有數(shù)據(jù) 的地址,因而在路由的地址交換器中有廣泛的應用。除了塊 RAM,還可以將 FPGA中的 LUT靈活地配置成 RAM、 ROM和 FIFO 等結(jié)構(gòu)。在實際應用中,芯 片內(nèi)部塊 RAM的數(shù)量也是選擇芯片的一個重要因素。 單片塊 RAM的容量為 18k 比特,即位寬為 18 比特、深度為 1024 ,可以 根據(jù)需要改變其位寬和深度,但要滿足兩個原則:首先,修改后的容量(位 寬 深度)
12、不能大于 18k 比特;其次,位寬最大不能超過 36 比特。當然, 可以將多片塊 RAM級聯(lián)起來形成更大的 RAM,此時只受限于芯片內(nèi)塊 RAM的 數(shù)量,而 不再受上面兩條原則約束。 5 豐富的布線資源 布線資源連通 FPGA內(nèi)部的所有單元,而連線的長度和工藝決定著信號 在連線上的驅(qū)動能力和傳輸速度。 FPGA芯片內(nèi)部有著豐富的布線資源,根 據(jù)工藝、長度、寬度和分布位置的不同而劃分為類不同的類別。第一類 是全局布線資源,用于芯片內(nèi)部全局時鐘和全局復位 / 置位的布線;第二類 是長線資源,用以完成芯片 Bank 間的高速信號和第二全局時鐘信號的布 線;第三類是短線資源,用于完成基本邏輯單元之間的
13、邏輯互連和布線; 第四類是分布式的布線資源,用于專有時鐘、復位等控制信號線。 在實際中設(shè)計者不需要直接選擇布線資源,布局布線器可自動地根據(jù) 輸入邏輯網(wǎng)表的拓撲結(jié)構(gòu)和約束條件選擇布線資源來連通各個模塊單元。 從本質(zhì)上講,布線資源的使用方法和設(shè)計的結(jié)果有密切、直接的關(guān)系。 6 底層內(nèi)嵌功能單元 內(nèi)嵌功能模塊主要指 DLL( Delay Locked Loop )、 PLL( Phase Locked Loop)、 DSP和 CPU等軟處理核( SoftCore )?,F(xiàn)在越來越豐富的內(nèi)嵌功能 單元,使得單片 FPGA成為了系統(tǒng)級的設(shè)計工具,使其具備了軟硬件聯(lián)合設(shè) 計的能力,逐步向 SOC平臺過渡。
14、DLL和 PLL 具有類似的功能,可以完成時鐘高精度、低抖動的倍頻和分 頻,以及占空比調(diào)整和移相等功能。 Xilinx 公司生產(chǎn)的芯片上集成了 DLL ,Altera 公司的芯片集成了 PLL, Lattice 公司的新型芯片上同時集成了 PLL 和 DLL。PLL 和 DLL 可以通過 IP 核生成的工具方便地進行管理和配置。 DLL 的結(jié)構(gòu)如圖 1-5 所示。 圖 1-5 典型的 DLL 模塊示意圖 典型的 DLL 模塊示意圖 7. 內(nèi)嵌專用硬核 內(nèi)嵌專用硬核是相對底層嵌入的軟核而言的,指FPGA處理能力強大的 硬核( Hard Core ),等效于 ASIC 電路。為了提高 FPGA性能
15、,芯片生產(chǎn)商 在芯片內(nèi)部集成了一些專用的硬核。例如:為了提高FPGA的乘法速度,主 流的 FPGA 中都集成了專用乘法器; 為了適用通信總線與接口標準,很多高 端的 FPGA內(nèi)部都集成了串并收發(fā)器( SERDES),可以達到數(shù)十 Gbps 的收 發(fā)速度。 Xilinx 公司的高端產(chǎn)品不僅集成了 Power PC 系列 CPU,還內(nèi)嵌了 DSP Core 模塊,其相應的系統(tǒng)級設(shè)計工具是EDK和 Platform Studio ,并依此 提出了片上系統(tǒng)( System on Chip )的概念。通過 PowerPC、 Miroblaze 、 Picoblaze 等平臺,能夠開發(fā)標準的 DSP處理器
16、及其相關(guān)應用,達到 SOC的 開發(fā)目 的。 1.3 FPGA 的基本特點 FPGA的基本特點 : 1) 采用 FPGA設(shè)計 ASIC 電路 ( 專用集成電路 ) ,用戶不需要投片生產(chǎn), 就能得到合用的芯片。 2) FPGA可做其它全定制或半定制 ASIC 電路的中試樣片。 3) FPGA內(nèi)部有豐富的觸發(fā)器和 I O引腳。 4) FPGA是 ASIC 電路中設(shè)計周期最短、開發(fā)費用最低、風險最小的器 件之一。 5) FPGA 采用高速 CHMOS工藝,功耗低,可以與 CMO、S TTL電平兼容 可以說, FPGA芯片是小批量系統(tǒng)提高系統(tǒng)集成度、可靠性的最佳選擇 之一。 FPGA是由存放在片內(nèi) RA
17、M中的程序來設(shè)置其工作狀態(tài)的,因此,工作 時需要對片內(nèi)的 RAM進行編程。用戶可以根據(jù)不同的配置模式,采用不同 的編程方式。 加電時, FPGA芯片將 EPROM中數(shù)據(jù)讀入片內(nèi)編程 RAM中,配置完成后, FPGA進入工作狀態(tài) 。掉電后, FPGA恢復成白片,內(nèi)部邏輯關(guān)系消失,因此, FPGA能夠反復使用。 FPGA的編程無須專用的 FPGA編程器 ,只須用通用的 EPROM、 PROM編程器即可。當需要修改 FPGA功能時,只需換一片 EPROM即 可。這樣,同一片 FPGA,不同的編程數(shù)據(jù),可以產(chǎn)生不同的電路功能。因 此, FPGA的使用非常靈活。 FPGA配置模式 FPGA有多種配置模式
18、:并行主模式為一片F(xiàn)PGA加一片 EPROM的方式; 主從模式可以支持一片 PROM編程多片 FPGA;串行模式可以采用串行 PROM 編程 FPGA;外設(shè) 模式可以將 FPGA作為 微處理器 的外設(shè),由微處理器對其編 程。 如何實現(xiàn)快速的時序收斂、 降低 功耗 和成本、優(yōu)化時鐘管理并降低 FPGA 與 PCB并行設(shè)計的復雜性等問題,一直是采用FPGA的系統(tǒng)設(shè)計工程師需要 考慮的關(guān)鍵問題。如今,隨著 FPGA向更高密度、更大容量、更低功耗和集 成更多 IP 的方向發(fā)展,系統(tǒng)設(shè)計工程師在從這些優(yōu)異性能獲益的同時,不 得不面對由于 FPGA前所未有的性能和能力水平而帶來的新的設(shè)計挑戰(zhàn)。 例如,領(lǐng)先
19、 FPGA廠商 Xilinx 最近推出的 Virtex-5 系列采用 65nm工 藝,可提供高達 33 萬個邏輯單元、 1,200 個 I/O 和大量硬 IP 塊。超大容量 和密度使復雜的布線變得更加不可預測,由此帶來更嚴重的時序收斂問題。 此外,針對不同應用而集成的更多數(shù)量的邏輯功能、DSP、 嵌入式 處理和接 口模塊,也讓時鐘管理和電壓分配問題變得更加困難。 幸運地是, FPGA廠商、 EDA工具供應商正在通力合作解決65nm FPGA 獨特的設(shè)計挑戰(zhàn)。不久以前, Synplicity 與 Xilinx 宣布成立超大容量時序 收斂聯(lián)合工作小組,旨在最大程度地幫助系統(tǒng)設(shè)計工程師以更快、更高效
20、 的方式應用 65nm FPGA器件。設(shè)計軟件供應商 Magma推出的綜合工具 Blast FPGA能幫助建立優(yōu)化的布局,加快時序的收斂。 最近 FPGA的配置方式已經(jīng)多元化! 第二章 FPGA 工作原理 FPGA工作原理 FPGA采用了邏輯單元陣列 LCA( Logic Cell Array )這樣一個概念, 內(nèi)部包括可配置邏輯模塊 CLB( Configurable LogicBlock )、輸出輸入模 塊 IOB( Input Output Block )和內(nèi)部連線( Interconnect )三個部分。 2.1 查找表( Look-Up-Table) 的原理與結(jié)構(gòu) 采用這種結(jié)構(gòu)的 P
21、LD 芯片我們也可以稱之為 FPGA:如 altera 的 ACEX,APEX系列 ,xilinx 的 Spartan,Virtex 系列等。 查找表( Look-Up-Table) 簡稱為 LUT, LUT本質(zhì)上就是一個 RAM。目前 FPGA 中多使用 4 輸入的 LUT,所以每一個 LUT可以看成一個有 4 位地址線的 16x1 的 RAM。當用戶通過原理圖或 HDL 語言描述了一個邏輯電路以后, PLD/FPGA 開發(fā)軟件會自動計算邏輯電路的所有可能的結(jié)果,并把結(jié)果事先寫入 RAM, 這樣,每輸入一個信號進行邏輯運算就等于輸入一個地址進行查表,找出 地址對應的內(nèi)容,然后輸出即可。 面是
22、一個 4 輸入與門的例子, 實際邏輯電路 LUT的實現(xiàn)方式 a,b,c,d 輸入 0000 0001 邏輯輸出 地址 RAM中存儲的內(nèi)容 1111 0 0 0 1 0000 0001 1111 0 0 0 1 . 基于查找表( 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塊和可編程連線(未表示出)。 在 spartan-II 中,一個 CLB 包括 2 個 Slices, 每個 slices 包括兩個 LU
23、T, 兩個觸發(fā)器和相關(guān)邏輯。 Slices 可以看成是 SpartanII 實現(xiàn)邏輯的最基本 結(jié)構(gòu) (xilinx 其他系列,如 SpartanXL,Virtex 的結(jié)構(gòu)與此稍有不同,具體 10 請參閱數(shù)據(jù)手冊) altera 的 FLEX/ACEX等芯片的結(jié)構(gòu)如下圖: altera FLEX/ACEX 芯片的內(nèi)部結(jié)構(gòu) 邏輯單元( LE)內(nèi)部結(jié)構(gòu) 11 FLEX/ACEX的結(jié)構(gòu)主要包括 LAB,I/O 塊, RAM塊(未表示出)和可編程行 / 列連線。在 FLEX/ACEX中,一個 LAB包括 8 個邏輯單元( LE), 每個 LE 包 括一個 LUT,一個觸發(fā)器和相關(guān)的相關(guān)邏輯。LE 是 F
24、LEX/ACEX芯片實現(xiàn)邏 輯的最基本結(jié)構(gòu) (altera 其他系列,如 APEX的結(jié)構(gòu)與此基本相同,具體請 參閱數(shù)據(jù)手冊) . 查找表結(jié)構(gòu)的 FPGA邏輯實現(xiàn)原理 我們還是以這個電路的為例: A,B,C,D 由 FPGA芯片的管腳輸入后進入可編程連線,然后作為地址線連到 到 LUT, LUT 中已經(jīng)事先寫入了所有可能的邏輯結(jié)果,通過地址查找到相應 的數(shù)據(jù)然后輸出,這樣組合邏輯就實現(xiàn)了。該電路中 D 觸發(fā)器是直接利用 LUT后面 D 觸發(fā)器來實現(xiàn)。 時鐘信號 CLK由 I/O 腳輸入后進入芯片內(nèi)部的時 鐘專用通道,直接連接到觸發(fā)器的時鐘端。觸發(fā)器的輸出與 I/O 腳相連, 把結(jié)果輸出到芯片管腳
25、。這樣PLD就完成了圖 3 所示電路的功能。(以上 這些步驟都是由軟件自動完成的,不需要人為干預) 這個電路是一個很簡單的例子,只需要一個LUT 加上一個觸發(fā)器就可以完 成。對于一個 LUT 無法完成的的電路,就需要通過進位邏輯將多個單元相 連,這樣 FPGA就可以實現(xiàn)復雜的邏輯。 由于 LUT 主要適合 SRAM工藝生產(chǎn),所以目前大部分 FPGA都是基于 SRAM工 藝的,而 SRAM工藝的芯片在掉電后信息就會丟失,一定需要外加一片專用 配置芯片,在上電的時候,由這個專用配置芯片把數(shù)據(jù)加載到FPGA中,然 后 FPGA就可以正常工作,由于配置時間很短,不會影響系統(tǒng)正常工作。也 有少數(shù) FPG
26、A采用反熔絲或 Flash 工藝,對這種 FPGA,就不需要外加專用的 配置芯片。 第三章 PS2 鍵盤通信 3.1 PS2 背景 12 PS2背景 PS/2 接口是目前最常見的鼠標接口, 最初是 IBM 公司的專利, 俗稱“小 口”。這是一種鼠標和鍵盤的專用接口,是一種 6 針的圓型接口。但鼠標 只使用其中的 4 針傳輸數(shù)據(jù)和供電,其余 2 個為空腳。 PS/2 接口的傳輸速 率比 COM接口稍快一些,而且是 ATX 主板的標準接口,是目前應用最為廣 泛的鼠標接口之一,但仍然不能使高檔鼠標完全發(fā)揮其性能,而且不支持 熱插拔。在 BTX主板規(guī)范中,這也是即將被淘汰掉的接口。 需要注意的是,在連
27、接 PS/2 接口鼠標時不能錯誤地插入鍵盤 PS/2 接口(當然,也不能把 PS/2 鍵盤插入鼠標 PS/2 接口)。一般情況下,符 合 PC99 規(guī)范的主板,其鼠標的接口為綠色、鍵盤的接口為紫色,另外也可 以從 PS/2 接口的相對位置來判斷:靠近主板PCB的是鍵盤接口,其上方的 是鼠標接口。 PS2 設(shè)備有主從之分, 主設(shè)備采用 Female 插座,從設(shè)備采用 Male 插頭, 現(xiàn)在廣泛實用的 PS2鍵盤鼠標均在從設(shè)備方式下工作。 PS2 接口的時鐘與數(shù) 據(jù)線都是集電極開路結(jié)構(gòu)。主從設(shè)備之間數(shù)據(jù)通信采用雙向同步串行方式 傳輸,時鐘信號由從設(shè)備產(chǎn)生。 a. 從設(shè)備到主設(shè)備的通信 當從設(shè)備向主
28、設(shè)備發(fā)送數(shù)據(jù)時,首先檢查時鐘線,以確認時鐘線是 否為高電平。如果是高電平,從設(shè)備就可以開始傳輸數(shù)據(jù);反之,從設(shè) 備要等待獲得總線的控制權(quán),才能開始傳輸數(shù)據(jù)。傳輸?shù)拿恳粠?11 位組成,發(fā)送時序及每一位的含義如圖 2 所示。 13 每一幀數(shù)據(jù)中開始位總是為0,數(shù)據(jù)校驗采用奇校驗方式,停止位 始終為 1。從設(shè)備到主設(shè)備通信時,從設(shè)備總是在時鐘線為高時改變數(shù) 據(jù)線狀態(tài),主設(shè)備在時鐘下降沿讀入數(shù)據(jù)線狀態(tài)。如表 1 所示: 3.2 PS2 鍵盤通信 目前,鍵盤有許多種, PS2 鍵盤是當今 PC機最常用的種類,這里僅 涉及最常用的鍵盤,也就是 6 引腳發(fā)送數(shù)據(jù)的鍵盤。鍵盤通信時需要四 根連接線:電源線
29、、地線、時鐘線CLK、數(shù)據(jù)線 DATA。 DATA和 CLK是可雙向通信的 I/O 線,也就是說,通過這兩根線,即 可以把主機的數(shù)據(jù)發(fā)送到 PS2 設(shè)備,又可以把設(shè)備的數(shù)據(jù)發(fā)向主機。 在 無鍵按下時, DATA和 CLK 一直處于高電平狀態(tài)。但有鍵按下時,鍵盤 先檢查 CLK,看它是否處于處于高電平,如果是處在低電平,說明主機 無空閑接受數(shù)據(jù),這時鍵盤將會把數(shù)據(jù)放在自己的緩沖區(qū),直到CLK重 新被拉高。 鍵盤 CLK首先產(chǎn)生下降沿, 這時已在數(shù)據(jù)線上產(chǎn)生信號, 如: 起始位總是為 0,之后每一個時鐘周期時鐘電平為高時數(shù)據(jù)線上加將要 輸出的電平,在時鐘的下降沿它將被主機讀取。 3.3 原理 掃描
30、是從屏幕的左上方開始的, 從左到右、 從上到下地進行掃描。每掃描完一行,電 子束就會回到屏幕左邊下一行的起始位 置。在這期間, CRT 對電子束進行消隱。 每行結(jié)束時,用行同步信號進行行同步。 掃描完所有行后,用場同步信號進行場同 步,并使掃描回到屏幕的左上方,同時進 行場消隱,預備下一次的掃描。 14 PS2鍵盤控制模型電子琴頂層電路的設(shè)計 如圖所示,該圖是電子琴頂層設(shè)計電路。按實現(xiàn)功能電路主要分成這幾 個模塊: 1) 鎖相環(huán)、用宏模塊搭建的 22 位.23 位 .24 位計數(shù)器、用 Verilog 寫的時 鐘分頻模塊 fdiv: 提供 25MHz 的時鐘信號驅(qū)動 VGA顯示 與 24 位計
31、數(shù)器結(jié)合提供 與 23 位計數(shù)器結(jié)合提供 與 22 位計數(shù)器結(jié)合提供 1Hz給數(shù)字時鐘用以計時 2MHz給 CNT138T與 rom_qupu 以控制節(jié)奏 4MHz給 cnt10b 以控制 RAM的地址 與 fdiv 結(jié)合提供 1MHz給 SPEAK 2) 模塊 PS2_2: PS2通信模塊,將鍵盤輸出碼轉(zhuǎn)換為ASCII 碼,只處理字 15 3) 二進制編碼器 CODE3: 根據(jù)鍵盤碼的 ASCII 碼,用 verilog 寫高、中、低三個音階的分別對應的 鍵盤字母代碼,與 F_CODE模塊相對應,以此來擴大音域 4) 模塊 F_CODE: 模塊 F_CODE的功能首先是為模塊 SPKER提供
32、決定所發(fā)音符的分頻 預置數(shù),而此數(shù)在 SPKER輸入口停留的時間即為此音符的節(jié)拍長度。 同時, F_CODE把 CODE3中音符的代碼轉(zhuǎn)化為音符頻率所對應的數(shù) 值 與模塊 DECL7S結(jié)合顯示音符 H3.0 顯示 0,1,2 表示高、中、低三個音階 5) 模塊 DECL7S: 7 段譯碼顯示模塊 , 在數(shù)碼管上顯示 1,2,3,4,5,6,7 音符 6) 模塊 RAM: 與模塊 cnt10b 結(jié)合記錄彈奏的樂曲 7) 模塊 ROM: 與模塊 cnt138b 結(jié)合可自動播放儲存的音樂 8) 模塊 shizhong : 可記錄彈奏時間 9) 模塊 VGA: 顯示按鍵的位置,當音樂響時同步顯示對應的
33、音的鍵盤位置 10) 模塊 SPEAK 輸出每一個音符的音調(diào) 11) 模塊 MUX21 選擇播放中的音樂或中的儲存音樂 第四章 PS2 鍵盤控制電子琴( VHDL) 4.1 PS2 鍵盤控制電子琴程序 共分為 DIV1、DIV2 分頻模塊, PS2鍵盤控制模塊, music 發(fā)音模塊, tone 音符分頻模塊, spk 發(fā)聲模塊。 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; 16 Uncomment the following
34、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; - 輸入 時鐘為 50MHZ; c0: OUT STD_LOGIC; c1: OUT STD_LOGIC); END Div1; architecture art of Div1 is begin D1: PROCESS(clk_50mhz) - 工作進程開始 , 將 5
35、0MHZ 時鐘 50 分頻 ,=1MHZ; VARIABLE count6:INTEGER RANGE 0 TO 50; BEGIN IF(clk_50mhz EVENT AND clk_50mhz =1)THEN count6:=count6+1; IF count6=25 THEN c0 =1; ELSIF count6=50 THEN c0 =0; count6:=0; END IF; END IF; END PROCESS; D2: PROCESS(clk_50mhz) - 將 50MHZ時鐘 100 分頻 ,=0.5MHZ ; VARIABLE count7: INTEGER RAN
36、GE 0 TO 100; BEGIN IF(clk_50mhz EVENT AND clk_50mhz =1)THEN count7:=count7+1; IF count7=50 THEN 17 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; declaration
37、 if Uncomment the following library instantiating any Xilinx primitives in this code. -library UNISIM; -use UNISIM.VComponents.all; entity Div2 is PORT(clk4: IN STD_LOGIC; 1MHZ; c2: OUT STD_LOGIC; c3ut std_logic); END Div2; ARCHITECTURE art OF Div2 IS begin D1: PROCESS(clk4) 分頻; - 輸入時鐘為 - 輸出 100khz
38、; - 輸出時鐘為 4HZ; - 工作進程開始 , 將 1MHZ時鐘 10 VARIABLE count8:INTEGER RANGE 0 TO 10; BEGIN IF(clk4 EVENT AND clk4 =1)THEN count8:=count8+1; IF count8=5 THEN c2 =1; ELSIF count8=10 THEN 18c2 =0; count8:=0; END IF; END IF; END PROCESS; D2: PROCESS(clk4)-250000 分頻; VARIABLE count9: INTEGER RANGE 0 TO 250000; B
39、EGIN IF(clk4 EVENT AND clk4 =1)THEN count9:=count9+1; IF count9=125000 THEN c3=1; 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
40、 declaration instantiating any Xilinx primitives in this code. -library UNISIM; if -use UNISIM.VComponents.all; entity ps2 is Port std_logic; std_logic; ( sysclk: ps2clk: ps2data: in in in 19 std_logic; end ps2; reset: in std_logic; result: out std_logic_vector(7 downto 0); architecture art of ps2 i
41、s signal ps2clk_r : std_logic_vector(2 downto 0); signal ps2clkfall : std_logic; signal q : std_logic_vector(11 downto 0); signal ps2serialdata : std_logic_vector(10 downto 0) ; begin process(sysclk,reset) begin if reset=0 then ps2clk_r = 000; elsif rising_edge(sysclk) then ps2clk_r(2) = ps2clk_r(1)
42、; ps2clk_r(1) = ps2clk_r(0); ps2clk_r(0) = ps2clk; end if; end process; ps2clkfall=1 when ps2clk_r=110 else 0; process(sysclk) begin if rising_edge(sysclk) then if reset=0 then q 0); elsif ps2clkfall=1 then if q(0)=0 then q = ps2data else q = ps2data end if; end if; 20 end if; end process; process(q
43、) begin if 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_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; Uncomment the following library declaration
44、if instantiating any Xilinx primitives in this code. -library UNISIM; -use UNISIM.VComponents.all; entity music is PORT(clk2: IN STD_LOGIC;-4HZ 時鐘信 號 index1: IN STD_LOGIC_VECTOR(D7 OWNTO0) ;- 鍵盤輸入信號 index2: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); - 音 符信號輸出 END music; ARCHITECTURE art OF music IS SIGNAL co
45、unt3:INTEGER RANGE 0 TO 31; - 定義信號計數(shù)器,有 32 個元素 21 BEGIN M1ROCESS(count3,clk2,index1) 工作進程開始 BEGIN IF(clk2 EVENT AND clk2 =1)THEN 1 IF(count3=31)THEN 器值為 31 count3=0; 計數(shù)器清 0 ELSE count3index2 index2 index2 index2 index2 index2 index2 index2 index2 index2 index2 index2 index2 index2 index2 index2 inde
46、x2 index2 index2 index2 index2 index2 index2 index2 index2 index2 index2 index2 index2 index2 index2 index2NULL; END CASE; ELSE -index2index2index2index2index2index2index2index2index2index2index2index2index2index2index2index2index2index2index2index2index2index2index2 tone1=1191; code1=1001111; high1
47、 tone1=1702; code1=0010010; high1 tone1=1517; code1=0000110; high1 tone1=1432; code1=1001100; high1 tone1=1276; code1=0100100; high1 tone1=1136; code1=0100000; high1 high1=001; tone1=1012; code1 tone1=955; code1=1001111; high1 tone1=851; code1=0010010; high1 tone1=758; code1=0000110; high1 tone1=716
48、; code1=1001100; high1 tone1=638; code1=0100100; high1 tone1=568; code1=0100000; high1 tone1=506; code1=0001111; high1 tone1=478; code1=1001111; high1 tone1=426; code1=0010010; high1 tone1=379; code1=0000110; 25 high1 tone1=358; code1=1001100; high1 tone1=319; code1=0100100; high1 tone1=284; code1=0100000; high1 tone1=253; code1=0001111; high1 high1=000; END CASE; END PROCESS; END art; tone1=2047; code1=0000000; library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 古箏教室消防管理制度
- 公司婚嫁產(chǎn)假管理制度
- 培訓機構(gòu)臺賬管理制度
- 醫(yī)院器械質(zhì)量管理制度
- 單位食堂雜工管理制度
- 印刷車間臺賬管理制度
- 高效備考軟件測試試題及答案大全
- 家庭保潔安全管理制度
- 公司應收匯票管理制度
- ZJ50DBS鉆機-01使用說明書
- 學生志愿服務(wù)證明模板
- 醫(yī)師手術(shù)分級授權(quán)考核表
- 香港住宅樓房屋租賃合同
- GB/T 15831-2023鋼管腳手架扣件
- 活動策劃崗位筆試題目大全答案
- 內(nèi)外場衛(wèi)生周清計劃表
- 2023廣東教師公需課學習《中國式現(xiàn)代化》繼續(xù)教育考核試題及參考答案
- 作物育種學課后思考題題目及部分答案
- 銀團貸款協(xié)議與銀團貸款合同
- GB/T 14904-1994鋼絲增強的橡膠、塑料軟管和軟管組合件屈撓液壓脈沖試驗
評論
0/150
提交評論