基于FPGA的矩陣鍵盤接口電路的設(shè)計(jì)_第1頁
基于FPGA的矩陣鍵盤接口電路的設(shè)計(jì)_第2頁
基于FPGA的矩陣鍵盤接口電路的設(shè)計(jì)_第3頁
基于FPGA的矩陣鍵盤接口電路的設(shè)計(jì)_第4頁
基于FPGA的矩陣鍵盤接口電路的設(shè)計(jì)_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 EDA課程設(shè)計(jì)設(shè)計(jì)題目:矩陣鍵盤控制接口設(shè)計(jì)學(xué) 院:電子與電氣工程學(xué)院專 業(yè):電氣工程及其自動化 姓 名: * 班 級: 2011級專(2)班 學(xué) 號: * 指導(dǎo)老師: 時(shí) 間: 2014年12月10號摘 要20世紀(jì)90年代,國際上電子和計(jì)算機(jī)技術(shù)較先進(jìn)的國家,一直在積極探索新的電子電路設(shè)計(jì)方法,并在設(shè)計(jì)方法、工具等方面進(jìn)行了徹底的變革,取得了巨大成功。在電子技術(shù)設(shè)計(jì)領(lǐng)域,可編程邏輯器件(如CPLD、FPGA)的應(yīng)用,已得到廣泛的普及,這些器件為數(shù)字系統(tǒng)的設(shè)計(jì)帶來了極大的靈活性。這一切極大地改變了傳統(tǒng)的數(shù)字系統(tǒng)設(shè)計(jì)方法、設(shè)計(jì)過程和設(shè)計(jì)觀念,促進(jìn)了EDA技術(shù)的迅速發(fā)展。 本次設(shè)計(jì)在EDA開發(fā)平

2、臺QUARTUS7.2上利用VHDL語言設(shè)計(jì)矩陣鍵盤控制接口電路。要求設(shè)計(jì)一個(gè)49矩陣鍵盤,一共有三個(gè)模塊,分別為:掃描電路模塊、時(shí)鐘產(chǎn)生模塊、鍵盤譯碼電路和按鍵標(biāo)志位產(chǎn)生電路。掃描模塊中是為了產(chǎn)生掃描信號,來利用掃描信號來掃描鍵盤中是否有按鍵按下。鍵盤譯碼電路和按鍵標(biāo)志位產(chǎn)生電路也是為了配合掃描模塊來掃描電路中是否有按鍵按下,而且還要求它來產(chǎn)生按鍵標(biāo)志信號,以便和外部電路握手。時(shí)鐘產(chǎn)生電路是為了產(chǎn)生不同頻率的信號,來驅(qū)動上面兩個(gè)電路的運(yùn)轉(zhuǎn)。通過對課題的分析研究,掌握了VHDL語言編程方法,同時(shí)也增強(qiáng)了個(gè)人的學(xué)習(xí)能力和動手能力。關(guān)鍵詞: FPGA/CPLD;矩陣鍵盤;仿真目 錄1. 緒論11.

3、1 FPGA概況11.2 本課題的研究意義22. VHDL語言介紹與Quartus II 7.2 (32-Bit)軟件介紹32.1 VHDL語言的介紹32.1.1 VHDL語言概述32.1.2 VHDL語言的優(yōu)點(diǎn)42.1.3 利用VHDL語言設(shè)計(jì)數(shù)字系統(tǒng)的特點(diǎn)62.1.4 VHDL語言的基本結(jié)構(gòu)72.2 Quartus II 7.2 (32-Bit)軟件介紹及其用法82.2.1 Quartus II 7.2軟件介紹82.2.2 Quartus II 軟件的用法103. 矩陣鍵盤接口電路的原理與總體設(shè)計(jì)143.1 矩陣鍵盤接口電路的原理143.2 總體設(shè)計(jì)164. 各模塊的設(shè)計(jì)及仿真174.1

4、鍵盤掃描電路174.2 鍵盤譯碼電路和按鍵標(biāo)志位產(chǎn)生電路194.3 時(shí)鐘產(chǎn)生模塊244.4 鍵盤接口電路頂層電路實(shí)現(xiàn)27結(jié) 論29致 謝30參考文獻(xiàn)31附錄程序321. 緒論1.1 FPGA概況早期的可編程邏輯器件只有可編程只讀存儲器(PROM)、紫外線可擦除只讀存儲器(EPROM)和電可擦除只讀存儲器(E2PROM)三種。由于結(jié)構(gòu)的限制,它們只能完成簡單的數(shù)字邏輯功能。其后出現(xiàn)了一類結(jié)構(gòu)上稍復(fù)雜的可編程芯片,即可編程邏輯器件(PLD),它能夠完成各種數(shù)字邏輯功能。典型的PLD由一個(gè)“與”門和一個(gè)“或”門陣列組成,而任意一個(gè)組合邏輯都可以用“與或”表達(dá)式來描述,所以PLD能以乘積和的形式完成大

5、量的組合邏輯功能。這一階段的產(chǎn)品主要有PAL(可編程陣列邏輯)和GAL(通用陣列邏輯)。 PAL由一個(gè)可編程的“與”平面和一個(gè)固定的“或”平面構(gòu)成,或門的輸出可以通過觸發(fā)器有選擇地被置為寄存狀態(tài)。PAL器件是現(xiàn)場可編程的,它的實(shí)現(xiàn)工藝有反熔絲技術(shù)、EPROM技術(shù)和E2PROM技術(shù)。還有一類結(jié)構(gòu)更為靈活的邏輯器件是可編程邏輯陣列(PLA),它也由一個(gè)“與”平面和一個(gè)“或”平面構(gòu)成,但是這兩個(gè)平面的連接關(guān)系是可編程的。PLA器件既有現(xiàn)場可編程的,也有掩膜可編程的。在PAL的基礎(chǔ)上又發(fā)展了一種通用陣列邏輯(GAL、Generic ArrayLogic),如GAL16V8、GAL22V10等。它采用了

6、EPROM工藝,實(shí)現(xiàn)了電可擦除、電可改寫,其輸出結(jié)構(gòu)是可編程的邏輯宏單元,因而它的設(shè)計(jì)具有很強(qiáng)的靈活性,至今仍有許多人使用。這些早期的PLD器件的一個(gè)共同特點(diǎn)是可以實(shí)現(xiàn)速度特性較好的邏輯功能,但其過于簡單的結(jié)構(gòu)也使它們只能實(shí)現(xiàn)規(guī)模較小的電路。為了彌補(bǔ)這一缺陷,20世紀(jì)80年代中期,Altera和Xilinx分別推出了類似于PAL結(jié)構(gòu)的擴(kuò)展型CPLD(Complex Programmable Logic Dvice)和與標(biāo)準(zhǔn)門陣列類似的FPGA(FieldProgrammable Gate Array),它們都具有體系結(jié)構(gòu)和邏輯單元靈活、集成度高以及適用范圍寬等特點(diǎn)。這兩種器件兼容了PLD和通用

7、門陣列的優(yōu)點(diǎn),可實(shí)現(xiàn)較大規(guī)模的電路,編程也很靈活。與門陣列等其他ASIC(Application Specific IC)相比,它們又具有設(shè)計(jì)開發(fā)周期短、設(shè)計(jì)制造成本低、開發(fā)工具先進(jìn)、標(biāo)準(zhǔn)產(chǎn)品不需測試、質(zhì)量穩(wěn)定以及可實(shí)時(shí)在線檢驗(yàn)等優(yōu)點(diǎn),因此被廣泛應(yīng)用于產(chǎn)品的原型設(shè)計(jì)和產(chǎn)品生產(chǎn)(一般在10 000件以下)之中。幾乎所有應(yīng)用門陣列、PLD和中小規(guī)模通用數(shù)字集成電路的場合均可應(yīng)用FPGA和CPLD器件。121.2 本課題的研究意義近年來EDA技術(shù)在電子領(lǐng)域引發(fā)的技術(shù)革命,推動著電子技術(shù)的迅猛發(fā)展,為世人所矚目,而FPGA為代表的可編程邏輯器件的應(yīng)用,更是受到業(yè)內(nèi)人士的普遍關(guān)注。伴隨著大規(guī)模集成電路和

8、計(jì)算機(jī)技術(shù)的高速發(fā)展,在設(shè)計(jì)工業(yè)自動化,儀器儀表,計(jì)算機(jī)設(shè)計(jì)與應(yīng)用、通信、國防等領(lǐng)域的電子系統(tǒng)中,F(xiàn)PGA技術(shù)的含量正以驚人的速度提升。將盡可能大的完整的電子系統(tǒng)在單一FPGA芯片中實(shí)現(xiàn)已成為現(xiàn)實(shí),電子類新技術(shù)項(xiàng)目的開發(fā)也更多地依賴于FPGA技術(shù)的應(yīng)用。作為FPGA研究課題之一的矩陣鍵盤控制接口電路的設(shè)計(jì),在FPGA設(shè)計(jì)中是一個(gè)經(jīng)常被提到的話題,就像是利用PFGA設(shè)計(jì)數(shù)字中一樣,雖然簡單,但是卻是一個(gè)很有研究意義的話題,涉及到怎么樣才能是FPGA資源更加充分利用,現(xiàn)在很多電子產(chǎn)品都涉及到按鍵,小的有獨(dú)立按鍵,大的有N*N的矩陣鍵盤,獨(dú)立按鍵由于案件的個(gè)數(shù)少,也就沒必要考慮資源的利用問題了。而矩

9、陣鍵盤,由于按鍵多,對整個(gè)系統(tǒng)的影響大,所以肯定要考慮資源的利用問題,而且還要考慮一下電路里面的時(shí)序問題。本次設(shè)計(jì)要求設(shè)計(jì)一個(gè)4*9矩陣鍵盤,也就是行為4,列為9,一共可以設(shè)計(jì)36個(gè)按鍵。其中設(shè)計(jì)方法為:一般判斷鍵盤中有沒有按鍵按下是通過航線送入掃描信號,然后從列線中讀取狀態(tài)得到的,其方法是依次給行線送入低電平,檢查列線的輸入。如果列線信號趣味高電平,則代表低電平信號所在的行中無按鍵按下,反之,則有,則在低電平信號所在的行和出現(xiàn)低電平的交叉處有按鍵按下。一共有三個(gè)模塊,分別為:掃描電路模塊、時(shí)鐘產(chǎn)生模塊、鍵盤譯碼電路和按鍵標(biāo)志位產(chǎn)生電路。掃描模塊中是為了產(chǎn)生掃描信號,來利用掃描信號來掃描鍵盤中

10、中是否有按鍵按下。鍵盤譯碼電路和按鍵標(biāo)志位產(chǎn)生電路是為了配合掃描模塊來掃描電路中是否有按鍵按下,而且還要求它來產(chǎn)生按鍵標(biāo)志信號,以便和外部電路握手。時(shí)鐘產(chǎn)生電路是為了產(chǎn)生不同頻率的信號,來驅(qū)動上面兩個(gè)電路的運(yùn)轉(zhuǎn)。在設(shè)計(jì)完各個(gè)模塊后,還要對每個(gè)模塊進(jìn)行仿真,在仿真的過程中要對參數(shù)精心設(shè)計(jì),要不然看不出結(jié)果的。2. VHDL語言介紹與Quartus II 7.2 (32-Bit)軟件介紹2.1 VHDL語言的介紹2.1.1 VHDL語言概述VHDL 語言的英文全名是 Very High Speed Integrated Circuit Hardware Description Language,即

11、超高速集成電路硬件描述語言。 HDL 發(fā)展的技術(shù)源頭是:在 HDL 形成發(fā)展之前,已有了許多程序設(shè)計(jì)語言,如匯編、 C 、Pascal 、Fortran 、Prolog 等。這些語言運(yùn)行在不同硬件平臺和不同的操作環(huán)境中,它們適合于描述過程和算法,不適合作硬件描述。 CAD 的出現(xiàn),使人們可以利用計(jì)算機(jī)進(jìn)行建筑、服裝等行業(yè)的輔助設(shè)計(jì),電子輔助設(shè)計(jì)也同步發(fā)展起來。在從 CAD 工具到 EDA 工具的進(jìn)化過程中,電子設(shè)計(jì)工具的人機(jī)界面能力越來越高。在利用 EDA 工具進(jìn)行電子設(shè)計(jì)時(shí),邏輯圖、分立電子原件作為整個(gè)越來越復(fù)雜的電子系統(tǒng)的設(shè)計(jì)已不適應(yīng)。任何一種 EDA 工具,都需要一種硬件描述語言來作為

12、EDA 工具的工作語言。這些眾多的 EDA 工具軟件開發(fā)者,各自推出了自己的HDL 語言。 HDL發(fā)展的社會根源是:美國國防部電子系統(tǒng)項(xiàng)目有眾多的承包公司,由于各公司技術(shù)路線不一致,許多產(chǎn)品不兼容,他們使用各自的設(shè)計(jì)語言,使得甲公司的設(shè)計(jì)不能被乙公司重復(fù)利用,造成了信息交換困難和維護(hù)困難。美國政府為了降低開發(fā)費(fèi)用,避免重復(fù)設(shè)計(jì),國防部為他們的超高速集成電路提供了一種硬件描述語言,以期望 VHDL 功能強(qiáng)大、嚴(yán)格、可讀性好。政府要求各公司的合同都用它來描述,以避免產(chǎn)生歧義。 由政府牽頭, VHDL 工作小組于1981 年 6 月成立,提出了一個(gè)滿足電子設(shè)計(jì)各種要求的能夠作為工業(yè)標(biāo)準(zhǔn)的HDL 。1

13、983年第 3 季度,由 IBM 公司、 TI 公司、 Intermetrics。公司簽約,組成開發(fā)小組,工作任務(wù)是提出語言版本和開發(fā)軟件環(huán)境。1986 年 IEEE 標(biāo)準(zhǔn)化組織開始工作,討論 VHDL 語言標(biāo)準(zhǔn),歷時(shí)一年有余,于1987 年 12 月通過標(biāo)準(zhǔn)審查,并宣布實(shí)施,即 IEEE STD 1076 - 1987LRM87。1993 年 VHDL 重新修訂,形成了新的標(biāo)準(zhǔn),即 IEEE STD 1076 - 1993LRM93。 從此以后,美國國防部實(shí)施新的技術(shù)標(biāo)準(zhǔn),要求電子系統(tǒng)開發(fā)商的合同文件一律采用 VHDL 文檔。即第一個(gè)官方VHDL標(biāo)準(zhǔn)得到推廣、實(shí)施和普及。HDL 語言在國外有

14、上百種。高等學(xué)校、科研單位、EDA公司都有自己的HDL語言?,F(xiàn)選擇較有影響的作簡要介紹。 Candence 公司是一家著名的EDA公司,財(cái)力雄厚。該公司的 Verilog HDL于1983 年由Gate Way Design Automatic公司的Phil Moorby首創(chuàng)。他在1984-1985年間成功設(shè)計(jì)了Verilog-XL仿真器,于1986年提出了快速門級仿真的XL 算法,使Verilog HDL 語言變得更加豐富和完善,從而受到了EDA工具設(shè)計(jì)公司的青睞。1989年Candence公司購買了GDA公司,Verilog HDL語言從此變?yōu)镃andence公司的“私有財(cái)產(chǎn)”成為 Can

15、dence公司的EDA 設(shè)計(jì)環(huán)境上的硬件描述語言。經(jīng)過Candence公司的努力, Verilog HDL于1995年成為IEEE 標(biāo)準(zhǔn),也是民間公司第一個(gè)硬件描述語言標(biāo)準(zhǔn),即Verilog HDL 1364-1995。由于Verilog HDL語言從C語言發(fā)展來,所以有C語言基礎(chǔ)的設(shè)計(jì)人員能夠較快入門。 ALTERA 公司是一家半導(dǎo)體器件公司,其CPLD器件在世界市場上占主導(dǎo)地位。這家公司不僅是硬件生產(chǎn)廠商,也是EDA工具開發(fā)商,它的EDA工具M(jìn)AX+plus II、Quartus由于人機(jī)界面友好、易于使用、性能優(yōu)良,而受到FPGA、CPLD器件設(shè)計(jì)人員的歡迎。運(yùn)行在MAX+plus II環(huán)

16、境下的VHDL語言具有C語言設(shè)計(jì)風(fēng)格,好學(xué)好用,因此被眾多用戶使用。 HDL語言來自不同地方,由不同語言演變而來,為了各平臺之間相互轉(zhuǎn)換,又推出了EDIF (Electronic Design Interchange Format)。它不是一種語言,而是用于不同數(shù)據(jù)格式的EDA 工具之間的交換設(shè)計(jì)數(shù)據(jù)。2.1.2 VHDL語言的優(yōu)點(diǎn)傳統(tǒng)的硬件電路設(shè)計(jì)方法是采用自下而上的設(shè)計(jì)方法,即根據(jù)系統(tǒng)對硬件的要求,詳細(xì)編制技術(shù)規(guī)格書,并畫出系統(tǒng)控制流圖;然后根據(jù)技術(shù)規(guī)格書和系統(tǒng)控制流圖,對系統(tǒng)的功能進(jìn)行細(xì)化,合理地劃分功能模塊,并畫出系統(tǒng)的功能框圖;接著就進(jìn)行各功能模塊的細(xì)化和電路設(shè)計(jì);各功能模塊電路設(shè)計(jì)

17、、調(diào)試完成后,將各功能模塊的硬件電路連接起來再進(jìn)行系統(tǒng)的調(diào)試,最后完成整個(gè)系統(tǒng)的硬件設(shè)計(jì)。采用傳統(tǒng)方法設(shè)計(jì)數(shù)字系統(tǒng),特別是當(dāng)電路系統(tǒng)非常龐大時(shí),設(shè)計(jì)者必須具備較好的設(shè)計(jì)經(jīng)驗(yàn),而且繁雜多樣的原理圖的閱讀和修改也給設(shè)計(jì)者帶來諸多的不便。為了提高開發(fā)的效率,增加已有開發(fā)成果的可繼承性以及縮短開發(fā)周期,各ASIC研制和生產(chǎn)廠家相繼開發(fā)了具有自己特色的電路硬件描述語言(Hardware Description Language,簡稱HDL)。但這些硬件描述語言差異很大,各自只能在自己的特定設(shè)計(jì)環(huán)境中使用,這給設(shè)計(jì)者之間的相互交流帶來了極大的困難。因此,開發(fā)一種強(qiáng)大的、標(biāo)準(zhǔn)化的硬件描述語言作為可相互交流的

18、設(shè)計(jì)環(huán)境已勢在必行。于是,美國于1981年提出了一種新的、標(biāo)準(zhǔn)化的HDL,稱之為VHSIC(Very High Speed Integrated Circuit)Hardware Description Language,簡稱VHDL。這是一種用形式化方法來描述數(shù)字電路和設(shè)計(jì)數(shù)字邏輯系統(tǒng)的語言。設(shè)計(jì)者可以利用這種語言來描述自己的設(shè)計(jì)思想,然后利用電子設(shè)計(jì)自動化工具進(jìn)行仿真,再自動綜合到門級電路,最后用PLD實(shí)現(xiàn)其功能。綜合起來講,VHDL語言具有如下優(yōu)點(diǎn):(1)VHDL 語言功能強(qiáng)大,設(shè)計(jì)方式多樣。VHDL語言具有強(qiáng)大的語言結(jié)構(gòu), 只需采用簡單明確的VHDL語言程序就可以描述十分復(fù)雜的硬件電路

19、。同時(shí),它還具有多層次的電路設(shè)計(jì)描述功能。此外,VHDL 語言能夠同時(shí)支持同步電路、異步電路和隨機(jī)電路的設(shè)計(jì)實(shí)現(xiàn),這是其他硬件描述語言所不能比擬的。VHDL語言設(shè)計(jì)方法靈活多樣,既支持自頂向下的設(shè)計(jì)方式,也支持自底向上的設(shè)計(jì)方法;既支持模塊化設(shè)計(jì)方法,也支持層次化設(shè)計(jì)方法。(2)VHDL 語言具有強(qiáng)大的硬件描述能力。VHDL 語言具有多層次的電路設(shè)計(jì)描述功能,既可描述系統(tǒng)級電路,也可以描述門級電路;描述方式既可以采用行為描述、寄存器傳輸描述或者結(jié)構(gòu)描述,也可以采用三者的混合描述方式。同時(shí),VHDL語言也支持慣性延遲和傳輸延遲,這樣可以準(zhǔn)確地建立硬件電路的模型。VHDL語言的強(qiáng)大描述能力還體現(xiàn)在

20、它具有豐富的數(shù)據(jù)類型。VHDL語言既支持標(biāo)準(zhǔn)定義的數(shù)據(jù)類型,也支持用戶定義的數(shù)據(jù)類型,這樣便會給硬件描述帶來較大的自由度。(3)VHDL語言具有很強(qiáng)的移植能力。VHDL語言很強(qiáng)的移植能力主要體現(xiàn)在: 對于同一個(gè)硬件電路的VHDL語言描述,它可以從一個(gè)模擬器移植到另一個(gè)模擬器上、從一個(gè)綜合器移植到另一個(gè)綜合器上或者從一個(gè)工作平臺移植到另一個(gè)工作平臺上去執(zhí)行。 (4)VHDL語言的設(shè)計(jì)描述與器件無關(guān)。采用VHDL語言描述硬件電路時(shí), 設(shè)計(jì)人員并不需要首先考慮選擇進(jìn)行設(shè)計(jì)的器件。這樣做的好處是可以使設(shè)計(jì)人員集中精力進(jìn)行電路設(shè)計(jì)的優(yōu)化,而不需要考慮其他的問題。當(dāng)硬件電路的設(shè)計(jì)描述完成以后,VHDL語言

21、允許采用多種不同的器件結(jié)構(gòu)來實(shí)現(xiàn)。(5)VHDL語言程序易于共享和復(fù)用。VHDL語言采用基于庫(library)的設(shè)計(jì)方法。在設(shè)計(jì)過程中,設(shè)計(jì)人員可以建立各種可再次利用的模塊,一個(gè)大規(guī)模的硬件電路的設(shè)計(jì)不可能從門級電路開始一步步地進(jìn)行設(shè)計(jì),而是一些模塊的累加。這些模塊可以預(yù)先設(shè)計(jì)或者使用以前設(shè)計(jì)中的存檔模塊,將這些模塊存放在庫中,就可以在以后的設(shè)計(jì)中進(jìn)行復(fù)用。32.1.3 利用VHDL語言設(shè)計(jì)數(shù)字系統(tǒng)的特點(diǎn)當(dāng)電路系統(tǒng)采用VHDL語言設(shè)計(jì)其硬件時(shí),與傳統(tǒng)的電路設(shè)計(jì)方法相比較,具有如下的特點(diǎn):(1)采用自上而下的設(shè)計(jì)方法。即從系統(tǒng)總體要求出發(fā),自上而下地逐步將設(shè)計(jì)的內(nèi)容細(xì)化,最后完成系統(tǒng)硬件的整體

22、設(shè)計(jì)。在設(shè)計(jì)的過程中,對系統(tǒng)自上而下分成三個(gè)層次進(jìn)行設(shè)計(jì):第一層次是行為描述。所謂行為描述,實(shí)質(zhì)上就是對整個(gè)系統(tǒng)的數(shù)學(xué)模型的描述。一般來說,對系統(tǒng)進(jìn)行行為描述的目的是試圖在系統(tǒng)設(shè)計(jì)的初始階段,通過對系統(tǒng)行為描述的仿真來發(fā)現(xiàn)設(shè)計(jì)中存在的問題。在行為描述階段,并不真正考慮其實(shí)際的操作和算法用何種方法來實(shí)現(xiàn),而是考慮系統(tǒng)的結(jié)構(gòu)及其工作的過程是否能到達(dá)系統(tǒng)設(shè)計(jì)的要求。第二層次是RTL方式描述。這一層次稱為寄存器傳輸描述(又稱數(shù)據(jù)流描述)。如前所述,用行為方式描述的系統(tǒng)結(jié)構(gòu)的程序,其抽象程度高,是很難直接映射到具體邏輯元件結(jié)構(gòu)的。要想得到硬件的具體實(shí)現(xiàn),必須將行為方式描述的VHDL語言程序改寫為RTL方

23、式描述的VHDL語言程序。也就是說,系統(tǒng)采用RTL方式描述,才能導(dǎo)出系統(tǒng)的邏輯表達(dá)式,才能進(jìn)行邏輯綜合。第三層次是邏輯綜合。即利用邏輯綜合工具,將RTL方式描述的程序轉(zhuǎn)換成用基本邏輯元件表示的文件(門級網(wǎng)絡(luò)表)。此時(shí),如果需要,可將邏輯綜合的結(jié)果以邏輯原理圖的方式輸出。此后可對綜合的結(jié)果在門電路級上進(jìn)行仿真,并檢查其時(shí)序關(guān)系。應(yīng)用邏輯綜合工具產(chǎn)生的門級網(wǎng)絡(luò)表,將其轉(zhuǎn)換成PLD的編程碼點(diǎn),即可利用PLD實(shí)現(xiàn)硬件電路的設(shè)計(jì)。由自上而下的設(shè)計(jì)過程可知,從總體行為設(shè)計(jì)開始到最終的邏輯綜合,每一步都要進(jìn)行仿真檢查,這樣有利于盡早發(fā)現(xiàn)設(shè)計(jì)中存在的問題,從而可以大大縮短系統(tǒng)的設(shè)計(jì)周期。(2)系統(tǒng)可大量采用P

24、LD芯片。由于目前眾多制造PLD芯片的廠家,其工具軟件均支持VHDL語言的編程。所以利用VHDL語言設(shè)計(jì)數(shù)字系統(tǒng)時(shí),可以根據(jù)硬件電路的設(shè)計(jì)需要,自行利用PLD設(shè)計(jì)自用的ASIC芯片,而無須受通用元器件的限制。(3)采用系統(tǒng)早期仿真。從自上而下的設(shè)計(jì)過程中可以看到,在系統(tǒng)設(shè)計(jì)過程中要進(jìn)行三級仿真,即行為層次仿真、RTL層次仿真和門級層次仿真。這三級仿真貫穿系統(tǒng)設(shè)計(jì)的全過程,從而可以在系統(tǒng)設(shè)計(jì)的早期發(fā)現(xiàn)設(shè)計(jì)中存在的問題,大大縮短系統(tǒng)設(shè)計(jì)的周期,節(jié)約大量的人力和物力。(4)降低了硬件電路設(shè)計(jì)難度。在傳統(tǒng)的設(shè)計(jì)方法中,往往要求設(shè)計(jì)者在設(shè)計(jì)電路之前寫出該電路的邏輯表達(dá)式或真值表(或時(shí)序電路的狀態(tài)表)。這

25、一工作是相當(dāng)困難和繁雜的,特別是當(dāng)系統(tǒng)比較復(fù)雜時(shí)更是如此。而利用VHDL語言設(shè)計(jì)硬件電路時(shí),就可以使設(shè)計(jì)者免除編寫邏輯表達(dá)式或真值表之苦,從而大大降低了設(shè)計(jì)的難度,也縮短了設(shè)計(jì)的周期。(5)主要設(shè)計(jì)文件是用VHDL語言編寫的源程序。與傳統(tǒng)的電路原理圖相比,使用VHDL源程序有許多好處:其一是資料量小,便于保存。其二是可繼承性好。當(dāng)設(shè)計(jì)其他硬件電路時(shí),可使用文件中的某些庫、進(jìn)程和過程等描述某些局部硬件電路的程序。其三是閱讀方便。閱讀程序比閱讀電路原理圖要更容易一些,閱讀者很容易在程序中看出某一電路的工做原理和邏輯關(guān)系。而要從電路原理圖中推知其工作原理則需要較多的硬件知識和經(jīng)驗(yàn)。2.1.4 VHD

26、L語言的基本結(jié)構(gòu)一個(gè)完整的VHDL語言程序通常包含實(shí)體(Entity)、構(gòu)造體(Architecture)、配置(Configuration)、程序包(Package)和庫(Library)5個(gè)部分。前4個(gè)部分是可分別編譯的源設(shè)計(jì)單元。實(shí)體用于描述所設(shè)計(jì)的系統(tǒng)的外接口信號;構(gòu)造體用于描述系統(tǒng)內(nèi)部的結(jié)構(gòu)和行為;程序包存放各種設(shè)計(jì)模塊都能共享的數(shù)據(jù)類型、常數(shù)和子程序等;配置用于從庫中選取所需單元來組成系統(tǒng)設(shè)計(jì)的不同版本;庫存放已經(jīng)編譯的實(shí)體、構(gòu)造體、程序包和配置。庫可由用戶生成或由ASIC芯片制造商提供,以便于在設(shè)計(jì)中為大家所共享。2.2 Quartus II 7.2 (32-Bit)軟件介紹及其

27、用法2.2.1 Quartus II 7.2軟件介紹Quartus II設(shè)計(jì)軟件提供完整的多平臺設(shè)計(jì)環(huán)境,能夠直接滿足特定設(shè)計(jì)需要,為可編程芯片系統(tǒng)(SOPC)提供全面的設(shè)計(jì)環(huán)境。QuartusII 軟件含有 FPGA 和 CPLD 設(shè)計(jì)所有階段的解決方案 (圖2.1)。設(shè)計(jì)輸入功耗分析綜合仿真時(shí)序分析布局布線調(diào)試工程更改管理時(shí)序逼近包括基于模塊的設(shè)計(jì)、系統(tǒng)級設(shè)計(jì)和軟件開發(fā)圖2.1 QuartusII 軟件含有 FPGA 和 CPLD 設(shè)計(jì)所有階段的解決方案此外,Quartus II 軟件為設(shè)計(jì)流程的每個(gè)階段提供 Quartus II 圖形用戶界面、EDA工具界面以及命令行界面。可以在整個(gè)流程

28、中只使用這些界面中的一個(gè),也可以在設(shè)計(jì)流程的不同階段使用不同界面。本章介紹適用于每個(gè)設(shè)計(jì)流程的選項(xiàng)。圖形用戶界面設(shè)計(jì)流程:(圖2.2 )功耗分析:l PowerPlay功耗分析器l PowerPla早期功耗估算器EDA接口:l EDA網(wǎng)表寫入綜合l 分析和綜合l VHDL、Verilog HDL和AHDLl 設(shè)計(jì)助手l RTL查看器l 技術(shù)射影查看器l 漸進(jìn)式綜合基于模塊的設(shè)計(jì):l LogicLock 窗口l 時(shí)序逼近布局l VQM寫入約束輸入l 分配編輯器l 引腳規(guī)劃器l 設(shè)置對話框l 時(shí)序逼近布局l 設(shè)計(jì)分區(qū)窗口系統(tǒng)級設(shè)計(jì):l SOPC Builderl DSP Builder設(shè)計(jì)輸入l

29、文本編輯器l 模塊和符號編輯器l Megawizard插件管理器調(diào)試:l SignalTap 2l SignalProbel 在系統(tǒng)存儲內(nèi)容編輯器l RTL查看器l 芯片編輯器時(shí)序逼近:l 時(shí)序逼近布局l LogicLock窗口l 時(shí)序優(yōu)化向?qū) 設(shè)計(jì)空間管理器l 漸進(jìn)式編譯布局布線:l 適配器l 分配編輯器l 時(shí)序逼近布局l 漸進(jìn)式編譯l 報(bào)告窗口l 資源優(yōu)化向?qū) 設(shè)計(jì)空間管理器l 芯片編輯器時(shí)序分析l TimeQuest時(shí)序分析器l 標(biāo)準(zhǔn)時(shí)序分析器l 報(bào)告窗口l 技術(shù)映射查看器仿真:l 仿真器l 波形編輯器編程:l 匯編器l 編程器l 轉(zhuǎn)換編程文件工程更改管理:l 芯片編輯l 資源屬性編

30、輯器l 更改管路圖2.2 圖形用戶界面設(shè)計(jì)流程Quartus II 軟件包括一個(gè)模塊化編譯器。編譯器包括以下模塊(標(biāo)有星號的模塊表示在完整編譯時(shí),可根據(jù)設(shè)置選擇使用):u 分析和綜合u 分區(qū)合并*u 適配器u 匯編器 *u 標(biāo)準(zhǔn)時(shí)序分析器和TimeQuest時(shí)序分析器*u 設(shè)計(jì)助手*u EDA網(wǎng)表寫入器*u HardCopy 網(wǎng)表寫入器 *EDA 工具與 Quartus II 軟件配合使用時(shí)的基本設(shè)計(jì)流程:(1)創(chuàng)建新工程并指定目標(biāo)器件或器件系列。(2)指定與 Quartus II 軟件一同使用的 EDA 設(shè)計(jì)輸入、綜合、仿真、時(shí)序分析、板級驗(yàn)證、形式驗(yàn)證以及物理綜合工具,為這些工具指定其他選

31、項(xiàng)。(3)使用標(biāo)準(zhǔn)文本編輯器建立 Verilog HDL 或者 VHDL 設(shè)計(jì)文件,也可以使用MegaWizard 插件管理器建立宏功能模塊的自定義變量。(4)使用Quartus II支持的EDA綜合工具之一綜合您的設(shè)計(jì),并生成EDIF網(wǎng)表文件(.edf)或 Verilog Quartus映射文件(.vqm)。(5)(可選)使用Quartus II支持的仿真工具之一對您的設(shè)計(jì)進(jìn)行功能仿真。(6)在Quartus II軟件中對設(shè)計(jì)進(jìn)行編譯。運(yùn)行 EDA網(wǎng)表寫入器,生成輸出文件,供其他 EDA工具使用。(7)(可選)使用Quartus II支持的EDA時(shí)序分析或者仿真工具之一對設(shè)計(jì)進(jìn)行時(shí)序分析和仿

32、真。(8)(可選)使用Quartus II支持的EDA形式驗(yàn)證工具之一進(jìn)行形式驗(yàn)證,確保Quartus布線后網(wǎng)表與綜合網(wǎng)表一致。(9)(可選)使用Quartus II 支持的EDA板級驗(yàn)證工具之一進(jìn)行板級驗(yàn)證。(10)(可選)使用Quartus II 支持的EDA物理綜合工具之一進(jìn)行物理綜合。(11)使用編程器和 Altera 硬件對器件進(jìn)行編程。2.2.2 Quartus II 軟件的用法在建立新設(shè)計(jì)時(shí),應(yīng)重視考慮 Quartus II 軟件提供的設(shè)計(jì)方法,包括自上而下或自下而上的漸進(jìn)式設(shè)計(jì)流程以及基于模塊的設(shè)計(jì)流程。不管是否使用EDA設(shè)計(jì)輸入和綜合工具,都可以使用這些設(shè)計(jì)流程。 自上而下與

33、自下而上的設(shè)計(jì)方法比較Quartus II 軟件同時(shí)支持自上而下和自下而上的編譯流程。在自上而下的編譯過程中,一個(gè)設(shè)計(jì)人員或者工程負(fù)責(zé)人在軟件中對整個(gè)設(shè)計(jì)進(jìn)行編譯。不同的設(shè)計(jì)人員或者IP提供者設(shè)計(jì)并驗(yàn)證設(shè)計(jì)的不同部分,工程負(fù)責(zé)人在設(shè)計(jì)實(shí)體完成后將其加入到工程中。工程負(fù)責(zé)人從整體上編譯并優(yōu)化頂層工程。設(shè)計(jì)中完成的部分得到適配結(jié)果,當(dāng)設(shè)計(jì)的其他部分改動時(shí),其性能保持不變。自下而上的設(shè)計(jì)流程中,每個(gè)設(shè)計(jì)人員在各自的工程中對其設(shè)計(jì)進(jìn)行優(yōu)化后,將每一個(gè)底層工程集成到一個(gè)頂層工程中。漸進(jìn)式編譯提供導(dǎo)出和導(dǎo)入功能來實(shí)現(xiàn)這種設(shè)計(jì)方法。作為底層模塊設(shè)計(jì)人員,您可以針對他們的設(shè)計(jì),導(dǎo)出優(yōu)化后的網(wǎng)表和一組分配 (例

34、如 LogicLock區(qū)域)。然后,工程負(fù)責(zé)人將每一個(gè)設(shè)計(jì)模塊作為設(shè)計(jì)分區(qū)導(dǎo)入到頂層工程中。在這種情況下,工程負(fù)責(zé)人必須指導(dǎo)底層模塊設(shè)計(jì)人員,保證每一分區(qū)使用適當(dāng)?shù)钠骷Y源。在完整的漸進(jìn)式編譯流程中,您應(yīng)該認(rèn)識到,如果以前出于保持性能不變的原因而采用自下而上的方法,那么現(xiàn)在可以采用自上而下方法來達(dá)到同樣的目的。這一功能之所以重要是出于兩方面的原因。第一,自上而下流程要比對應(yīng)的自下而上流程執(zhí)行起來簡單一些。例如,不需要導(dǎo)入和導(dǎo)出底層設(shè)計(jì)。第二,自上而下的方法為設(shè)計(jì)軟件提供整個(gè)設(shè)計(jì)的信息,因此,可以進(jìn)行全局優(yōu)化。在自下而上的設(shè)計(jì)方法中,軟件在編譯每一個(gè)底層分區(qū)時(shí),并不知道頂層設(shè)計(jì)其他分區(qū)的情況,因

35、此,必須進(jìn)行資源均衡和時(shí)序預(yù)算。自上而下漸進(jìn)式編譯設(shè)計(jì)流程自上而下漸進(jìn)式編譯設(shè)計(jì)流程重新使用以前的編譯結(jié)果,確保只對修改過的設(shè)計(jì)重新編譯,因此能夠保持設(shè)計(jì)性能不變,節(jié)省編譯時(shí)間。自上而下的漸進(jìn)式編譯流程在處理其他設(shè)計(jì)分區(qū)時(shí),可以只修改設(shè)計(jì)中關(guān)鍵單元的布局,也可以只對設(shè)計(jì)的指定部分限定布局,使編譯器能夠自動優(yōu)化設(shè)計(jì)的其余部分,從而改進(jìn)了時(shí)序。在漸進(jìn)式編譯流程中,您可以為設(shè)計(jì)分區(qū)分配一個(gè)設(shè)計(jì)實(shí)體實(shí)例,然后使用時(shí)序逼近布局圖和LogicLock功能為分區(qū)分配一個(gè)器件物理位置,進(jìn)行完整的設(shè)計(jì)編譯。在編譯過程中,編譯器將綜合和適配結(jié)果保存在工程數(shù)據(jù)庫中。第一次編譯之后,如果對設(shè)計(jì)做進(jìn)一步的修改,只有改動

36、過的分區(qū)需要重新編譯。 完成設(shè)計(jì)修改后,您可以只進(jìn)行漸進(jìn)式綜合,節(jié)省編譯時(shí)間,也可以進(jìn)行完整的漸進(jìn)式編譯,不但能夠顯著節(jié)省編譯時(shí)間,而且還可以保持性能不變。在這兩種情況中,Quartus II 軟件為所選的任務(wù)合并所有的分區(qū)。由于漸進(jìn)式編譯流程能夠防止編譯器跨分區(qū)邊界進(jìn)行優(yōu)化,因此編譯器不會象常規(guī)編譯那樣對面積和時(shí)序進(jìn)行大量優(yōu)化。為獲得最佳的面積和時(shí)序結(jié)果,建議您記錄設(shè)計(jì)分區(qū)的輸入和輸出,盡量將設(shè)計(jì)分區(qū)數(shù)量控制在合理范圍內(nèi),避免跨分區(qū)邊界建立過多的關(guān)鍵路徑,不要建立太小的分區(qū),如數(shù)量少于 1000 的邏輯單元和自適應(yīng)邏輯模塊(ALM)分區(qū)。(1)設(shè)計(jì)輸入Quartus II工程包括在可編程器件

37、中最終實(shí)現(xiàn)設(shè)計(jì)需要的所有設(shè)計(jì)文件,軟件源文件和其他相關(guān)文件。使用修訂,可以比較工程多個(gè)版本的設(shè)置和分配,更快、更有效地滿足設(shè)計(jì)要求。使用 Quartus II 模塊編輯器、文本編輯器、MegaWizard 插件管理器和 EDA 設(shè)計(jì)輸入工具可以建立包括 Altera 宏功能模塊、參數(shù)化模塊庫(LPM)功能和知識產(chǎn)權(quán)(IP)功能在內(nèi)的設(shè)計(jì)。圖2.3為設(shè)計(jì)輸入流程:Megawizard插件管理EDA綜合工具Quartus II文本編輯器Quartus II符號編輯器Quartus II 模塊編輯器Megawizard插件管理器生成文件模塊符號文件Verlog hdl以及Vhdl文件EDIF網(wǎng)表文件

38、文本設(shè)計(jì)文件模塊設(shè)計(jì)文件至Quartus II綜合和分析圖2.3 設(shè)計(jì)輸入流程(2)建立工程單擊 File 菜單中的 New Project Wizard 或者運(yùn)行 quartus_map 可執(zhí)行文件建立新工程。建立新工程時(shí),指定工程工作目錄,分配工程名稱,指定頂層設(shè)計(jì)實(shí)體的名稱。還可以指定在工程中使用的設(shè)計(jì)文件、其它源文件、用戶庫和 EDA工具,以及目標(biāo)器件。表2.1列出了一個(gè) Quartus II 工程的設(shè)置文件和工程文件。一旦建立了工程,可以在 Settings 對話框的 Files 頁面中,從工程中添加和刪除設(shè)計(jì)文件以及其他文件。在執(zhí)行分析和綜合過程期間,Quartus II軟件將按文

39、件在 Files 頁面中顯示的順序來處理文件。單擊 Project 菜單中的 Copy Project 命令,將整個(gè)工程復(fù)制到新的目錄下,包括工程設(shè)計(jì)數(shù)據(jù)庫文件、設(shè)計(jì)文件、設(shè)置文件和報(bào)告文件,然后在新目錄下,打開該工程。如果還沒有建立新目錄,Quartus II 將生成該目錄。Project Navigator 顯示與當(dāng)前修訂相關(guān)的信息并且以圖形表示工程層次、文件和設(shè)計(jì)單元,以及各種菜單命令的快捷鍵。您也可以右鍵單擊信息,點(diǎn)擊 Customize Columns 命令,自定義 Project Navigator 所顯示的信息。45表2.1 Quartus II 工程文件文件 解說Quartus

40、 II工程文件(.qpf)指定用來建立工程和與工程相關(guān)修訂的 Quartus II軟件版本。Quartus II 設(shè)置文件(.qsf)包括分配編輯器、平面布局編輯器、Settings對話框、Tcl 腳本、Quartus II可執(zhí)行文件產(chǎn)生的所有修訂范圍內(nèi)或者獨(dú)立的分配。工程中每個(gè)修訂有一個(gè) QSF。Synopsys 設(shè)計(jì)約束文件(.sdc)含有以業(yè)界標(biāo)準(zhǔn) Synopsys 設(shè)計(jì)約束格式表示的設(shè)計(jì)約束和時(shí)序分配。Synopsys設(shè)計(jì)約束文件中的約束采用 Tcl 工具命令語言進(jìn)行描述,符合 Tcl語法規(guī)則。Quartus II工作空間文件(.qws)包含用戶偏好和其他信息,例如窗口位置,窗口中打開

41、文件及其位置。Quartus II默認(rèn)設(shè)置文件(.qdf)位于win目錄下,包括所有全局默認(rèn)設(shè)置。QSF 中的設(shè)置將替代這些設(shè)置。3. 矩陣鍵盤接口電路的原理與總體設(shè)計(jì)3.1 矩陣鍵盤接口電路的原理在鍵盤中按鍵數(shù)量較多時(shí),為了減少I/O口的占用,通常將按鍵排列成矩陣形式。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個(gè)按鍵加以連接。這樣,一個(gè)端口就可以構(gòu)成4*4=16個(gè)按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數(shù)比較多時(shí),采用矩陣法來做鍵盤是合理的。矩陣

42、式結(jié)構(gòu)的鍵盤顯然比直接法要復(fù)雜一些,識別也要復(fù)雜一些,列線通過電阻接正電源,并將行線所接的FPGA的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鍵沒有按下時(shí),所有的輸出端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。行列式鍵盤的電路原理如圖3.1所示:(為了說明問題以4*4為例)Keyin3Keyin2Keyin1Keyin0 FPGAKeydrv0Keydrv0Keydrv0Keydrv01523467890ABCDEF+5v圖3.1 行列式鍵盤的電路原理如圖設(shè)置掃描信號為keydrv3key

43、drv0,列線按鍵輸入信號keyin3keyin0與按鍵位置的關(guān)系如表3.1所示:表3.1 掃描信號和列線按鍵輸入信號與按鍵之間的關(guān)系表keydrv3keydrv0keyin3keyin0對應(yīng)的按鍵111011101110121011301114111051101110161011701118101111109110101011A0111B1110C01111101D1011E0111F3.2 總體設(shè)計(jì)系統(tǒng)結(jié)構(gòu)的總體設(shè)計(jì)鍵盤譯碼電路按鍵標(biāo)志產(chǎn)生電路4*9鍵盤時(shí)鐘產(chǎn)生電路掃描電路keyvaluekeypressedclkKeyin8.0Keydrv3.0圖3.2 鍵盤接口電路結(jié)構(gòu)圖由行列式鍵盤原

44、理就可以知道,要正確的完成鍵盤輸入工作必須有按鍵掃描電路產(chǎn)生keydrv3keydrv0信號。同時(shí)還必須有按鍵譯碼電路從keydrv3keydrv0信號和keyin3keyin0信號中譯碼出按鍵的值。此外,一般還需要一個(gè)按鍵發(fā)生信號用于和其他模塊接口,通知其他模塊鍵盤上有按鍵動作發(fā)生,并可以從鍵盤上讀取按鍵的鍵值。由于各個(gè)模塊需要的時(shí)鐘頻率是不一樣的,因此時(shí)鐘產(chǎn)生模塊就是用于產(chǎn)生各個(gè)模塊需要的時(shí)鐘信號。因此得到接盤接口電路的結(jié)構(gòu)如上圖所示。674. 各模塊的設(shè)計(jì)及仿真4.1 鍵盤掃描電路鍵盤掃描電路是用于產(chǎn)生keydrv3keydrv0信號,其變化的順序依次是1110-1101-1011-01

45、11-周而復(fù)始地掃描。其停留在某個(gè)狀態(tài)的時(shí)間大約為10ms。更短的停留時(shí)間是沒有必要的,因?yàn)槿税存I的時(shí)間大約為10ms,不可能有更快的按鍵動作發(fā)生;另外,更短的停留時(shí)間還容易采集到抖動信號,會干擾判斷。而太長的停留時(shí)間則會使某些較快的按鍵東走丟失。鍵盤掃描電路的外部接口電路如圖4.1所示,其中clk_scan是周期為10ms的掃描時(shí)鐘,keydrv為輸出到鍵盤的掃描信號,寬度為4位。圖4.1 鍵盤掃描電路的外部接口電路圖其VHDL描述如下:LIBRARY ieee;USE ieee.std_logic_1164.all;- Entity DeclarationENTITY key_scan I

46、S- ALTERA_IO_BEGIN DO NOT REMOVE THIS LINE!PORT(clk_scan : IN STD_LOGIC; -掃描時(shí)鐘,周期10mskeydrv : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) -輸出掃描信號);- ALTERA_IO_END DO NOT REMOVE THIS LINE!END key_scan;- Architecture BodyARCHITECTURE key_scan_architecture OF key_scan ISCONSTANT s0 :STD_LOGIC_VECTOR (3 DOWNTO 0):

47、=1110 ;-定義狀態(tài)機(jī)編碼CONSTANT s1 :STD_LOGIC_VECTOR (3 DOWNTO 0):=1101 ;CONSTANT s2 :STD_LOGIC_VECTOR (3 DOWNTO 0):=1011 ;CONSTANT s3 :STD_LOGIC_VECTOR (3 DOWNTO 0):=0111 ;SIGNAL present_state:STD_LOGIC_VECTOR(3 DOWNTO 0);-狀態(tài)機(jī)現(xiàn)態(tài)SIGNAL next_state:STD_LOGIC_VECTOR(3 DOWNTO 0); -狀態(tài)機(jī)次態(tài)BEGIN -狀態(tài)更新進(jìn)程PROCESS(clk_

48、scan)BEGINIF(clk_scanevent and clk_scan=1) thenpresent_statenext_statenext_statenext_statenext_statenext_state=s0;END CASE;END PROCESS;-輸出譯碼keydrv=present_state;END key_scan_architecture;以上程序采用一個(gè)狀態(tài)機(jī)來實(shí)現(xiàn)掃描電路。該狀態(tài)機(jī)是一個(gè)one-hot狀態(tài)機(jī),并且輸出值就是狀態(tài)機(jī)的狀態(tài),沒有通過一個(gè)邏輯電路來做輸出譯碼。這樣的好處是得到的輸出信號比較“干凈”,沒有毛刺。其仿真波形如圖4.2所示:圖4.2 鍵盤

49、掃描電路仿真圖從圖4.2中很容易發(fā)現(xiàn)present_state的值的變化是隨著掃描信號key_scan的上升沿的到來而變化的,也就是key_scan每來一個(gè)脈沖,相應(yīng)的present_state的值就變化一次。很容易發(fā)現(xiàn)keydrv的值的變化順序?yàn)?110-1101-1011-0111,也就是每個(gè)key_scan來一個(gè)脈沖時(shí),保證keydrv相鄰的值只有一個(gè)變化,這樣為了防止產(chǎn)生不必要的毛刺。present_state值和keydrv值是相同的,只不過一個(gè)用的二進(jìn)制,一個(gè)用的是十進(jìn)制,所以它的變化為1413117。4.2 鍵盤譯碼電路和按鍵標(biāo)志位產(chǎn)生電路鍵盤譯碼電路是從keydrv3 keyd

50、rv0和keyin3keyin0信號中譯碼出按鍵的鍵值的電路,它的真值表就是以前行掃描信號、列掃描與按鍵位置的關(guān)系圖。按鍵標(biāo)志位產(chǎn)生電路是產(chǎn)生按鍵標(biāo)志位信號keypressed的電路。由于這兩個(gè)電路關(guān)系緊密,因此放入同一個(gè)模塊中實(shí)現(xiàn)。其外部接口圖如圖4.3所示。其中clk為局信號,它是由FPGA芯片的外部晶振給出的。clk在系統(tǒng)中的頻率是最高,其他時(shí)鐘都是它的分頻產(chǎn)生。keydrv為鍵盤掃描信號,keyin為鍵盤輸入信號,keyvalue為鍵值(代表按鍵所在的位置),keypressed表示有一個(gè)按鍵被按下,每發(fā)生一次按鍵動作,keypressed就輸出一個(gè)寬度為全局時(shí)鐘周期的正脈沖。該信號用

51、于與其他模塊握手,負(fù)責(zé)通知其他模塊鍵盤是否有按鍵發(fā)生。其他模塊在keypressed有效時(shí),可以讀取鍵值。圖4.3 鍵盤譯碼電路的外部接口其VHDL實(shí)現(xiàn)如下:LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;ENTITY keydecoder ISPORT(clk : IN STD_LOGIC;-全局時(shí)鐘clk_scan : IN STD_LOGIC; -掃描時(shí)鐘 keyin : IN STD_LOGIC_VECTOR(8 DOWNTO 0);-鍵盤輸入keydrv : IN STD_LOGIC_VECT

52、OR(3 DOWNTO 0);-掃描信號keyvalue : OUT STD_LOGIC_VECTOR(8 DOWNTO 0);-鍵值keypressed : OUT STD_LOGIC -有按鍵按下);END keydecoder;ARCHITECTURE keydecoder_architecture OF keydecoder IS-TEMP =keyin & keydrv;SIGNAL temp:STD_LOGIC_VECTOR(12 DOWNTO 0) ;SIGNAL temp_pressed: STD_LOGIC;SIGNAL keypressed_asy: STD_LOGIC;S

53、IGNAL q1,q2,q3,q4,q5,q6 :STD_LOGIC;BEGINtemp=keyin & keydrv;-譯碼進(jìn)程參見附錄程序-按鍵標(biāo)志產(chǎn)生電路process (clk_scan)beginif (clk_scanevent and clk_scan=1) thenq1=temp_pressed;q2=q1;q3=q2;q4=q1;end if;keypressed_asy=q1 or q2 or q3 or q4 ;end process;-同步化keypressed_asyprocess(clk)beginif(clkevent and clk=1) then q5=key

54、pressed_asy;q6=q5;end if;keypressed=q5 and not(q6) ;end process;END keydecoder_architecture;上面程序是改進(jìn)的程序,原程序是:-同步化有鍵被按下PROCESS(clk)BEGINIF(clkevent and clk =1)THENq1=temp_pressed;q2=q1;END IF;keypressed=q1 and not(q2) ;END PROCESS;ENDkeydecoder_architecture;在這里先介紹一下沒有改進(jìn)的程序。上面程序中有兩個(gè)進(jìn)程。第一個(gè)進(jìn)程負(fù)責(zé)譯碼,值得注意的是WHEN OTHEN語句有沒有對temp_presse

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論