標(biāo)題: 基于FPGA的萬年歷設(shè)計(jì)(quartus代碼+PCB文件+文檔) [打印本頁]
作者: zsa 時(shí)間: 2019-3-3 18:02
標(biāo)題: 基于FPGA的萬年歷設(shè)計(jì)(quartus代碼+PCB文件+文檔)
eda萬年歷,可以顯示年份,星期,時(shí)間,秒表計(jì)時(shí)等功能。文件夾包含論文,pcb板設(shè)計(jì),quartus程序。
全部資料51hei下載地址:
system_test.rar
(6.89 MB, 下載次數(shù): 133)
2019-3-3 18:00 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
formal_code.rar
(7.03 MB, 下載次數(shù): 90)
2019-3-3 18:00 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
FPGA萬年歷.docx
(1.7 MB, 下載次數(shù): 99)
2019-3-3 17:54 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
pcb.rar
(645.2 KB, 下載次數(shù): 58)
2019-3-3 17:54 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
基于FPGA的電子鐘設(shè)計(jì),主要完成的任務(wù)是使用Verilog語音,在Quartise2上完成電路的設(shè)計(jì),程序的開發(fā),基本功能是能夠顯示、修改年月日時(shí)分秒。電路的設(shè)計(jì)模塊分為幾個(gè)模塊:分頻、控制、時(shí)間顯示調(diào)整、時(shí)分、年月日、譯碼器。各個(gè)模塊完成不同的任務(wù),合在一起就構(gòu)成了電子鐘。至于程序編寫,使用Verilog語言,根據(jù)各個(gè)模塊的不同功能和它們之間的控制關(guān)系進(jìn)行編寫。軟件模塊直接在Quartis2上進(jìn)行。進(jìn)入信息時(shí)代,時(shí)間觀念越來越強(qiáng),但是老是的鐘表以及日歷等時(shí)間顯示工具已經(jīng)不太合適。如鐘表易壞,需經(jīng)常維修,日歷每天都需要翻頁等。對(duì)此,數(shù)字鐘表的設(shè)計(jì)就用了用武之地。 基于FPGA的電子鐘設(shè)計(jì),采用軟件開發(fā)模塊,開發(fā)成本底,而且功能設(shè)計(jì)上有很大的靈活度,需要在軟件上進(jìn)行簡(jiǎn)單的修該就能實(shí)現(xiàn)不同的功能要求,能夠滿足不同的環(huán)境要求。同時(shí),該設(shè)計(jì)在精度上遠(yuǎn)遠(yuǎn)超過鐘表,并且不需要維修,也不用每天的翻頁,極其的方便。且能夠添加各種不同的功能要求。例如:在其上加鬧鐘,同時(shí)顯示陰陽歷等。綜上所述本設(shè)計(jì)具有設(shè)計(jì)方便、功能多樣、電路簡(jiǎn)潔成本低廉等優(yōu)點(diǎn),符合社會(huì)發(fā)展的趨勢(shì),前景廣闊。
目錄
1 緒論 1
1.1電子鐘的發(fā)展 1
1.2 FPGA簡(jiǎn)介 1
1.3 VHDL語言簡(jiǎn)介 2
2 設(shè)計(jì)方案 3
2.1設(shè)計(jì)要求 3
2.2設(shè)計(jì)實(shí)現(xiàn)功能 3
2.3模塊設(shè)計(jì) 4
2.3.1計(jì)時(shí)模塊 4
2.3.2分計(jì)數(shù)器 6
2.3.3時(shí)計(jì)數(shù) 7
2.3.4設(shè)置時(shí)間模塊 7
2.3.5整點(diǎn)報(bào)時(shí)模塊 10
2.3.6顯示時(shí)間模塊 11
2.3.7控制數(shù)碼管 12
2.3.8數(shù)碼管顯示器 14
2.3.9分頻模塊 15
2.3.10鬧鐘模塊 17
3 系統(tǒng)設(shè)計(jì) 17
3.1 數(shù)字鐘系統(tǒng)模塊框圖 18
4 硬件設(shè)計(jì) 18
4.1 電源接口電路設(shè)計(jì) 18
4.2 電源系統(tǒng)設(shè)計(jì) 18
4.3 JTAG端口和FPGA配置電路設(shè)計(jì) 19
4.4 數(shù)碼管電源擴(kuò)展電路 19
4.5 數(shù)碼管電路 19
4.6 指示燈顯示電路 19
結(jié) 論 20
致 謝 21
參 考 文 獻(xiàn) 22
附錄.23
1 緒論
隨著EDA技術(shù)的發(fā)展和應(yīng)用領(lǐng)域的擴(kuò)大與深入,EDA技術(shù)在電子信息、通信、自動(dòng)控制及計(jì)算機(jī)應(yīng)用領(lǐng)域的重要性日益突出。EDA技術(shù)就是依賴功能強(qiáng)大的計(jì)算機(jī),在 EDA工具軟件平臺(tái)上,對(duì)以硬件描述語言VHDL為系統(tǒng)邏輯描述手段完成的設(shè)計(jì)文件,自動(dòng)地完成邏輯優(yōu)化和仿真測(cè)試,直至實(shí)現(xiàn)既定的電子線路系統(tǒng)功能。近十年來隨著超大規(guī)模集成電路和軟件技術(shù)的快速發(fā)展,使數(shù)字系統(tǒng)集成到一片集成電路內(nèi)成為可能,許多公司都推出了非常好的CPLD 和FPGA 產(chǎn)品,并為這些產(chǎn)品的設(shè)計(jì)配備了設(shè)計(jì)、下載軟件,這些軟件除了支持圖形方式設(shè)計(jì)數(shù)字系統(tǒng)外,還支持設(shè)計(jì)許多種數(shù)字系統(tǒng)的設(shè)計(jì)語言,使數(shù)字系統(tǒng)設(shè)計(jì)起來更加容易,可以說數(shù)字電子技術(shù)的設(shè)計(jì)進(jìn)入了一個(gè)新時(shí)代。在這樣一個(gè)大背景下,熟練掌握相關(guān)功能模塊的開發(fā)就成為設(shè)計(jì)者必備的一部分知識(shí)。
1.1電子鐘的發(fā)展
鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,而且大大地?cái)U(kuò)展了鐘表原先的報(bào)時(shí)功能,諸如定時(shí)自動(dòng)報(bào)警、按時(shí)自動(dòng)打鈴、時(shí)間程序自動(dòng)控制、定時(shí)廣播、定時(shí)啟閉路燈等。所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究電子萬年歷及擴(kuò)大其應(yīng)用,有非,F(xiàn)實(shí)的意義。數(shù)字鐘是一種用數(shù)字電路技術(shù)實(shí)現(xiàn)時(shí)、分、秒計(jì)時(shí)的裝置,與機(jī)械式時(shí)鐘相比具有更高的準(zhǔn)確性和直觀性,且無機(jī)械裝置,具有更長(zhǎng)的使用壽命,因此得到了廣泛的使用。電子萬年歷從原理上講是一種典型的數(shù)字電路,其中包括了組合邏輯電路和時(shí)序電路。 因此,我們此次設(shè)計(jì)與制作電子萬年歷就是為了了解數(shù)字鐘的原理,從而學(xué)會(huì)制作數(shù)字鐘。而且通過萬年歷的制作進(jìn)一步了解各種在制作中用到的中小規(guī)模集成電路的作用及使用方法,且由于電子萬年歷包括組合邏輯電路和時(shí)序電路,通過它可以進(jìn)一步學(xué)習(xí)與掌握各種組合邏輯電路與時(shí)序電路的原理與使用方法。
1.2 FPGA簡(jiǎn)介
FPGA是現(xiàn)場(chǎng)可編程門陣列(Field programmable gates array)的英文簡(jiǎn)稱。是有可編程邏輯模塊組成的數(shù)字集成電路(IC)。這些邏輯模塊之間用可配置的互聯(lián)資源。設(shè)計(jì)者可以對(duì)這些器件進(jìn)行編程來完成各種各樣的任務(wù)。
PLD/FPGA是近幾年集成電路中發(fā)展最快的產(chǎn)品。由于PLD性能的高速發(fā)展以及設(shè)計(jì)人員自身能力的提高,可編程邏輯器件供應(yīng)商將進(jìn)一步擴(kuò)大可編程芯片的領(lǐng)地,將復(fù)雜的專用芯片擠向高端和超復(fù)雜應(yīng)用。據(jù)IC Insights的數(shù)據(jù)顯示,PLD市場(chǎng)從1999年的29億美元增長(zhǎng)到去年的56億美元,幾乎翻了一番。Matas預(yù)計(jì)這種高速增長(zhǎng)局面以后很難出現(xiàn),但可編程邏輯器件依然是集成電路中最具活力和前途的產(chǎn)業(yè)。
復(fù)雜可編程邏輯器件。 可編程邏輯器件的兩種主要類型是現(xiàn)場(chǎng)可編程門陣列(FPGA)和復(fù)雜可編程邏輯(CPLD)。 在這兩類可編程邏輯器件中,F(xiàn)PGA提供了最高的邏輯密度、最豐富的特性和最高的性能。 現(xiàn)在最新的FPGA器件,如Xilinx Virtex"系列中的部分器件,可提供八百萬"系統(tǒng)門"(相對(duì)邏輯密度)。 這些先進(jìn)的器件還提供諸如內(nèi)建的硬連線處理器(如IBM Power PC)、大容量存儲(chǔ)器、時(shí)鐘管理系統(tǒng)等特性,并支持多種最新的超快速器件至器件(device-to-device)信號(hào)技術(shù)。 FPGA被應(yīng)用于范圍廣泛的應(yīng)用中,從數(shù)據(jù)處理和存儲(chǔ),以及到儀器儀表、電信和數(shù)字信號(hào)處理等。
1.3 VHDL語言簡(jiǎn)介
VHDL :vhsic(very high speed integrated circuit)hardware descriptiong language,也就是超高速集成電路硬件描述語言,vhdl語言是一種用于電路設(shè)計(jì)的高級(jí)語言。它在80年代的后期出現(xiàn)。最初是由美國(guó)國(guó)防部開發(fā)出來供美軍用來提高設(shè)計(jì)的可靠性和縮減開發(fā)周期的一種使用范圍較小的設(shè)計(jì)語言。但是,由于它在一定程度上滿足了當(dāng)時(shí)的設(shè)計(jì)需求,于是他在1987年成為ansi/ieee的標(biāo)準(zhǔn)(ieee std 1076-1987)。1993年更進(jìn)一步修訂,變得更加完備,成為ansi/ieee的ansi/ieee std 1076-1993標(biāo)準(zhǔn)。目前,大多數(shù)的cad廠商出品的eda軟件都兼容了這種標(biāo)準(zhǔn)。它的應(yīng)用主要是應(yīng)用在數(shù)字電路的設(shè)計(jì)中。目前,它在中國(guó)的應(yīng)用多數(shù)是fpga/cpld/epld的設(shè)計(jì)中。當(dāng)然在一些實(shí)力較為雄厚的單位,它也被用來設(shè)計(jì)asic。
VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu),行為,功能和接口。除了含有許多具有硬件特征的語句外,VHDL的語言形式、描述風(fēng)格以及語法是十分類似于一般的計(jì)算機(jī)高級(jí)語言。VHDL的程序結(jié)構(gòu)特點(diǎn)是將一項(xiàng)工程設(shè)計(jì),或稱設(shè)計(jì)實(shí)體(可以是一個(gè)元件,一個(gè)電路模塊或一個(gè)系統(tǒng))分成外部(或稱可視部分,及端口)和內(nèi)部(或稱不可視部分),既涉及實(shí)體的內(nèi)部功能和算法完成部分。在對(duì)一個(gè)設(shè)計(jì)實(shí)體定義了外部界面后,一旦其內(nèi)部開發(fā)完成后,其他的設(shè)計(jì)就可以直接調(diào)用這個(gè)實(shí)體。這種將設(shè)計(jì)實(shí)體分成內(nèi)外部分的概念是VHDL系統(tǒng)設(shè)計(jì)的基本點(diǎn)。與其他的硬件描述語言相比,VHDL具有更強(qiáng)的行為描述能力。從而決定了他成為系統(tǒng)設(shè)計(jì)領(lǐng)域最佳的硬件描述語言。強(qiáng)大的行為描述能力是避開具體的器件結(jié)構(gòu),從邏輯行為上描述和設(shè)計(jì)大規(guī)模電子系統(tǒng)的重要保證。
VHDL豐富的仿真語句和庫函數(shù),使得在任何大系統(tǒng)的設(shè)計(jì)早期就能查驗(yàn)設(shè)計(jì)系統(tǒng)的功能可行性,隨時(shí)可對(duì)設(shè)計(jì)進(jìn)行仿真模擬。VHDL語句的行為描述能力和程序結(jié)構(gòu)決定了他具有支持大規(guī)模設(shè)計(jì)的分解和已有設(shè)計(jì)的再利用功能。符合市場(chǎng)需求的大規(guī)模系統(tǒng)高效,高速的完成必須有多人甚至多個(gè)開發(fā)組共同并行工作才能實(shí)現(xiàn)。對(duì)于用VHDL完成的一個(gè)確定的設(shè)計(jì),可以利用EDA工具進(jìn)行邏輯綜合和優(yōu)化,并自動(dòng)的把VHDL描述設(shè)計(jì)轉(zhuǎn)變成門級(jí)網(wǎng)表。VHDL對(duì)設(shè)計(jì)的描述具有相對(duì)獨(dú)立性,設(shè)計(jì)者可以不懂硬件的結(jié)構(gòu),也不必管理最終設(shè)計(jì)實(shí)現(xiàn)的目標(biāo)器件是什么,而進(jìn)行獨(dú)立的設(shè)計(jì)。
2 設(shè)計(jì)方案2.1設(shè)計(jì)要求- 進(jìn)行正常的時(shí)、分、秒計(jì)時(shí)功能,二十四小時(shí)制計(jì)時(shí)
2.2設(shè)計(jì)實(shí)現(xiàn)功能該數(shù)字電子鐘能夠?qū)崿F(xiàn)時(shí)、分、秒計(jì)時(shí)功能;校準(zhǔn)時(shí)和分的功能;校準(zhǔn)時(shí)間時(shí)秒清零的功能;整點(diǎn)報(bào)時(shí)的功能;
2.3模塊設(shè)計(jì)

圖1.模塊總設(shè)計(jì)圖
2.3.1計(jì)時(shí)模塊
秒計(jì)數(shù)是由一個(gè)六十進(jìn)制的計(jì)數(shù)器構(gòu)成,生成元器件如下

圖2
Clk:驅(qū)動(dòng)秒計(jì)時(shí)器的時(shí)鐘信號(hào)Clr:校準(zhǔn)時(shí)間時(shí)清零的輸入端En:使能端Sec0[3..0] sec1[3..0]:秒的高位顯示,低位顯示Co:進(jìn)位輸出端,作為分的clk輸入
仿真圖如下:

圖3

圖4
2.3.2分計(jì)數(shù)器分計(jì)數(shù)器是由六十進(jìn)制的計(jì)數(shù)器構(gòu)成,生成元器件如下
圖5
Clk:設(shè)置分輸入和秒進(jìn)位的或輸入 En:使能輸入 Min1[3..0] min0[3..0]:分的高位顯示,低位顯示 Co:向時(shí)的進(jìn)位輸出仿真圖如下:


圖6
2.3.3時(shí)計(jì)數(shù) 時(shí)計(jì)數(shù)器是由二十四進(jìn)制的計(jì)數(shù)器構(gòu)成,生成元器件如下

圖7
Clk:設(shè)置時(shí)間輸入和分進(jìn)位輸入的或en:使能端h1[3..0] h0[3..0]:時(shí)的高位顯示和低位顯示仿真圖如下:

圖8
2.3.4設(shè)置時(shí)間模塊 按鍵去抖動(dòng),生成元器件如下

圖9
Clk:256hz頻率輸入Reset:接GNDDin:接按鍵Dout:輸出傳給按鍵選擇器仿真圖如下:

圖10
按鍵選擇器,生成元器件如下

圖11
Clk:16hz輸入Key1:按鍵調(diào)分的輸入Key2:按鍵調(diào)時(shí)的輸入Key3:按鍵秒清零的輸入Led1:輸出信號(hào)給分元器件Led2:輸出信號(hào)給時(shí)元器件Led3:輸出清零信號(hào)給秒元器件仿真圖如下:

圖12
2.3.5整點(diǎn)報(bào)時(shí)模塊

圖13
Clk1:接512hzClk2 clk:En:使能輸入M1[3..0] m0[3..0]:接分的高位輸出和低位輸出S1[3..0] s0[3..0]:接秒的高位輸出和低位輸出Speaker:連接蜂鳴器仿真圖如下:

圖14
2.3.6顯示時(shí)間模塊 模八的器件控制八個(gè)數(shù)碼管顯示的循環(huán),生成元器件如下
圖15
Clk:輸入
Clr:接GND
En:使能端
Y[2..0]:輸出接數(shù)碼管三個(gè)接受端
仿真圖如下:

圖16
2.3.7控制數(shù)碼管八選一的器件控制數(shù)碼管的亮或不亮,生成元器件如下

圖17
Sel【2..0】:連接模八器件M7[3..0] m6[3..0]:連接秒的高位和低位輸出M5[3..0]:接vcc(顯示橫)M4[3..0] m3[3..0]:接分的高位和低位輸出M2[3..0]:接vcc(顯示橫)M1[3..0] m0[3..0]:連接時(shí)的高位低位輸出Y[3..0]:輸出給數(shù)碼管顯示
仿真圖如下:

圖18
2.3.8數(shù)碼管顯示器 數(shù)碼管顯示器件,生成元器件如下

圖19
Num[3..0]:接收八選一的輸出信號(hào)Y[6..0]:驅(qū)動(dòng)數(shù)碼管顯示
仿真圖如下:

圖20
2.3.9分頻模塊 分頻器生成的元器件如下:

圖21
Clk:時(shí)鐘輸入
Clk512:512hz給響鈴模塊
Clk1:1hz輸出給秒計(jì)數(shù)器
Clk16:16hz輸出給按鍵選擇器
Clk256:256hz輸出給按鍵抖動(dòng)
仿真圖如下:

圖22
2.3.10鬧鐘模塊 比較器,比較當(dāng)時(shí)顯示時(shí)間與設(shè)置的鬧鐘時(shí)間是否相等,如相等,輸出信號(hào)給蜂鳴器。生成元器件如下:
圖23
Clk clk1:使能輸入
H0[3..0] h1[3..0]:鬧鐘設(shè)置時(shí)間的分輸入
H3[3..0] h2[3..0]:鬧鐘設(shè)置時(shí)間的時(shí)輸入
S0[3..0] s1[3..0]:現(xiàn)在時(shí)間的分的輸入
S2[3..0] s3[3..0]:現(xiàn)在時(shí)間的時(shí)的輸入
Y:輸出信號(hào)給蜂鳴器3 系統(tǒng)設(shè)計(jì)
完成了數(shù)字鐘各個(gè)模塊的仿真驗(yàn)證工作后,接下來把模塊有機(jī)地結(jié)合起來就構(gòu)成了一個(gè)完整的數(shù)字鐘。這里要完成的工作即是編寫數(shù)字鐘的頂層設(shè)計(jì)代碼,將各個(gè)模塊連接起來。
3.1 數(shù)字鐘系統(tǒng)模塊框圖
用quartuse ii 對(duì)系統(tǒng)工程進(jìn)行綜合以后,點(diǎn)擊RTL_VIWER系統(tǒng)可以自動(dòng)生成設(shè)計(jì)的系統(tǒng)原理圖(RTL視圖)。

圖3
4 硬件設(shè)計(jì)
前面我們的硬件描述語言已經(jīng)把整個(gè)設(shè)計(jì)的做完,功能仿真也進(jìn)行完畢了。但是我們的硬件設(shè)計(jì)的核心器件還沒有定下來。采用器件(EP4CE6E22C8)對(duì)工程進(jìn)行綜合編譯,可以看到資源占用報(bào)告。
4.1 電源接口電路設(shè)計(jì)
電源接口電路采用了兩種供電的方式,滿足不同的情況下使用。(1)Micro Usb供電,取電方便,用智能手機(jī)的充電線或者充電寶均可取電;(2)排針供電,但是必須要實(shí)驗(yàn)室直流電源通過排線接入5V電源。
電路中使用D1用來防反接,防止電源接反;R1使用的是自恢復(fù)保險(xiǎn)絲,當(dāng)后面電路意外短路的時(shí),電阻急劇增大,形成高阻狀態(tài),防止燒壞后面電路的器件,當(dāng)短路情況消失后,電阻減少,形成低阻狀態(tài),從而不需要人工干預(yù),有效地保護(hù)電路LED作為一個(gè)電源指示燈,當(dāng)電源接好并且K1開關(guān)打開時(shí)電源指示燈常亮。
4.2 電源系統(tǒng)設(shè)計(jì)
FPGA芯片需要用到3種電源供電,所以電路中設(shè)計(jì)3種電源轉(zhuǎn)換電路
(1)5V電源轉(zhuǎn)33V,E5、E6用來濾波儲(chǔ)能,C3、C6用來濾出高頻電源噪聲
(2)5V電源轉(zhuǎn)2.5V,外部加的濾波電容功能同上。
(3)3V電源轉(zhuǎn)1.2V,外部的電容功能同上。
4.3 JTAG端口和FPGA配置電路設(shè)計(jì)
程序的下載,采用通用的JTAG方式下載程序,由于FPGA掉電易失,所以需要掛一個(gè)存儲(chǔ)器。電路中用的是EPCS16S18N,設(shè)計(jì)PCB板的時(shí)候需要注意的地方,就是有些管腳需要上拉電阻。
4.4 數(shù)碼管電源擴(kuò)展電路
此次設(shè)計(jì)的數(shù)碼管電路采用動(dòng)態(tài)掃描的方式來顯示。由于電路中有8個(gè)數(shù)碼管,如果不采用動(dòng)態(tài)掃描電路,那么將會(huì)用到60多個(gè)I/O口,不利用PCB布線且也浪費(fèi)了FPGA芯片的I/O口。由于閃爍的頻率在大于40HZ后,人眼就無法識(shí)別閃爍了,這樣,在程序中設(shè)置每個(gè)數(shù)碼管的點(diǎn)亮?xí)r間大于40HZ就會(huì)實(shí)現(xiàn)眼睛被欺騙的結(jié)果,數(shù)碼管常亮。在使用數(shù)碼管動(dòng)態(tài)掃描電路的時(shí)候,一定要注意驅(qū)動(dòng)電流的選擇,如果不增加電流擴(kuò)展電路,那么最終的結(jié)果就是數(shù)碼管的顯示很暗又或者顯示不穩(wěn)定,電路中每個(gè)公共信號(hào)都采用一個(gè)NPN三極管來擴(kuò)展電流,增加驅(qū)動(dòng)能力。
4.5 數(shù)碼管電路
電路里面的使用了8個(gè)上圖所示的數(shù)碼管,采用共陰極的接法,程序中按照8個(gè)數(shù)碼管從高到低位分時(shí)選擇seg_en_x的管腳,點(diǎn)亮選擇的數(shù)碼管,由于分時(shí)選擇的速度很快,遠(yuǎn)遠(yuǎn)大于人眼能夠識(shí)別的頻率,從而看上去數(shù)碼管都是亮的。
4.6 指示燈顯示電路
電路設(shè)計(jì)上留了4個(gè)不同顏色的燈,均通過FPGA芯片的IO口直接供電,高電平,點(diǎn)亮對(duì)應(yīng)的燈,這4種燈具有以下的功能:LED3(鬧鐘設(shè)置模式指示燈)、LED4(日期設(shè)置模式指示燈)、LED5(時(shí)間調(diào)整模式指示燈)、LED6(正常顯示模式下指示燈)。
結(jié) 論
通過這次課設(shè)實(shí)訓(xùn),在硬件方面,使我們對(duì)EDA試驗(yàn)箱有了很多的了解,彌補(bǔ)了我們的知識(shí)的缺陷,同時(shí)對(duì)EDA試驗(yàn)箱內(nèi)部的工作原理,以及EDA試驗(yàn)箱各個(gè)實(shí)驗(yàn)?zāi)J降墓δ芎茏饔糜辛艘欢ǖ牧私,學(xué)習(xí)了硬件引腳綁定過程,以及綁定的一些基本常識(shí),并動(dòng)手完成了綁定,這樣不僅拓寬我們的知識(shí)面,增強(qiáng)動(dòng)手能力和實(shí)踐能力,同時(shí)還培養(yǎng)我們的分析和解決實(shí)際問題的能力。
在軟件方面,我們通過分組在軟件Max+plus2上獨(dú)立完成老師給我們的實(shí)訓(xùn)題目——電子鐘。從開始分析點(diǎn)鐘原理,在定義底層文件名稱,編寫底層文件程序,然后鏈接各個(gè)模塊,到最終完成測(cè)試,并運(yùn)行成功,這些加強(qiáng)了我們的分析問題的能力,提高了我們編程的能力,同時(shí)還培養(yǎng)了我們獨(dú)立完成任務(wù)和查閱資料刪選資料的能力,雖然完成的軟件在實(shí)際運(yùn)用中還有很多不足,比如軟件運(yùn)行的環(huán)境有限,程序的效率不高,在老師的要求上也不能全部到達(dá)預(yù)期的最好效果,等等一些問題,這都需要我們以后更深層次的加以修改,使其更加簡(jiǎn)單更加方便更加通俗易懂。
電子日歷一路編來可謂是坎坎坷坷,但大家都沒有放棄,積極主動(dòng)的找老師、找同學(xué)幫忙解決難題。后來,又重新分析原理,重復(fù)操作,遇到困難馬上向老師提問,及時(shí)解決問題,這樣的效果很明顯。
在這次實(shí)訓(xùn)中,我深深的感受到上課聽講的重要性,課設(shè)中遇到的很多問題都是老師上課講解的一些難點(diǎn),自己沒有很好的領(lǐng)悟的地方。每個(gè)學(xué)生對(duì)老師課堂上講的內(nèi)容的接收都是不一樣的,通過向老師請(qǐng)教,同學(xué)討論,最后才得以解決問題,實(shí)訓(xùn)才能得以成功。
從整體看這次實(shí)訓(xùn)是很成功的,讓我們都有很大的收獲,同時(shí)也非常感謝在實(shí)訓(xùn)過程中給予我們很大幫助的老師,在老師耐心細(xì)心的指導(dǎo)下,我才能很好的完成實(shí)訓(xùn)認(rèn)務(wù)。
附錄
PCB圖
原理圖
- 代碼
- /*=====================================================
- *****************************************************
- design name :wipe_key_shake
- use :按鍵消抖模塊
- engineer :
- version :V0.1
- change note :
- V0.1 首次建立 :
- ****************************************************
-
- *****************************************************
- 功能說明:
-
- *****************************************************
-
- *****************************************************
- 端口信號(hào)說明:
- in clk :50M時(shí)鐘輸入
- in rst_n :復(fù)位信號(hào)輸入
-
- in mode_key :模式按鍵輸入
- in move_key :移位按鍵輸入
- in add_key :數(shù)值加鍵輸入
- in switch_key :顯示選擇按鍵輸入
-
- out speaker :喇叭端口
-
- out seg_en :數(shù)碼管使能端
- out seg_data :數(shù)碼管數(shù)據(jù)端
- *****************************************************
- ========================================================*/
-
- module clock
- (
- input clk ,
- input rst_n ,
-
-
- input mode_key ,
- input move_key ,
- input add_key ,
- input switch_key ,
-
- output speaker ,
-
- output [7:0] seg_en ,
- output [6:0] seg_data //從高到低位abcdefg
- );
-
-
- //========================================================
- //*****************按鍵模塊定義***************************
- wire filter_mode_key;
- wire filter_move_key;
- wire filter_add_key;
- wire filter_switch_key;
- //========================================================
-
-
- //========================================================
- //*****************模式設(shè)置模塊定義***********************
- wire [1:0] mode;
- //========================================================
-
- //========================================================
- //*****************位置調(diào)整模塊定義***********************
- wire [2:0] move_site;
- //========================================================
-
- //========================================================
- //*****************時(shí)鐘運(yùn)行模塊定義***********************
- wire [3:0] second_u;
- wire [3:0] second_d;
- wire [3:0] minute_u;
- wire [3:0] minute_d;
-
- wire [3:0] hour_u;
- wire [3:0] hour_d;
-
- wire [3:0] date_u;
- wire [3:0] date_d;
- wire [3:0] month_u;
- wire [3:0] month_d;
- wire [3:0] year_u;
- wire [3:0] year_d;
- wire [3:0] year_h;
- wire [3:0] year_k;
- //========================================================
-
-
- //========================================================
- //*****************時(shí)間調(diào)整模塊定義***********************
- wire [3:0] adjust_second_u;
- wire [3:0] adjust_second_d;
- wire [3:0] adjust_minute_u;
- wire [3:0] adjust_minute_d;
- wire [3:0] adjust_hour_u;
- wire [3:0] adjust_hour_d;
-
- wire [3:0] adjust_date_u;
- wire [3:0] adjust_date_d;
- wire [3:0] adjust_month_u;
- wire [3:0] adjust_month_d;
- wire [3:0] adjust_year_u;
- wire [3:0] adjust_year_d;
- wire [3:0] adjust_year_h;
- wire [3:0] adjust_year_k;
- //========================================================
-
- //========================================================
- //*****************鬧鐘調(diào)整模塊定義***********************
- wire [3:0] alarm_second_u;
- wire [3:0] alarm_second_d;
- wire [3:0] alarm_minute_u;
-
- wire [3:0] alarm_minute_d;
- wire [3:0] alarm_hour_u;
- wire [3:0] alarm_hour_d;
- //========================================================
-
- //========================================================
- //*****************鬧鐘判斷模塊定義***********************
- //無
- //========================================================
-
- //========================================================
- //*****************閏年判斷模塊定義**********************
- wire leap_year_en;
- //========================================================
-
- //========================================================
- //*****************數(shù)碼管數(shù)值選擇模塊定義*****************
- wire [3:0] num8;
- wire [3:0] num7;
- wire [3:0] num6;
- wire [3:0] num5;
- wire [3:0] num4;
- wire [3:0] num3;
- wire [3:0] num2;
- wire [3:0] num1;
- //========================================================
-
- //========================================================
- //*****************數(shù)碼管譯碼與動(dòng)態(tài)掃描模塊定義***********
- //無
- //========================================================
-
-
-
- //========================================================
- //*****************按鍵模塊例化***************************
- key_module U1
- (
-
- .clk (clk ),
- .rst_n (rst_n ),
-
- .mode_key (mode_key ),
- .move_key (move_key ),
- .add_key (add_key ),
- .switch_key (switch_key ),
-
- .filter_mode_key (filter_mode_key ),
- .filter_move_key (filter_move_key ),
- .filter_add_key (filter_add_key ),
- .filter_switch_key (filter_switch_key)
- );
- //========================================================
-
-
- //========================================================
- //*****************模式設(shè)置模塊例化***********************
- mode_module U2
- (
- .clk (clk ),
- .rst_n (rst_n ),
-
- .mode_key (filter_mode_key),
- .mode (mode )
- );
- //========================================================
-
-
- //========================================================
- //*****************位置調(diào)整模塊例化***********************
- move_site_module U3
- (
- .clk (clk ),
- .rst_n (rst_n ),
-
- .mode (mode ),
- .move_key (filter_move_key),
-
-
- .move_site (move_site )
- );
-
- //========================================================
-
-
- //========================================================
- //*****************時(shí)鐘運(yùn)行模塊例化***********************
- clock_run U4
- (
- .clk (clk ),
- .rst_n (rst_n ),
-
- .mode (mode ),
- .leap_year_en (leap_year_en ),
-
- .adjust_second_u (adjust_second_u),
- .adjust_second_d (adjust_second_d),
- .adjust_minute_u (adjust_minute_u),
- .adjust_minute_d (adjust_minute_d),
- .adjust_hour_u (adjust_hour_u ),
- .adjust_hour_d (adjust_hour_d ),
-
- .adjust_date_u (adjust_date_u ),
- .adjust_date_d (adjust_date_d ),
- .adjust_month_u (adjust_month_u ),
- .adjust_month_d (adjust_month_d ),
- .adjust_year_u (adjust_year_u ),
- .adjust_year_d (adjust_year_d ),
- .adjust_year_h (adjust_year_h ),
- .adjust_year_k (adjust_year_k ),
-
- .second_u (second_u ),
- .second_d (second_d ),
- .minute_u (minute_u ),
- .minute_d (minute_d ),
- .hour_u (hour_u ),
-
- .hour_d (hour_d ),
-
- .date_u (date_u ),
- .date_d (date_d ),
- .month_u (month_u ),
- .month_d (month_d ),
- .year_u (year_u ),
- .year_d (year_d ),
- .year_h (year_h ),
- .year_k (year_k )
- );
- //========================================================
-
-
- //========================================================
- //*****************時(shí)間調(diào)整模塊例化***********************
- clock_adjust U5
- (
- .clk (clk ),
- .rst_n (rst_n ),
-
- .mode (mode ),
- .move_site (move_site ),
- .leap_year_en (leap_year_en ),
- .add_key (filter_add_key ),
-
- .second_u (second_u ),
- .second_d (second_d ),
- .minute_u (minute_u ),
- .minute_d (minute_d ),
- .hour_u (hour_u ),
- .hour_d (hour_d ),
-
- .date_u (date_u ),
- .date_d (date_d ),
- .month_u (month_u ),
- .month_d (month_d ),
- .year_u (year_u ),
-
- .year_d (year_d ),
- .year_h (year_h ),
- .year_k (year_k ),
-
- .adjust_second_u (adjust_second_u ),
- .adjust_second_d (adjust_second_d ),
- .adjust_minute_u (adjust_minute_u ),
- .adjust_minute_d (adjust_minute_d ),
- .adjust_hour_u (adjust_hour_u ),
- .adjust_hour_d (adjust_hour_d ),
-
- .adjust_date_u (adjust_date_u ),
- .adjust_date_d (adjust_date_d ),
- .adjust_month_u (adjust_month_u ),
- .adjust_month_d (adjust_month_d ),
- .adjust_year_u (adjust_year_u ),
- .adjust_year_d (adjust_year_d ),
- .adjust_year_h (adjust_year_h ),
- .adjust_year_k (adjust_year_k )
- );
-
- //========================================================
-
-
- //========================================================
- //*****************鬧鐘調(diào)整模塊例化***********************
- alarm_clock_adjust U6
- (
- .clk (clk ),
- .rst_n (rst_n ),
-
- .mode (mode ),
- .move_site (move_site ),
-
- .add_key (filter_add_key),
-
- .alarm_second_u (alarm_second_u),
- .alarm_second_d (alarm_second_d),
-
- .alarm_minute_u (alarm_minute_u),
- .alarm_minute_d (alarm_minute_d),
- .alarm_hour_u (alarm_hour_u ),
- .alarm_hour_d (alarm_hour_d )
- );
- //========================================================
-
-
- //========================================================
- //*****************鬧鐘判斷模塊定義例化*******************
- alarm_judge U7
- (
- .clk (clk ),
- .rst_n (rst_n ),
-
- .second_u (second_u ),
- .second_d (second_d ),
- .minute_u (minute_u ),
- .minute_d (minute_d ),
- .hour_u (hour_u ),
- .hour_d (hour_d ),
-
- .alarm_second_u (alarm_second_u ),
- .alarm_second_d (alarm_second_d ),
- .alarm_minute_u (alarm_minute_u ),
- .alarm_minute_d (alarm_minute_d ),
- .alarm_hour_u (alarm_hour_u ),
- .alarm_hour_d (alarm_hour_d ),
-
- .speaker (speaker )
-
- );
- //========================================================
-
-
- //========================================================
- //*****************閏年判斷模塊塊例化*********************
-
-
- leap_year_judge U8
- (
- .clk (clk ),
- .rst_n (rst_n ),
-
- .mode (mode ),
-
- .year_u (year_u ),
- .year_d (year_d ),
- .year_h (year_h ),
- .year_k (year_k ),
-
- .adjust_year_u (adjust_year_u),
- .adjust_year_d (adjust_year_d),
- .adjust_year_h (adjust_year_h),
- .adjust_year_k (adjust_year_k),
-
- .leap_year_en (leap_year_en )
- );
-
- //========================================================
-
-
- //========================================================
- //*****************數(shù)碼管數(shù)值選擇模塊例化*****************
- tube_num_select U9
- (
- .clk (clk ),
- .rst_n (rst_n ),
-
- .switch_key (filter_switch_key),
-
-
- .mode (mode ),
- .move_site (move_site ),
-
- .second_u (second_u ),
- .second_d (second_d ),
-
- .minute_u (minute_u ),
- .minute_d (minute_d ),
- .hour_u (hour_u ),
- .hour_d (hour_d ),
-
- .date_u (date_u ),
- .date_d (date_d ),
- .month_u (month_u ),
- .month_d (month_d ),
- .year_u (year_u ),
- .year_d (year_d ),
- .year_h (year_h ),
- .year_k (year_k ),
-
- .adjust_second_u (adjust_second_u ),
- .adjust_second_d (adjust_second_d ),
- .adjust_minute_u (adjust_minute_u ),
- .adjust_minute_d (adjust_minute_d ),
- .adjust_hour_u (adjust_hour_u ),
- .adjust_hour_d (adjust_hour_d ),
-
- .adjust_date_u (adjust_date_u ),
- .adjust_date_d (adjust_date_d ),
- .adjust_month_u (adjust_month_u ),
- .adjust_month_d (adjust_month_d ),
- .adjust_year_u (adjust_year_u ),
- .adjust_year_d (adjust_year_d ),
- .adjust_year_h (adjust_year_h ),
- .adjust_year_k (adjust_year_k ),
-
- .alarm_second_u (alarm_second_u ),
- .alarm_second_d (alarm_second_d ),
- .alarm_minute_u (alarm_minute_u ),
- .alarm_minute_d (alarm_minute_d ),
- .alarm_hour_u (alarm_hour_u ),
- .alarm_hour_d (alarm_hour_d ),
-
- .num8 (num8 ),
-
- .num7 (num7 ),
- .num6 (num6 ),
- .num5 (num5 ),
- .num4 (num4 ),
- .num3 (num3 ),
- .num2 (num2 ),
- .num1 (num1 )
- );
-
- //========================================================
-
- //========================================================
- //*****************數(shù)碼管譯碼與動(dòng)態(tài)掃描模塊例化***********
- nixie_tube U10
-
- (
- .clk (clk ),
- .rst_n (rst_n ),
-
- .num8 (num8 ),
- .num7 (num7 ),
- .num6 (num6 ),
- .num5 (num5 ),
- .num4 (num4 ),
- .num3 (num3 ),
- .num2 (num2 ),
- .num1 (num1 ),
- .seg_en (seg_en ),
- .seg_data (seg_data) //從高到低位abcdefg
-
- );
- //========================================================
-
-
- endmodule
復(fù)制代碼
作者: admin 時(shí)間: 2019-3-6 02:45
好資料,51黑有你更精彩!!!
作者: admin 時(shí)間: 2019-3-6 02:45
好資料,51黑有你更精彩!!!
作者: 瞿管 時(shí)間: 2019-6-18 22:33
程序在quartus ||里面運(yùn)行錯(cuò)誤誒
作者: cai10650 時(shí)間: 2021-4-7 14:21
好資料,51黑有你更精彩!!!
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |