




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、畢畢業(yè)業(yè)設(shè)設(shè)計計(論論文文)題題 目:基于目:基于 fpga 的通用外設(shè)電路設(shè)計的通用外設(shè)電路設(shè)計英文題目:英文題目:design of universal peripheral circuit based on fpga摘摘 要要fpga 器件作為可編程邏輯主流硬件,近年來,應(yīng)用越來越廣泛,在現(xiàn)代科學(xué)技術(shù)中占有舉足輕重的作用和地位。其外設(shè)電路作為芯片與外界輸入方式之一,是十分具有研究價值的。fpga 器件不斷增加新的模塊,功能越來越強大,基于fpga 的外設(shè)電路也順應(yīng)形勢,不斷升級。本設(shè)計綜合行列式鍵盤、led 顯示器、時鐘一體,應(yīng)用 verilog hdl 語言實現(xiàn)下述功能:計時功能,包括
2、時分秒的計時;校時功能:對時分秒手動調(diào)整以校準(zhǔn)時間;鍵盤功能:應(yīng)用 4*4 行列式鍵盤,可實現(xiàn) 0-9 數(shù)字的直接輸入;led 動態(tài)掃描顯示和閃爍,移位,滅零等功能,突出了其作為硬件描述語言的良好的可讀性、可移植性和易理解等優(yōu)點,并通過 altera quartus8.0 完成綜合、仿真。本設(shè)計實現(xiàn)以上 fpga 各功能,可作為 eda 技術(shù)發(fā)展的價值體現(xiàn)。此程序通過下載到 fpga 芯片后,可應(yīng)用于實際的數(shù)字鐘顯示中。關(guān)鍵字關(guān)鍵字:行列式鍵盤、led 顯示器、時鐘、verilog hdl。abstractfpga programmable logic devices, as the main
3、stream of hardware, in recent years, more and more extensive applications in modern science and technology plays a vital role and status. its peripheral circuit chip with the outside world as one of input is very valuable in research. fpga devices are constantly adding new modules, more powerful, fp
4、ga-based response to the peripheral circuit is also the situation escalated.the determinant of the design of an integrated keyboard, led display, integrated clock, application verilog hdl language to achieve the following functions: time functions, including the time when minutes and seconds; school
5、 functions: every minute of time to manually adjust the calibration time; keyboard functions: application of 4 * 4 determinant keyboard, numbers 0-9 can be directly imported; led dynamic scanning display and blinking, shift, such as anti-zero function, highlights the hardware description language as
6、 a good readability, easy to understand the advantages of portability, and altera quartus 8.0 through the completion of synthesis, simulation. fpga design and implementation of the above various functions, can be used as the value of eda technology embodied. this process by downloading to the fpga c
7、hip can be used in practical digital clock display.keywords: determinant keyboard, led display, clock, verilog hdl.目 錄引 言.1第一章 系統(tǒng)硬件及設(shè)計軟件介紹.21.1 開發(fā)板介紹.21.2 設(shè)計軟件介紹.3第二章 系統(tǒng)方案設(shè)計.42.1 總設(shè)計方案.42.2 分頻器設(shè)計方案.42.3 行列式鍵盤設(shè)計方案.52.4 六位 7 段 led 顯示設(shè)計方案.62.5 頂層模塊設(shè)計方案.7第三章 系統(tǒng)程序設(shè)計.83.1 分頻器程序設(shè)計.83.2 行列式鍵盤程序設(shè)計.103.3 六位 7
8、 段 led 顯示程序設(shè)計.123.4 頂層模塊程序設(shè)計.13第四章 程序仿真.204.1 分頻器程序仿真.204.2 行列式鍵盤程序仿真.204.3 六位 7 段 led 顯示程序仿真.214.4 頂層模塊程序仿真.22結(jié) 論.25致 謝.27參考文獻.28附錄 1 分頻器程序.29附錄 2 行列式鍵盤程序.31附錄 3 六位 7 段 led 顯示程序.33附錄 4 頂層時鐘程序.35引 言計算機技術(shù)和微電子工藝的發(fā)展,使得現(xiàn)代數(shù)字系統(tǒng)的設(shè)計和應(yīng)用進入了新的階段。電子設(shè)計自動化(eda)技術(shù)在數(shù)字系統(tǒng)設(shè)計中起的作用越來越重要,新的工具和新的設(shè)計方案不斷推出,可編程邏輯器件不斷增加新的模塊,功
9、能越來越強,硬件設(shè)計語言也順應(yīng)形式,推出新的標(biāo)準(zhǔn),更加好用,更加便捷。本設(shè)計主要以 fpga 器件、eda 軟件工具、verilog hdl 硬件描述語言三方面內(nèi)容作為主線,綜合行列式鍵盤,led 顯示器件,以及時鐘模塊于一體,實現(xiàn)三個主要模塊的聯(lián)動,輸入部分為 4*4 行列式鍵盤,具備 0-9 十個數(shù)字鍵、修改/確認(rèn)鍵、左右移動鍵,輸出數(shù)據(jù)為 6 位二進制代碼,輸出部分為六位 7 段 led 數(shù)碼管,可實現(xiàn)時分秒顯示,時鐘滅零顯示,修改閃爍以及小數(shù)點秒閃爍功能。而頂層文件時鐘模塊則將輸入輸出部分聯(lián)結(jié)起來,實現(xiàn)時鐘發(fā)生,顯示緩存,數(shù)據(jù)修改,移位,滅零等功能。另時鐘產(chǎn)生模塊采用 fpga 硬件內(nèi)
10、置 66mhz 分頻,產(chǎn)生250hz,5hz,1hz 信號供時鐘模塊,輸入輸出模塊使用。本設(shè)計完全采用 verilog hdl 語言完成,此程序通過下載到 fpga 芯片后,可應(yīng)用于實際的數(shù)字鐘顯示中。第一章 系統(tǒng)硬件及設(shè)計軟件介紹1.1 開發(fā)板介紹本設(shè)計需要的硬件資源主要有:1、六位七段數(shù)碼管2、4*4 行列式鍵盤經(jīng)過仔細(xì)篩選,最終選定聯(lián)華眾科 fpga 開發(fā)板 fa130。聯(lián)華眾科 fpga 開發(fā)板 fa130 核心器件為 altera cyclone 系列的 ep1c3,配置芯片為 epcs1,fa130 上可以運行 sopc builder 制作的簡單的工程。fa130 具有豐富的板載
11、資源,由于板載有 51 單片機,fa130 還可以作為 51 單片機的學(xué)習(xí)開發(fā)板。fa130 實現(xiàn)了 3.3v 系統(tǒng)與 5v 系統(tǒng)對接功能,具體是通過 74lvxc3245(或簡稱 3245)實現(xiàn)的。fa130 隨板資料中包括豐富的開發(fā)實例和制作開發(fā)實例的詳細(xì)步驟說明,以及 quartus ii 環(huán)境下的設(shè)計輸入,綜合,仿真等內(nèi)容,另外還包括 sopc 建立和開發(fā)方面內(nèi)容,如nios ii 的建立和 nios ii 環(huán)境下 c/c+程序開發(fā)等。fa130 的 eda 開發(fā)實例包括vhdl 和 verilog 兩個版本,fa130 的 51 單片機開發(fā)實例包括匯編和 c 語言兩個版本。同時 fa
12、130 還包括詳細(xì)的使用手冊和豐富的配套資料,非常適合fpga,vhdl,verilog 開發(fā)學(xué)習(xí)者使用。另外 fa130 隨板 dvdrom 中還包括vs.net 的開發(fā)實例,在學(xué)習(xí) fpga 開發(fā)、51 單片機開發(fā)的同時還可以學(xué)習(xí)到vs.net 開發(fā)環(huán)境中 c#程序的開發(fā),vs.net 和 c#也是 wince.net 系統(tǒng)上主要的開發(fā)環(huán)境和編程語言。圖 1-1 fa130 開發(fā)板聯(lián)華眾科fpga開發(fā)板fa130具有豐富的板載資源。核心器件包括fpga芯片altera ep1c3t100和plcc封裝的單片機stc89le52。ep1c3可用i/o分4組全部以插針的形式引出,供外部擴展時使
13、用。fpga配置芯片為epcs1,epcs1為flash類型存儲器,存儲空間為1m位(1,046,496bits),epcs1可以工作在5v或3.3v,在本開發(fā)板epcs1與fpga的io相同工作電壓為3.3v。時鐘資源包括頻率為66m有源晶振和1個外接有源晶振插座,外接有源晶振插座可直接安裝用戶自己希望的任何頻率有源晶振。復(fù)位電路由一個復(fù)位按鍵和一片復(fù)位芯片組成,復(fù)位芯片為imp812t,imp812t輸出高電平有效的復(fù)位脈沖,脈沖寬度為140ms。imp812t的復(fù)位門限(reset threshold)為3.08v,輸出的復(fù)位信號同時提供給fpga芯片和單片機使用,fa130上ep1c3
14、和51單片機89le52均工作在3.3v電源電壓。顯示資源包括6位共陰七段數(shù)碼管,8位led(綠色),1片1602lcd顯示屏。鍵盤資源包括4*4按鍵陣列,4個獨立按鍵,其中4個獨立按鍵可以作為單片機的中斷源使用。電源部分包括1片lm1085-5.0,1片as2830-3.3和1片as2830-1.5,lm1085-5.0提供5v直流電源作為as2830-3.3,as2830-1.5輸入電源和lcd1602供電電源。as2830-3.3提供3.3v直流電源,作為fpga的io電源和開發(fā)板上其他設(shè)備電源。as2830-1.5提供1.5v直流電源,作為fpga的核心供電電源。存儲資源包括1片24c
15、02和1片93c46,24c02連接在i2c總線上,是存儲空間為256字節(jié)串行e2prom,24c02的設(shè)備地址也可以由板上的3位撥碼開關(guān)設(shè)置。93c46為spi接口的串行e2prom,93c46存儲空間為128字節(jié)。其他資源還包括8位撥碼開關(guān),連接到ep1c3上。1.2 設(shè)計軟件介紹本設(shè)計使用 altera 公司的 quartus ii 軟件,版本為 8.0。altera quartus ii 設(shè)計軟件是業(yè)界唯一提供 fpga 和固定功能 hardcopy 器件統(tǒng)一設(shè)計流程的設(shè)計工具。工程師使用同樣的低價位工具對 stratix fpga 進行功能驗證和原型設(shè)計,又可以設(shè)計hardcopy
16、stratix 器件用于批量成品。系統(tǒng)設(shè)計者現(xiàn)在能夠用 quartus ii 軟件評估hardcopy stratix 器件的性能和功耗,相應(yīng)地進行最大吞吐量設(shè)計。altera 的 quartus ii 可編程邏輯軟件屬于第四代 pld 開發(fā)平臺。該平臺支持一個工作組環(huán)境下的設(shè)計要求,其中包括支持基于 internet 的協(xié)作設(shè)計。quartus 平臺與 cadence、exemplarlogic、 mentorgraphics、synopsys 和 synplicity 等 eda 供應(yīng)商的開發(fā)工具相兼容。改進了軟件的 logiclock 模塊設(shè)計功能,增添 了 fastfit 編譯選項,推
17、進了網(wǎng)絡(luò)編輯性能,而且提升了調(diào)試能力。第二章 系統(tǒng)方案設(shè)計設(shè)計要求:1、行列式鍵盤電路包括:時鐘產(chǎn)生電路,掃描電路、按鍵標(biāo)志產(chǎn)生電路和鍵盤譯碼器;2、led 顯示電路設(shè)計包括:時鐘發(fā)生器、掃描信號發(fā)生器、顯示緩存器、七段譯碼器、小數(shù)點產(chǎn)生模塊和閃爍模塊;3、鍵盤與 led 顯示電路配合,完成數(shù)據(jù)修改,移位,滅零和小數(shù)點移動等功能。2.1 總設(shè)計方案根據(jù)課題要求,本設(shè)計主要由三個模塊完成,1)輸入:行列式鍵盤,具備 0-9 十個數(shù)字鍵及數(shù)據(jù)修改/確認(rèn),左移位鍵,右移位鍵三個功能鍵。2)輸出:六位 7 段數(shù)碼管。3)主程序:實現(xiàn)時鐘產(chǎn)生,鍵位識別,數(shù)據(jù)修改,移位等功能。4)應(yīng)以上三個模塊要求,設(shè)計
18、分頻模塊,產(chǎn)生符合要求的方波。如圖 2-1 所示:圖 2-1 系統(tǒng)設(shè)計方案圖2.2 分頻器設(shè)計方案本設(shè)計采用 fpga 硬件設(shè)計,其內(nèi)置時鐘頻率為 66mhz,而三個模塊需要的是頻率較低的信號,應(yīng)通過寄存器計數(shù)來實現(xiàn)分頻,考慮到高低頻率差異太大,所以拆分成為兩個寄存器來實現(xiàn),這樣可以得到 250hz 信號,然后再使用兩個寄存器可分別得到 5hz,1hz 兩個信號。如圖 2-2 所示。圖 2-2 分頻示意圖2.3 行列式鍵盤設(shè)計方案行列式鍵盤的工作方式是讀取行列線的狀態(tài),查看是否有按鍵按下。鍵盤部分提供一種掃描的工作方式,能對鍵盤不斷掃描、自動消抖、自動識別按下的鍵,并給出編碼,能對雙鍵或 n
19、個鍵同時按下的情況實行保護。本設(shè)計需要實現(xiàn)數(shù)據(jù)修改,移位,所以除了 0-9 數(shù)字鍵盤以外,還至少需要左右移位鍵及修改/確認(rèn)三個功能鍵,如圖 2-3 所示。圖 2-3 鍵盤示意圖鍵盤需要響應(yīng)迅速,所以采用了 250hz 信號,輸入由x1,x2,x3,x4;y1,y2,y3,y4 八根縱橫交錯的連接線組成,當(dāng)某根 x 連接線和y 連接線同時為低電平時有效,例如當(dāng) x3,y2 為低電平時,識別為“0”鍵,將輸出相應(yīng)信號供主程序識別。如圖 2-4 所示。圖 2-4 鍵盤電路原理2.4 六位 7 段 led 顯示設(shè)計方案在譯碼器設(shè)計時,常用發(fā)光二極管的狀態(tài)驗證設(shè)計是否滿足要求。這種方式是很直觀的,但在計
20、數(shù)器設(shè)計時,這樣的驗證方式就顯得很不直觀,尤其當(dāng)計數(shù)器的位數(shù)增加時(如百進制計數(shù)) ,太多的發(fā)光管將使結(jié)果的獨處非常困難。此時應(yīng)采用數(shù)碼管顯示,但是當(dāng)用七段數(shù)碼顯示器顯示的位數(shù)較多時(如顯示 8 位)bcd 碼十進制數(shù)) ,為了節(jié)省硬件開支,常用動態(tài)顯示方法,即對各 led 數(shù)碼管循環(huán)掃描。分時使用顯示器驅(qū)動電路。1) 驅(qū)動方式:直接驅(qū)動方式,直接對數(shù)碼管相應(yīng)的字段給出驅(qū)動電平,以顯示字形,其真值表如表 2-1 所示:表 2-1 led 真值表abcdefg輸出1111110001100001110110121111001301100114101101151011111611100007111
21、11118111101192)動態(tài)掃描顯示動態(tài)掃描的 fpga 實現(xiàn)可以采用將所有數(shù)碼管的相同字段并聯(lián),由 fpga 芯片的輸出信號 a,b,c,d,e,f,g 直接驅(qū)動相應(yīng)字段,由軟件編程產(chǎn)生片選信號ms1,ms2,,ms6 循環(huán)選中 6 個數(shù)碼管。數(shù)碼管顯示的字形由表 2-2 決定。3)相關(guān)知識共陰數(shù)碼管如右圖 2-5 所示:每一條線分別對應(yīng)一個管腳,當(dāng)管腳為1時,這條線為亮,當(dāng)管腳設(shè)置為0時,這條線不亮。例如:設(shè)置 a 的管腳為1,那么 0 這條線就會亮;設(shè)置 g 的管腳為1,那么 6 這條線就會亮。要讓數(shù)碼管顯示數(shù)字 0,那么我們可以設(shè)置a,b,c,d,e,f,g為“1111110”。
22、圖 2-5 數(shù)碼管示意圖2.5 頂層模塊設(shè)計方案此模塊為系統(tǒng)核心模塊,大部分的功能都由此模塊完成。1)時鐘模塊設(shè)計思路:定義一個長度為 24 位的時鐘顯示緩存寄存器,每 4 位用 bcd 碼來分別顯示時分秒的個位,十位,每當(dāng) 1 秒周期則秒個位加一,當(dāng)秒個位為 9 時則清零,秒十位加一,當(dāng)秒為 59 時清零,分加一,同理當(dāng)分為 59,秒為 59 時,分、秒清零,時加一,同理當(dāng)時為 23,分為 59,秒為 59 時,時分秒清零。完成時鐘的設(shè)計。2)鍵盤譯碼模塊設(shè)計思路:定義 1 位寄存器 sel,每當(dāng)檢測到 sel 信號則自加 1,當(dāng) sel 為 1 時進入修改狀態(tài),為 0 則為時鐘狀態(tài)。3)數(shù)
23、據(jù)移位模塊設(shè)計思路:定義 3 位寄存器 flag,當(dāng) flag 不為 0 時,每當(dāng)檢測到“”信號時,flag 自減 1,當(dāng) flag 不為 5 時,每當(dāng)檢測到“”信號,flag 自加 1。4)數(shù)據(jù)修改模塊設(shè)計思路:當(dāng) sel 為 1 時,進入修改狀態(tài),檢測 flag 的值,flag 的值分別對應(yīng)各將被修改的數(shù)據(jù),如圖 2-6。圖 2-6 數(shù)據(jù)修改信號檢測鍵盤輸入信號,若有 0-9 數(shù)字信號輸入則將對應(yīng)數(shù)字賦值給相應(yīng)時鐘顯示緩存寄存器。5)閃爍模塊設(shè)計思路:當(dāng) sel 為 1 時,引入 5hz 信號 clkss,當(dāng) clkss 為 1 時,flag 所對應(yīng)數(shù)據(jù)輸出信號為緩存數(shù)據(jù),為 0 時對應(yīng)數(shù)
24、據(jù)電平將為高阻態(tài)不顯示,這樣可實現(xiàn)被修改數(shù)據(jù)會以 5hz 的頻率閃爍顯示。6)顯示輸出模塊設(shè)計思路:將時鐘顯示緩存寄存器的數(shù)據(jù)賦值給輸出管腳。第三章 系統(tǒng)程序設(shè)計3.1 分頻器程序設(shè)計在現(xiàn)代電子系統(tǒng)中,數(shù)字系統(tǒng)所占的比例越來越大。系統(tǒng)發(fā)展的趨勢是數(shù)字化和集成化,而 cpld/fpga 作為可編程 asic(專用集成電路)器件,它將在數(shù)字邏輯系統(tǒng)中發(fā)揮越來越重要的作用。在數(shù)字邏輯電路設(shè)計中,分頻器是一種基本電路。通常用來對某個給定頻率進行分頻,以得到所需的頻率。整數(shù)分頻器的實現(xiàn)非常簡單,可采用標(biāo)準(zhǔn)的計數(shù)器,也可以采用可編程邏輯器件設(shè)計實現(xiàn)。本設(shè)計采用標(biāo)準(zhǔn)計數(shù)器來實現(xiàn)。根據(jù)設(shè)計思路,本模塊將 66
25、mhz信號分頻成為250hz,5hz,1hz 三個輸出信號,流程圖如圖 3-1 所示。程序每當(dāng)檢測到內(nèi)置時鐘上升沿,計數(shù)寄存器 1 自加1,如果寄存器 1 等于 999,則寄存器 1 置 0,寄存器 2 自加 1,如果寄存器 2 等于131,則 clksy 取反,寄存器3,寄存器 4 均自加 1,寄存器 2 清零,fs=fx/ns=50m/(999+1)*(131+1)=500,可得 clksy 每秒鐘取反 500 次,即可得 clksy=250hz, 圖 3-1分頻程序流程圖 同理寄存器 3 和寄存器 4 每 1/500 秒自加 1。如果寄存器 3 等于 249,則寄存器 3 清零,clk
26、取反,根據(jù)以上結(jié)果可得 clk 每秒取反2 次,即可得 clk=1hz。 如果寄存器 3 等于 49,則寄存器 4 清零,clkss 取反,根據(jù)以上結(jié)果可得 clkss 每秒取反 10 次,即可得 clkss=5hz。根據(jù)以上思路,verilog hdl 程序如下:module clkfs(clk,clkss,clksy,clk66mhz); input clk66mhz; output clk,clkss,clksy;reg clk,clkss,clksy; reg9:0 count1;reg6:0 count2; reg7:0 count3;reg5:0 count4; reg cin1,
27、cin2;always (posedge clk66mhz)if(count19:0=10d999)begin count19:0=10d0; cin1=1d1;/產(chǎn)生進位信號 1endelse begin count19:0=count19:0+10d1; cin1=1d0;/進位信號 1 清零endalways (posedge clk66mhz)if(count27:0=8d131)begin count27:0=8d0; clksy=clksy; /clksy=250hz cin2=1d1;/產(chǎn)生進位信號 2endelse begin count27:0=count27:0+cin1;
28、/若進位信號 1 為 1 則加 1,為 0 則不變 cin2=1d0;/進位信號 2 清零endalways (posedge clk66mhz)if(count37:0=8d249)begin count37:0=8d0; clk=clk; /clk=1hzendelse count37:0=count37:0+cin2;/若進位信號 2 為 1 則加 1,為 0 則不變always (posedge clk66mhz)if(count45:0=6d49)begin count45:0=6d0; clkss=clkss; /clkss=5hzendelse count45:0=count45
29、:0+cin2;endmodule3.2 行列式鍵盤程序設(shè)計相對 if 語句只有兩個分支而言,else 語句是一種多分支語句,故 case 語句多用于條件譯碼電路,本設(shè)計的行列式鍵盤模塊采用 case 語句鍵盤譯碼。利用 250hz 信號掃描 x 軸和 y 軸電位信號,當(dāng)某根 x 連接線和 y 連接線同時為低電平時有效。鍵盤去抖功能:按鍵在閉合和斷開時,觸點會存在抖動現(xiàn)象,本設(shè)計采用250hz 低頻信號,觸發(fā)判定為 clk 信號上升沿和下降沿,也就是在 40ms 時間內(nèi)會有兩次判定,如果兩次判定均為同一鍵位,則輸出鍵值,否則輸出為 0,可以消除觸點抖動的負(fù)面作用。示意圖如下:圖 3-2 去抖示
30、意圖圖示為兩次按鍵,第一次按鍵時間極短,可視為一次抖動,第二次為正常按鍵(時間較長,可以是多個 clk 周期,圖示只列出 1 個周期) ,現(xiàn)分析如下:圖示 1 處:讀取 key1 為低;圖示 2 處:讀取 key2 為高;結(jié)果:key 為 0,判定無按鍵。圖示 1 處:讀取 key1 為低;圖示 2 處:讀取 key2 為低;結(jié)果:key 為對應(yīng)鍵位值,判定有按鍵。程序如下:module keypad(clksy,x,y,key); /clksy=64hzinput clksy;input3:0 x,y; /4*4 key ,low activeoutput5:0 key;reg5:0 key
31、1,key2;always (posedge clksy) /第一次判定begincase(y3:0,x3:0)8b00010001:key15:0=6d1;8b00010010:key15:0=6d2;8b00010100:key15:0=6d3;8b00011000:key15:0=6d4;8b00100001:key15:0=6d5;8b00100010:key15:0=6d6;8b00100100:key15:0=6d7;8b00101000:key15:0=6d8;8b01000001:key15:0=6d9;8b01000010:key15:0=6d10;8b01000100:ke
32、y15:0=6d16;8b01001000:key15:0=6d32;8b10001000:key15:0=6d48;default:key15:0=6d0; /輸出結(jié)果寄存在 key1endcaseendalways (negedge clksy) /第二次判定begincase(y3:0,x3:0)8b00010001:key25:0=6d1; /鍵位 18b00010010:key25:0=6d2; /鍵位 28b00010100:key25:0=6d3; /鍵位 38b00011000:key25:0=6d4; /鍵位 48b00100001:key25:0=6d5; /鍵位 58b0
33、0100010:key25:0=6d6; /鍵位 68b00100100:key25:0=6d7; /鍵位 78b00101000:key25:0=6d8; /鍵位 88b01000001:key25:0=6d9; /鍵位 98b01000010:key25:0=6d10; /鍵位 08b01000100:key25:0=6d16; /鍵位8b01001000:key25:0=6d32; /鍵位8b10001000:key25:0=6d48; /鍵位 seldefault:key25:0=6d0;/輸出結(jié)果寄存在 key2endcaseendassign key=(key1=key2)?key
34、1:6d0; /判定 如果兩次結(jié)果相同 則輸出為/鍵值 如果不同 則輸出為 0endmodule3.3 六位 7 段 led 顯示程序設(shè)計聯(lián)華眾科 fpga 開發(fā)板 fa130 的數(shù)碼顯示為六位 7 段共陰極數(shù)碼管,其工作特點是,當(dāng)筆段電極接高電平,公共陰極接低電平時,相應(yīng)筆段發(fā)光。本模塊同時具有片選,七段譯碼,滅零功能。本模塊由 250hz 信號驅(qū)動,采用動態(tài)顯示方法,即對六個 led 數(shù)碼管循環(huán)掃描。分時使用顯示器驅(qū)動電路??傻妹總€數(shù)碼管顯示頻率為 250/642hz,人眼視覺暫留時間的要求為 25 幀每秒,可達(dá)到要求。程序如下:module xianshi(clksy,a,b,c,d,e
35、,f,g,d0,d1,d2,d3,d4,d5,num0,num1,num2,num3,num4,num5);input clksy;input3:0 num0,num1,num2,num3,num4,num5; /num0-num5 為時分秒 6 位輸入output a,b,c,d,e,f,g,d0,d1,d2,d3,d4,d5; /a-g 為數(shù)碼管 7 段電平reg a,b,c,d,e,f,g,d0,d1,d2,d3,d4,d5; /d0-d5 為片選信號reg3:0 num10,num11,num12,num13,num14,num15;reg3:0 temp;reg2:0 flag;al
36、ways(posedge clksy) begind0,d1,d2,d3,d4,d5=6b000000;if(flag=6) flag=0;else flag=flag+1;num10,num11,num12,num13,num14,num15=num0,num1,num2,num3,num4,num5;if(num15=0) /首位滅零num15=4bzzzz;case(flag)/片選0:begin temp=num10;d0=1;end1:begin temp=num11;d1=1;end2:begin temp=num12;d2=1;end3:begin temp=num13;d3=1
37、;end4:begin temp=num14;d4=1;end5:begin temp=num15;d5=1;enddefault:temp=0;endcasecase(temp) /七段譯碼 4d0:a,b,c,d,e,f,g=7b1111110; /顯示數(shù)字 0 4d1:a,b,c,d,e,f,g=7b0110000; /顯示數(shù)字 1 4d2:a,b,c,d,e,f,g=7b1101101; /顯示數(shù)字 2 4d3:a,b,c,d,e,f,g=7b1111001; /顯示數(shù)字 3 4d4:a,b,c,d,e,f,g=7b0110011; /顯示數(shù)字 4 4d5:a,b,c,d,e,f,g=
38、7b1011011; /顯示數(shù)字 5 4d6:a,b,c,d,e,f,g=7b1011111; /顯示數(shù)字 6 4d7:a,b,c,d,e,f,g=7b1110000; /顯示數(shù)字 7 4d8:a,b,c,d,e,f,g=7b1111111; /顯示數(shù)字 8 4d9:a,b,c,d,e,f,g=7b1111011; /顯示數(shù)字 9 default:a,b,c,d,e,f,g=7b0000000; /無任何顯示endcaseendendmodule3.4 頂層模塊程序設(shè)計根據(jù)設(shè)計思路,畫出流程圖,見 3-3。程序是無限循環(huán),也就是到了流程圖結(jié)束的地方后又會回到開始,程序首先判定是否有鍵按下,如果
39、有,則判定鍵值:若鍵值為或移動鍵,則會修改 flag 的值,有前文所述,flag 的值代表時分秒的個、十位;若鍵值為 sel 修改鍵,則會改變sel 寄存器的值,設(shè)計需求是按一次 sel 鍵將會進入修改狀態(tài),再按一次將退出修改狀態(tài),方案為設(shè)定 sel 寄存器為 1 位。程序接下來會判斷 sel 的值,如果為 1 則進入修改狀態(tài),為零則進入計時狀態(tài)。 在修改狀態(tài)下,程序再次判定鍵值,若為數(shù)字鍵,則會將對應(yīng)數(shù)據(jù)賦值給 flag所對應(yīng)緩存,若為或移動鍵,則會修改 flag 的值,若為 sel 修改/確認(rèn)鍵,將退出修改狀態(tài)。圖 3-3 頂層模塊設(shè)計流程圖在計時狀態(tài),程序?qū)⒅鹈雽γ刖彺婕?1,判斷:若秒
40、低位為 9,則秒低位清零,秒高位加一;判斷:若秒高位為 5,則秒高位清零,分低位加一;判斷:若分低位為 9,則分低位清零,分高位加一;判斷:若分高位為 5,則分高位清零,時低位加一;判斷:若時低位為 9,則時低位清零,時高位加一;判斷:若時高低位為 23,則時清零。程序到這里還沒有結(jié)束,關(guān)于修改位閃爍的方案,我將它和輸出管腳賦值整合在一起,首先判定是否為修改狀態(tài),若是,則將該修改數(shù)據(jù)和 5hz 頻率相與再賦值給輸出管腳,當(dāng) 5hz 頻率為高電平,輸出緩存數(shù)據(jù),反之則無輸出信號,這樣可實現(xiàn)被修改字符出現(xiàn)頻率為 5hz 的閃爍。程序如下:module clock(clkss,key,sec,min
41、,hour);input clkss;input5:0 key;reg sel;reg2:0 flag1,sumsec;output7:0 sec,min,hour;wire7:0 sec,min,hour; reg23:0 sum;reg seccin,cinsec,cinmin,ss0,ss1,ss2,ss3,ss4,ss5;initial flag1=3d0;always(posedge clkss)beginif(key=6d48) sel=sel+1d1;/如果為 sel 鍵 將在修改/確認(rèn)間切換else if(key=6d16) /如果為鍵 begin if(!flag1) fla
42、g1=flag1-3d1; /如果 flag 不為 0 ,那么 flag 減 1 endelse if(key=6d32) /如果為鍵 begin if(flag1=5) flag1=3d5;/如果 flag 等于 5 ,flag 值不變 else flag1=flag1+3d1;/否則 flag 加 1 endendalways(posedge clkss) /這段語句將 5hz 信號分頻成為 1hz 時鐘信號begin if(sumsec2:0=3d4)begin sumsec2:0=3d0; seccin=1;endelse begin sumsec2:0=sumsec2:0+3d1;
43、seccin=0;endendalways(posedge clkss)begin if(sel)/判定是否為修改狀態(tài)begin if(flag1=0) begin if(key=6d10) sum3:0=4d0; /零鍵位的識別 else sum3:0=key3:0?key3:0:sum3:0; /key 低四位不為零則賦值 end else if(flag1=1) begin if(key=6d10) sum7:4=4d0; else sum7:4=key3:0?key3:0:sum7:4; endendelse if(seccin) beginif(sum3:0=4d9)begin su
44、m3:0=4d0;if(sum7:4=4d5)begin sum7:4=4d0; cinsec=1;endelse begin sum7:4=sum7:4+4d1; cinsec=0;endendelse begin sum3:0=sum3:0+seccin; cinsec=0;endendendalways(posedge clkss)begin if(sel)begin if(flag1=2) begin if(key=6d10) sum11:8=4d0; else sum11:8=key3:0?key3:0:sum11:8; end else if(flag1=3) begin if(k
45、ey=6d10) sum15:12=4d0; else sum15:12=key3:0?key3:0:sum15:12; endendelse if(cinsec) beginif(sum11:8=4d9)begin sum11:8=4d0;if(sum15:12=4d5)begin sum15:12=4d0; cinmin=1;endelse begin sum15:12=sum15:12+4d1; cinmin=0;endendelse begin sum11:8=sum11:8+cinsec; cinmin=0;endendendalways(posedge clkss)beginif(
46、sel)begin if(flag1=4) begin if(key=6d10) sum19:16=4d0; else sum19:16=key3:0?key3:0:sum19:16; end else if(flag1=5) begin if(key=6d10) sum23:20=4d0; else sum23:20=key3:0?key3:0:sum23:20; endendelse if(cinmin) beginif(sum23:16=8d23) sum23:16=8d0;elseif(sum19:16=4d9) begin sum19:16=4d0; sum23:20=sum23:2
47、0+4d1; endelse sum19:16=sum19:16+cinmin;endendalways (posedge clkss)beginif(sel)begin case(flag1)/判定是否為修改狀態(tài)0:ss0,ss1,ss2,ss3,ss4,ss5=6b100000;1:ss0,ss1,ss2,ss3,ss4,ss5=6b010000;2:ss0,ss1,ss2,ss3,ss4,ss5=6b001000;3:ss0,ss1,ss2,ss3,ss4,ss5=6b000100;4:ss0,ss1,ss2,ss3,ss4,ss5=6b000010;5:ss0,ss1,ss2,ss3,
48、ss4,ss5=6b000001;default:ss0,ss1,ss2,ss3,ss4,ss5=6d0; endcaseendelse ss0,ss1,ss2,ss3,ss4,ss5=6d0;endassign sec3:0=ss0?(clkss?sum3:0:4bz):sum3:0; assign sec7:4=ss1?(clkss?sum7:4:4bz):sum7:4;assign min3:0=ss2?(clkss?sum11:8:4bz):sum11:8;assign min7:4=ss3?(clkss?sum15:12:4bz):sum15:12;assign hour3:0=ss
49、4?(clkss?sum19:16:4bz):sum19:16;assign hour7:4=ss5?(clkss?sum23:20:4bz):sum23:20; /*括號內(nèi)的值:clkss 高電平 sum,低電平為高阻態(tài),輸出管腳的值:該管腳在修改狀態(tài)則為括號內(nèi)的值 否則為 sum 值*/endmodule第四章 程序仿真4.1 分頻器程序仿真因為分頻比例太大,在仿真時將比例減小。下圖為將寄存器 1 的分頻比 1000:1 改為 1:1,即:if(count19:0=10d999)if(count19:0=10d0);寄存器 2 的分頻比 132:1 改為 2:1,即:if(count27:
50、0=8d131)if(count27:0=8d1);將寄存器 3 的分頻比 250:1 改為 3:1,即:if(count37:0=8d249)if(count37:0=8d2);將寄存器 4 的分頻比 50:1 改為 6:1,即:if(count45:0=6d49) if(count45:0=6d5);其他程序部分無任何改變,圖 4-1 為修改后的程序仿真結(jié)果。圖 4-1 分頻器模擬仿真設(shè)在單位時間內(nèi):clk50mhz 的上升沿的次數(shù)為 n,clksy 取反次數(shù)為 nsy,計數(shù)器 1 的分頻比為 p1,計數(shù)器 2 的分頻比為 p2,計數(shù)器 3 的分頻比為 p3,計數(shù)器4 的分頻比為 p4,則
51、 nsy=n/(p1*p2) ,代入模擬仿真數(shù)據(jù),得 nsy=n/2,若在 4 個clk50mhz 的時間內(nèi),clksy 取反 2 次,即一個周期,所以 clksy 與 clk50mhz 的頻率比為 1:4,與模擬仿真結(jié)果吻合。如圖可看出:在 clksy 取反 6 次的時間內(nèi),clkss 取反一次,clk 取反 3 次,仿真結(jié)果正確。如將各寄存器分頻比改為原值,能得到與程序設(shè)計所需要頻率一致的結(jié)果。4.2 行列式鍵盤程序仿真這部分的仿真比較簡單,如圖 4-2 所示。 圖 4-2 行列式鍵盤程序仿真在上圖中,一共模擬了 3 次按鍵,對照圖 2-3 和圖 2-4:第一次按下 x3,y3 鍵,即鍵,
52、輸出 key4=1,即 key5:0=16;第二次按下 x3,y2 鍵,即 7 鍵,輸出 key5:0=7;第三次按下 x2,y2 鍵,即 6 鍵,輸出 key5:0=6.可看出仿真結(jié)果完全正確。4.3 六位 7 段 led 顯示程序仿真如圖 4-3 所示為輸入信號:圖 4-3 led 輸入信號圖 4-4 所示為輸出信號。圖 4-4 led 輸出信號由圖可得:片選信號正常工作,a,b,c,d,e,f,g 七段信號隨片選信號變化,對比共陰極數(shù)碼管真值表 2-1,仿真結(jié)果正確。4.4 頂層模塊程序仿真1)時鐘仿真,如圖 4-5。 圖 4-5 時鐘仿真2)閃爍仿真,如圖 4-6。圖 4-6 閃爍仿真
53、3)移位仿真,如圖 4-7。圖 4-7 移位仿真4)修改仿真如圖 4-8。圖 4-8 修改仿真5)確認(rèn)鍵仿真,如圖 4-9。圖 4-9 確認(rèn)鍵仿真說明一下 key 值代表的含義:1-10:表示輸入數(shù)字 1,2,3,9,0;16:左移32:右移48:修改/確認(rèn)由以上多圖仿真可看出,程序功能完全正確。4.5 原理圖 如圖 4-10 所示。圖 4-10 原理圖連接本設(shè)計沒有外部鏈接,分頻模塊接入開發(fā)板內(nèi)置時鐘 66mhz 信號,輸入模塊接 4*4 行列式鍵盤,輸出部分為六位 7 段數(shù)碼管,小數(shù)點顯示部分直接接入 1hz 信號,作為時鐘狀態(tài)下秒的顯示信號。結(jié) 論本設(shè)計實現(xiàn)了設(shè)計任務(wù)要求的大部分功能,設(shè)
54、計要求實現(xiàn)的時鐘,鍵盤,閃爍,顯示等功能都已完成,仿真結(jié)果也令我十分滿意,雖然仿真結(jié)果中存在不少抖動現(xiàn)象,但經(jīng)過觀察,抖動的時間很短,并且在各時鐘的上升沿和下降沿時沒有抖動(同 3.2 節(jié)鍵盤去抖原理) ,并且 led 顯示部分的仿真結(jié)果不存在抖動,如果將程序?qū)懭?fpga 開發(fā)板,將不存在由抖動帶來的任何負(fù)面作用。但本設(shè)計不足的地方還有很多,相對來說,這是一個簡單的程序,可以改進的地方還有很多,如在鍵盤中加入“+”“-”“=”等鍵實現(xiàn)簡單計算器的功能,如加入百分秒寄存器實現(xiàn)秒表功能,設(shè)計要求的小數(shù)點功能也被我簡化成為了一個 1hz 的連接線(見圖 4-5) ,這些升級功能暫且不提,在仿真時我
55、發(fā)現(xiàn)了一個比較不方便的負(fù)面作用,在按鍵時只考慮了去抖,卻沒有考慮按鍵的延時,舉例來說,若按下“”鍵,鍵盤模塊會立即響應(yīng)(250hz)并傳遞鍵值給主模塊,主模塊將會在 0.2 秒(5hz)內(nèi)響應(yīng)這個信號并改變 flag 的值,仿真在這里沒有出現(xiàn)問題,但是:如果在下一個 0.2 秒內(nèi)仍在繼續(xù)按著“”鍵,主模塊將會繼續(xù)改變 flag 的值,也就是說,如果按下“”一秒,flag 將左移 5 次,而一般鍵盤卻是按下再彈起時才會做出響應(yīng),或持續(xù)按下一段時間后才會做出“連加”響應(yīng)。解決辦法:定義一個 4 位寄存器,寄存器的值在主程序接收到鍵值時改變,如下所示:reg3:0 key1; /定義寄存器alway
56、s (posedge clkss) begin if(key1) /如果 key1 不為 0 begin if(!key) /如果 key 為 0,即已經(jīng)松開按鍵 case(key1) /判斷 key1 的值1:; /對應(yīng)各值的處理方法,不再累贅2:;3:; :13:; endcaseendelse /如果為 0,將檢測 key 的值,如果 key 不為零 /則將 key 的鍵位 1-13 賦值給 key1,不再贅述關(guān)于小數(shù)點移動的功能實現(xiàn)。本設(shè)計實現(xiàn)了 fpga 的“外設(shè)”功能,但是似乎卻并不“通用” , 本設(shè)計中,小數(shù)點僅僅起到一個跟隨秒閃爍的功能,eda 技術(shù)的發(fā)展,hdl 語言的強大不
57、僅僅是制作一個帶鍵盤的時鐘,當(dāng)為了實現(xiàn)更多的功能,小數(shù)點的移動十分的必要,下面簡要敘述下其設(shè)計思想:例:使用鍵盤輸入一組帶小數(shù)點的數(shù)據(jù),要求液晶實時顯示輸入數(shù)據(jù)設(shè)計思想:定義一個默認(rèn)為 0 的寄存器,代表小數(shù)點的位置為最低位,當(dāng)檢測到鍵盤小數(shù)點輸入時,觸發(fā)一個模塊,當(dāng)再次檢測到數(shù)字輸入時,該寄存器自加一。功能實現(xiàn):例如鍵盤輸入 123.456 液晶顯示器依次顯示結(jié)果如下:1.;12.;123.;123.4;123.45;123.456。實現(xiàn)了小數(shù)點移動功能。綜上所述,在完成一個設(shè)計課題時,要充分考慮到各種問題,以及實現(xiàn)方法的優(yōu)越性,盡量使在滿足課題要求的前提下做到盡善盡美。這就要我們多思考多對
58、比,多總結(jié)和參考相關(guān)的參考資料,認(rèn)真的投入到設(shè)計中。致 謝本課題在選題及研究過程中得到黃鄉(xiāng)生老師的悉心指導(dǎo)。黃老師多次詢問研究進程,并為我指點迷津,幫助我開拓研究思路,精心點撥、熱忱鼓勵。感謝管小明老師、陳堅老師等對我的教育培養(yǎng)。他們細(xì)心指導(dǎo)我的學(xué)習(xí)與研究,在此,我要向諸位老師深深地鞠上一躬。感謝我的同學(xué)李小雷、鄒蕾、馬立剛、鄭志強四年來對我學(xué)習(xí)、生活的關(guān)心和幫助。參考文獻 1 王金明 編著數(shù)字系統(tǒng)設(shè)計與 verilog hdl (第二版).北京:電子工業(yè)出版社,2005.9 2 黃鄉(xiāng)生 編寫eda 技術(shù)與應(yīng)用實踐教學(xué)指導(dǎo)書.東華理工大學(xué)電子與機械工程學(xué)院,2007.103 王金明 編著ver
59、ilog hdl 程序設(shè)計教程.北京:人民郵電出版社,20044 潘松 黃繼業(yè) 編著eda 技術(shù)實用教程.北京:科學(xué)出版社,2002 5 黃任 編著vhdl 入門解惑經(jīng)典實例經(jīng)驗總結(jié) (第一版).北京:北京航空航天大學(xué)6 王金明,楊吉斌編著數(shù)字系統(tǒng)設(shè)計與 verilog hdl.北京:電子工業(yè)出版社,2002 7 doulos 編寫verilog黃金參考指南.verilog-xltm,1996 8 charke k kphase measurement,traceability,and verification,theoryand practicej ieee transim,1990,9 j
60、.bhasker 著,徐振林等譯.verilog hdl 硬件描述語言.北京:機械工業(yè)出版社,2000附錄 1 分頻器程序module clkfs(clk,clkss,clksy,clk66mhz);input clk66mhz;output clk,clkss,clksy;reg clk,clkss,clksy;reg9:0 count1;reg7:0 count2;reg7:0 count3;reg5:0 count4;reg cin1,cin2;always (posedge clk66mhz)if(count19:0=10d999)begin count19:0=10d0; cin1=
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 代理電動車合同范例
- 借名買房合同范本
- 租賃合同通知函
- 農(nóng)村收購單車合同范例
- 農(nóng)村果園承包合同范本
- 云平臺建設(shè)合同范本
- 云南租房合同范本
- 供應(yīng)電水氣合同范本
- 水電站隧道排水孔施工方案
- 乙方裝修合同范本
- 夏玉米套種辣椒技術(shù)
- 學(xué)術(shù)規(guī)范與寫作課件
- 2023年江蘇省南京市市場監(jiān)督管理局所屬事業(yè)單位招聘5人(共500題含答案解析)筆試歷年難、易錯考點試題含答案附詳解
- 絕緣電阻測試儀安全操作規(guī)程
- DB6101T 197-2022 藤蔓類尾菜堆肥技術(shù)規(guī)程
- 《生僻字》歌詞(帶拼音解釋)
- 西藏房屋建筑工程竣工材料全套表格
- 品管圈基本知識
- 物業(yè)項目保潔服務(wù)質(zhì)量保證及安全保障措施(標(biāo)書專用)參考借鑒范本
- 量子力學(xué)英文課件格里菲斯Chapter4
- 人教版小學(xué)四年級數(shù)學(xué)下冊電子教案 全冊
評論
0/150
提交評論