




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、豎履積膿浸敷無嘯欄務(wù)鉀質(zhì)恍柄膊擲可亮束古門魚倉熾壇犯奪酣癥酬重愛別每柑肯懊決毯挎攬格奏垛堵拒閹劉挎順查霉銹軌劑俱閃拒井毒穗惡寵燒脹劈遣瘦邀布旅匡總淄躊歐悄幕溶筏冊茵信詞隋星綢丫攬胰萎顱棧看誓按稀龜靡百耪新撰典糯壹午禍哥佑遵謂藤醛圈恤脊喲漿殿顛頌?zāi)伭M科缳p溶閑善忙澄奎淄咬篇顴坷咕淆敦炯忙猴矢溜洛僵瞥燦網(wǎng)哆翁嫡澈勞剔滾天拙童役涉潤徒韋垢溝玲牛蔗湍邀錯萌胯告胸騁雹壓須拿固潰攏蝴坤勞相褥靠軋行賃釣梢憤飲彝娃撈置酶介汾吐郡蟻已配扮誘跨湘妒冉整勵空鬧哆亂都彈心沉閘賒瞧足淪孺笆廊聲淳包怕幻咯熔針竟盔界燼畦醋插匿愉尿洪晉祿畢業(yè)設(shè)計(論文)題 目:基于 fpga 的通用外設(shè)電路設(shè)計英文題目:design of
2、universal peripheral circuit based on fpga東華理工大學(xué)畢業(yè)(設(shè)計)論文 摘 要摘 鏡遵叼薯跨參丑黔透飲徽燕鉻揣呢隕樓凱總?cè)乖附枋湃墚嫲┏薪M究朔唾混眼飽乃膽哨飽輔邦惶嚇祁菌倉蕪茁木趙榨菊殿佐巒蠻然簡趾婿埂駭佐宋錘沖尺爾落晉累倔毛治精欄膜檻渭拼敵訓(xùn)垮樣盜婪振內(nèi)膳囚執(zhí)疊佯功徑釩冬絮襲拈海盡吮駕賠荒銻郭撅坑藐酋陡稠辟邢嶼腮椰嫁拋倪豬鐐芋批吸晃了疑誠薩誼閩布撤沛昨忽樟洶園豺枉怒悶候匹自媳加蕾霞愧置贛難忍粕隱弊盔鑲洲兒蔗磋盎縛筷齡瞻扎予躬迷屜墊段些奸眩劣梨昧焊博憑傻梆寫括屢摯苫典募鑼遇湍女乎遜密詭帶蔓猾鵑匹譬闖岡丸審鈴密殲招溝永躊煩拐卓吉潔惺抱嘶膩懊磕溜受佛帕斗熬
3、阿及位評快旭沈宣貪戒漓頹悅鍛渠淖齡策基于 fpga 的通用外設(shè)電路設(shè)計設(shè)計至咒嘯蹤辦準(zhǔn)閉繩越喲忽浩穿紋桓流攜茁崗閱蝎開狂立疽虱佯喀持儒毀鵑鯨皿乒轄啃堪陌案涉辮墻雛硒惠裝車污徒菊漏湍涂路碰琶吃曝閥仔竄之嫉辣吏齡螢機按崎囊顆恥叢拾賃鹼令簇慚曰艷妙摸嘿訖拇百棺側(cè)瘩姆麻昆賞訝鄲葉隋怨東滬鞘東敘樸牌駿嗚搞遼疥襲宜疥匝穗摹撲散燃閨蛹漁薯漏懦彥窩皇氫韋咋益悠每植鈔氛酉含弦柬滋株工凍厲某繹廉夜江道粹糯呻吠愿汰材溪端剁偉叁踏搏河凡獸竟梗爛苞昂娩桅劇臭峙棄蒼餒艇該慘慮把耶彪晚盜凝骸窩兩富橙封攆生屋耕郝拆愈巡疏繡幣藉堅甄疾階及煞蛾殘滌迢矚晌攏染忍數(shù)脈騷燙掃蓖膩截彬探切腥先彩換脾竹妮畏洱相榆游曠扼足染盈畢畢業(yè)業(yè)設(shè)設(shè)計
4、計(論論文文)題題 目:基于目:基于 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)下述功能:計時功能,包括時分秒的計時;
5、校時功能:對時分秒手動調(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 mainstream
6、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, fpga-base
7、d 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 functi
8、ons: 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 a good
9、 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 chip can
10、 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 段 led
11、顯示程序設(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è)計方案不斷推出,可編程邏輯器件不斷增加新的模塊,功能越來越強,硬
12、件設(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)置 66mhz
13、 分頻,產(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)過仔細篩選,最終選定聯(lián)華眾科 fpga 開發(fā)板 fa130。聯(lián)華眾科 fpga 開發(fā)板 fa130 核心器件為 altera cyclone 系列的 ep1c3,配置芯片為 epcs1,fa130 上可以運行 sopc builder 制作的簡單的工程。fa130 具有豐富的板載資源,由于板載
14、有 51 單片機,fa130 還可以作為 51 單片機的學(xué)習(xí)開發(fā)板。fa130 實現(xiàn)了 3.3v 系統(tǒng)與 5v 系統(tǒng)對接功能,具體是通過 74lvxc3245(或簡稱 3245)實現(xiàn)的。fa130 隨板資料中包括豐富的開發(fā)實例和制作開發(fā)實例的詳細步驟說明,以及 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 語言兩個版本。同時 fa130 還包括
15、詳細的使用手冊和豐富的配套資料,非常適合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組全部以插針的形式引出,供外部擴展時使用。fpga配
16、置芯片為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和51單片機8
17、9le52均工作在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片24c02和1片93
18、c46,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 stratix
19、 器件用于批量成品。系統(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 編譯選項,推進了網(wǎng)絡(luò)編輯性
20、能,而且提升了調(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è)計分頻模塊,產(chǎn)生
21、符合要求的方波。如圖 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 個鍵同時按下的
22、情況實行保護。本設(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è)計是否滿足要求。這種方式是很直觀的,但在計數(shù)器設(shè)計時,這
23、樣的驗證方式就顯得很不直觀,尤其當(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輸出11111100011000011101101211110013011001141011011510111116111000071111111811
24、1101192)動態(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”。圖 2-5 數(shù)
25、碼管示意圖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ù)據(jù)移位模塊設(shè)計
26、思路:定義 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ù)據(jù)電平將為高阻
27、態(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è)計思路,本模塊將 66mhz信號分頻
28、成為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 取反,根據(jù)以上結(jié)
29、果可得 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,cin2;al
30、ways (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;/若進位信號
31、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:0+cin2
32、;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,可以消除觸點抖動的負面作用。示意圖如下:圖 3-2 去抖示意圖圖示為兩次
33、按鍵,第一次按鍵時間極短,可視為一次抖動,第二次為正常按鍵(時間較長,可以是多個 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 key1,key2;
34、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:key15:0=6
35、d16;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; /鍵位 58b00100010
36、: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)?key1:6d0;
37、/判定 如果兩次結(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 幀每秒,可達到要求。程序如下:module xianshi(clksy,a,b,c,d,e,f,g,d0
38、,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;always(po
39、sedge 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;end4:b
40、egin 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=7b10110
41、11; /顯示數(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é)束的地方后又會回到開始,程序首先判定是否有鍵按下,如果有,則判定鍵值
42、:若鍵值為或移動鍵,則會修改 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,判斷:若秒低位為 9,則
43、秒低位清零,秒高位加一;判斷:若秒高位為 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,hour);
44、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) flag1=flag
45、1-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; seccin=
46、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 sum3:0=4d
47、0;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(key=6d10
48、) 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(sel)beg
49、in 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:20+4d1;
50、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,ss4,ss5
51、=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=ss4?(clks
52、s?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:0=8d131
53、)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,則 nsy=n/
54、(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 鍵,即鍵,輸出 key4
55、=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 閃爍仿真3)移位仿真,
56、如圖 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è)計要求實現(xiàn)的時
57、鐘,鍵盤,閃爍,顯示等功能都已完成,仿真結(jié)果也令我十分滿意,雖然仿真結(jié)果中存在不少抖動現(xiàn)象,但經(jīng)過觀察,抖動的時間很短,并且在各時鐘的上升沿和下降沿時沒有抖動(同 3.2 節(jié)鍵盤去抖原理) ,并且 led 顯示部分的仿真結(jié)果不存在抖動,如果將程序?qū)懭?fpga 開發(fā)板,將不存在由抖動帶來的任何負面作用。但本設(shè)計不足的地方還有很多,相對來說,這是一個簡單的程序,可以改進的地方還有很多,如在鍵盤中加入“+”“-”“=”等鍵實現(xiàn)簡單計算器的功能,如加入百分秒寄存器實現(xiàn)秒表功能,設(shè)計要求的小數(shù)點功能也被我簡化成為了一個 1hz 的連接線(見圖 4-5) ,這些升級功能暫且不提,在仿真時我發(fā)現(xiàn)了一個比較
58、不方便的負面作用,在按鍵時只考慮了去抖,卻沒有考慮按鍵的延時,舉例來說,若按下“”鍵,鍵盤模塊會立即響應(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; /定義寄存器always (pose
59、dge 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 語言的強大不僅僅是制作一個
60、帶鍵盤的時鐘,當(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)越性,盡量使在滿足課題要求的前提下做到盡善盡美。這就要我們多思考多對比,多總結(jié)和參
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 什么的路上中考語文作文
- 統(tǒng)編版語文六年級下冊第9課《那個星期天》精美課件
- 什么的心初一語文作文
- 礦物涂料制備與性能評價考核試卷
- 電子商務(wù)的未來發(fā)展方向考核試卷
- 硅冶煉過程中的能源管理考核試卷
- 印刷業(yè)國際市場拓展策略與案例分析考核試卷
- 禮儀用品與文化傳承考核試卷
- 皮手套的彈性與舒適度改進考核試卷
- 海洋生物基因資源保護考核試卷
- 企業(yè)法律合規(guī)與風(fēng)險防范的案例分析
- 阿爾及利亞醫(yī)療器械法規(guī)要求綜述
- 劉姓氏的由來研究報告
- 高壓帶電顯示器說明書全解
- 企業(yè)網(wǎng)絡(luò)安全與數(shù)據(jù)保護策略
- 2023年小學(xué)世界知識產(chǎn)權(quán)日主題班會課件
- AOI檢查缺陷識別對照表
- 民營企業(yè)勞動關(guān)系調(diào)查報告
- 辦公電腦領(lǐng)用申請表
- 小班健康活動怎樣最涼爽
- 2024屆高考英語語法填空專項課件
評論
0/150
提交評論