久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5939|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

FPGA課程設(shè)計(jì)多功能數(shù)字鐘

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:361200 發(fā)表于 2018-6-28 17:16 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

多功能數(shù)字鐘

說(shuō)  明

  • 論文書(shū)寫(xiě)要求與說(shuō)明
  • 嚴(yán)格按照模板進(jìn)行書(shū)寫(xiě)。自己可以自行修改標(biāo)題的題目
  • 關(guān)于字體:
    • 題目:三號(hào)黑體加粗。
    • 正文:小四號(hào)宋體,行距為1.25倍。
  • 嚴(yán)禁抄襲和雷同,一經(jīng)發(fā)現(xiàn),成績(jī)即判定為不及格!!!
  • 設(shè)計(jì)提交說(shuō)明
  • 設(shè)計(jì)需要提交“電子稿”和“打印稿”;
  • “打印稿”包括封面、說(shuō)明(即本頁(yè)內(nèi)容)、設(shè)計(jì)內(nèi)容三部分;訂書(shū)機(jī)左邊裝訂。
  • “電子稿”上交:文件名為 FPGA課程設(shè)計(jì)報(bào)告-班級(jí)-學(xué)號(hào)-姓名.doc,所有報(bào)告發(fā)送給班長(zhǎng),由班長(zhǎng)統(tǒng)一打包后統(tǒng)一發(fā)送到付小倩老師。
  • “打印稿”由班長(zhǎng)收齊后交到:12教305辦公室;


第一章  緒論

關(guān)鍵詞:FPGA,數(shù)字鐘

第二章 FPGA的相關(guān)介紹

2.1  FPGA概述

2.2 FPGA特點(diǎn)

2.3 FPGA設(shè)計(jì)注意

第三章 Quartus II與Verilog HDL相關(guān)介紹

3.1 Quartus II

3.2  Verilog HDL

第四章 設(shè)計(jì)方案

4.1數(shù)字鐘的工作原理

4.2 按鍵消抖

4.3時(shí)鐘復(fù)位

4.4時(shí)鐘校時(shí)

4.5數(shù)碼管顯示模塊。

第五章 方案實(shí)現(xiàn)與驗(yàn)證

5.1產(chǎn)生秒脈沖

5.2秒個(gè)位進(jìn)位

5.3按鍵消抖

5.4復(fù)位按鍵設(shè)置

5.5 數(shù)碼管顯示。

5.6 RTL結(jié)構(gòu)總圖

第六章 實(shí)驗(yàn)總結(jié)

第七章 Verilog HDL源代碼附錄


第一章  緒論

現(xiàn)代社會(huì)的標(biāo)志之一就是信息產(chǎn)品的廣泛使用,而且是產(chǎn)品的性能越來(lái)越強(qiáng),復(fù)雜程度越來(lái)越高,更新步伐越來(lái)越快。支撐信息電子產(chǎn)品高速發(fā)展的基礎(chǔ)就是微電子制造工藝水平的提高和電子產(chǎn)品設(shè)計(jì)開(kāi)發(fā)技術(shù)的發(fā)展。前者以微細(xì)加工技術(shù)為代表,而后者的代表就是電子設(shè)計(jì)自動(dòng)化(electronic design automatic, EDA)技術(shù)。

本設(shè)計(jì)采用的VHDL是一種全方位的硬件描述語(yǔ)言,具有極強(qiáng)的描述能力,能支持系統(tǒng)行為級(jí)、寄存器傳輸級(jí)和邏輯門(mén)級(jí)這三個(gè)不同層次的設(shè)計(jì);支持結(jié)構(gòu)、數(shù)據(jù)流、行為三種描述形式的混合描述,覆蓋面廣,抽象能力強(qiáng),因此在實(shí)際應(yīng)用中越來(lái)越廣泛。ASIC是專(zhuān)用的系統(tǒng)集成電路,是一種帶有邏輯處理的加速處理器;而FPGA是特殊的ASIC芯片,與其它的ASIC芯片相比,它具有設(shè)計(jì)開(kāi)發(fā)周期短、設(shè)計(jì)制造成本低、開(kāi)發(fā)工具先進(jìn)、標(biāo)準(zhǔn)產(chǎn)品無(wú)需測(cè)試、質(zhì)量穩(wěn)定以及可實(shí)時(shí)在線(xiàn)檢測(cè)等優(yōu)點(diǎn)。

在控制系統(tǒng)中,鍵盤(pán)是常用的人機(jī)交換接口,當(dāng)所設(shè)置的功能鍵或數(shù)字鍵按下的時(shí)候,系統(tǒng)應(yīng)該完成該鍵所對(duì)應(yīng)的功能。因此,按鍵信息輸入是與軟件結(jié)構(gòu)密切相關(guān)的過(guò)程。根據(jù)鍵盤(pán)結(jié)構(gòu)的不同,采用不同的編碼方法,但無(wú)論有無(wú)編碼以及采用什么樣的編碼,最后都要轉(zhuǎn)換成為相應(yīng)的鍵值,以實(shí)現(xiàn)按鍵功能程序的轉(zhuǎn)移。[1]

鐘表的數(shù)字化給人們生產(chǎn)生活帶來(lái)了極大的方便,而且大大地?cái)U(kuò)展了鐘表原先的報(bào)時(shí)功能。諸如定時(shí)自動(dòng)報(bào)警、定時(shí)啟閉電路、定時(shí)開(kāi)關(guān)烘箱、通斷動(dòng)力設(shè)備,甚至各種定時(shí)電氣的自動(dòng)啟用等,所有這些都是以鐘表數(shù)字化為基礎(chǔ)的。因此研究數(shù)字鐘以及擴(kuò)大其應(yīng)用有著非常現(xiàn)實(shí)的意義。


第二章 FPGA的相關(guān)介紹
FPGA(Field-Programmable Gate Array),即現(xiàn)場(chǎng)可編程門(mén)陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專(zhuān)用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門(mén)電路數(shù)有限的缺點(diǎn)。
2.1  FPGA概述

系統(tǒng)設(shè)計(jì)師可以根據(jù)需要通過(guò)可編輯的連接把FPGA內(nèi)部的邏輯塊連接起來(lái),就好像一個(gè)電路試驗(yàn)板被放在了一個(gè)芯片里。一個(gè)出廠后的成品FPGA的邏輯塊和連接可以按照設(shè)計(jì)者而改變,所以FPGA可以完成所需要的邏輯功能。

FPGA一般由3種可編程電路和一個(gè)用于存放編程數(shù)據(jù)的靜態(tài)存儲(chǔ)器SRAM組成。這3種可編程電路是:可編程邏輯模塊(CLB--Configurable Logic Block)、輸入/輸出模塊(IOB--I/O Block)和互連資源(IR—Interconnect Resource)。可編程邏輯模塊CLB是實(shí)現(xiàn)邏輯功能的基本單元,它們通常規(guī)則的排列成一個(gè)陣列,散布于整個(gè)芯片;可編程輸入/輸出模塊(IOB)主要完成芯片上的邏輯與外部封裝腳的接口,它通常排列在芯片的四周;可編程互連資源包括各種長(zhǎng)度的連接線(xiàn)段和一些可編程連接開(kāi)關(guān),它們將各個(gè)CLB之間或CLB、IOB之間以及IOB之間連接起來(lái),構(gòu)成特定功能的電路。

FPGA一般來(lái)說(shuō)比ASIC(專(zhuān)用集成芯片)的速度要慢,無(wú)法完成復(fù)雜的設(shè)計(jì),而且消耗更多的電能。但是他們也有很多的優(yōu)點(diǎn)比如可以快速成品,可以被修改來(lái)改正程序中的錯(cuò)誤和更便宜的造價(jià)。廠商也可能會(huì)提供便宜的但是編輯能力差的FPGA。因?yàn)檫@些芯片有比較差的可編輯能力,所以這些設(shè)計(jì)的開(kāi)發(fā)是在普通的FPGA上完成的,然后將設(shè)計(jì)轉(zhuǎn)移到一個(gè)類(lèi)似于ASIC的芯片上。另外一種方法是用CPLD(復(fù)雜可編程邏輯器件備)。


2.2 FPGA特點(diǎn)
FPGA的基本特點(diǎn)主要有:

1采用FPGA設(shè)計(jì)ASIC電路,用戶(hù)不需要投片生產(chǎn),就能得到合用的芯片。

2FPGA可做其它全定制或半定制ASIC電路的中試樣片。

3FPGA內(nèi)部有豐富的觸發(fā)器和I/O引腳。

4FPGA是ASIC電路中設(shè)計(jì)周期最短、開(kāi)發(fā)費(fèi)用最低、風(fēng)險(xiǎn)最小的器件之一。

5FPGA采用高速CHMOS工藝,功耗低,可以與CMOS、TTL電平兼容。

可以說(shuō),F(xiàn)PGA芯片是小批量系統(tǒng)提高系統(tǒng)集成度、可靠性的最佳選擇之一。
編程互連資源IR可以將FPGA內(nèi)部的CLB和CLB之間、CLB和IOB之間連接起來(lái),構(gòu)成各種具有復(fù)雜功能的系統(tǒng)。
FPGA是由存放在片內(nèi)RAM中的程序來(lái)設(shè)置其工作狀態(tài)的,因此,工作時(shí)需要對(duì)片內(nèi)的RAM進(jìn)行編程。用戶(hù)可以根據(jù)不同的配置模式,采用不同的編程方式。
加電時(shí),F(xiàn)PGA芯片將EPROM中數(shù)據(jù)讀入片內(nèi)編程RAM中,配置完成后,F(xiàn)PGA進(jìn)入工作狀態(tài)。掉電后,F(xiàn)PGA恢復(fù)成白片,內(nèi)部邏輯關(guān)系消失,因此,F(xiàn)PGA能夠反復(fù)使用。FPGA的編程無(wú)須專(zhuān)用的FPGA編程器,只須用通用的EPROM、PROM編程器即可。當(dāng)需要修改FPGA功能時(shí),只需換一片EPROM即可。這樣,同一片F(xiàn)PGA,不同的編程數(shù)據(jù),可以產(chǎn)生不同的電路功能。因此,F(xiàn)PGA的使用非常靈活。
FPGA有多種配置模式:并行主模式為一片F(xiàn)PGA加一片EPROM的方式;主從模式可以支持一片PROM編程多片F(xiàn)PGA;串行模式可以采用串行PROM編程FPGA;外設(shè)模式可以將FPGA作為微處理器的外設(shè),由微處理器對(duì)其編程。

2.3 FPGA設(shè)計(jì)注意
不管你是一名邏輯設(shè)計(jì)師、硬件工程師或系統(tǒng)工程師,甚或擁有所有這些頭銜,只要你在任何一種高速和多協(xié)議的復(fù)雜系統(tǒng)中使用了FPGA,你就很可能需要努力解決好器件配置、電源管理、IP集成、信號(hào)完整性和其他的一些關(guān)鍵設(shè)計(jì)問(wèn)題。不過(guò),你不必獨(dú)自面對(duì)這些挑戰(zhàn),因?yàn)樵诋?dāng)前業(yè)內(nèi)領(lǐng)先的FPGA公司里工作的應(yīng)用工程師每天都會(huì)面對(duì)這些問(wèn)題,而且他們已經(jīng)提出了一些將令你的設(shè)計(jì)工作變得更輕松的設(shè)計(jì)指導(dǎo)原則和解決方案。

本次實(shí)驗(yàn)所采用的FPGA器件是Altera Cyclone V 5CSEMA5F31C6N

FPGA實(shí)物圖


FPGA數(shù)碼管介紹,每節(jié)數(shù)碼管低電平點(diǎn)亮高電平熄滅。
LED序號(hào)如下圖所示:




根據(jù)上圖所示的順序,可以得出顯示的數(shù)組代碼。



4'd0: HEX0=7'b1000000;                            //0              低電平點(diǎn)亮高電平熄滅

4'd1: HEX0=7'b1111001;                            //1

4'd2: HEX0=7'b0100100;                            //2

4'd3: HEX0=7'b0110000;                            //3

4'd4: HEX0=7'b0011001;                            //4

4'd5: HEX0=7'b0010010;                            //5

4'd6: HEX0=7'b0000010;                            //6

4'd7: HEX0=7'b1111000;                            //7

4'd8: HEX0=7'b0000000;                            //8

4'd9: HEX0=7'b0010000;                            //9

default: HEX0=7'b1111111;              //不符合條件的顯示零





第三章 Quartus II與Verilog HDL相關(guān)介紹3.1 Quartus II

Quartus II 是Altera公司的綜合性PLD/FPGA開(kāi)發(fā)軟件,原理圖、VHDL、VerilogHDL以及AHDL(Altera Hardware 支持Description Language)等多種設(shè)計(jì)輸入形式,內(nèi)嵌自有的綜合器以及仿真器,可以完成從設(shè)計(jì)輸入到硬件配置的完整PLD設(shè)計(jì)流程。

Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模塊庫(kù),使用戶(hù)可以充分利用成熟的模塊,簡(jiǎn)化了設(shè)計(jì)的復(fù)雜性、加快了設(shè)計(jì)速度。對(duì)第三方EDA工具的良好支持也使用戶(hù)可以在設(shè)計(jì)流程的各個(gè)階段使用熟悉的第三方EDA工具。

Quartus II 軟件擁有友好的界面,使用便捷,功能強(qiáng)大,當(dāng)中可編程邏輯設(shè)計(jì)環(huán)境采用完成集成化,是先進(jìn)的EDA工具軟件。該軟件具備諸多特點(diǎn)(例如:開(kāi)放性,與結(jié)構(gòu)無(wú)聯(lián)系,多平臺(tái)設(shè)計(jì),完全集成化,設(shè)計(jì)庫(kù)豐富、工具模塊化等),支持原理圖、VHDL、VerilogHDL以及AHDL等多種設(shè)計(jì)輸入形式。Quartus II能夠在多系統(tǒng)上使用,為用戶(hù)的設(shè)計(jì)方式提供了完善的圖形界面。具有運(yùn)行速度快,界面統(tǒng)一,功能集中,學(xué)用簡(jiǎn)單等特點(diǎn)。



3.2  Verilog HDL

Verilog HDL是一種硬件描述語(yǔ)言(HDL:Hardware Description Language),以文本形式來(lái)描述數(shù)字系統(tǒng)硬件的結(jié)構(gòu)和行為的語(yǔ)言,用它可以表示邏輯電路圖、邏輯表達(dá)式,還可以表示數(shù)字邏輯系統(tǒng)所完成的邏輯功能。 Verilog HDL和VHDL是世界上最流行的兩種硬件描述語(yǔ)言,都是在20世紀(jì)80年代中期開(kāi)發(fā)出來(lái)的。前者由Gateway Design Automation公司(該公司于1989年被Cadence公司收購(gòu))開(kāi)發(fā)。兩種HDL均為IEEE標(biāo)準(zhǔn)。


第四章 設(shè)計(jì)方案4.1數(shù)字鐘的工作原理
振蕩器產(chǎn)生穩(wěn)定的高頻脈沖信號(hào),作為數(shù)字鐘的時(shí)間基準(zhǔn),然后經(jīng)過(guò)分頻器輸出標(biāo)準(zhǔn)秒脈沖。秒計(jì)數(shù)器滿(mǎn)60后向分計(jì)數(shù)器進(jìn)位,分計(jì)數(shù)器滿(mǎn)60后向小時(shí)計(jì)數(shù)器進(jìn)位,小時(shí)計(jì)數(shù)器按照“24翻0”規(guī)律計(jì)數(shù)。計(jì)數(shù)滿(mǎn)后各計(jì)數(shù)器清零,重新計(jì)數(shù)。計(jì)數(shù)器的輸出分別經(jīng)譯碼器送數(shù)碼管顯示。計(jì)時(shí)出現(xiàn)誤差時(shí),可以用校時(shí)電路校時(shí)、校分。控制信號(hào)由三個(gè)獨(dú)立按鍵輸入。輸入信號(hào)選擇FPGA器件上的50MHZ時(shí)鐘信號(hào)。
4.2 按鍵消抖
因?yàn)榘存I的物理結(jié)構(gòu)并非理想式開(kāi)關(guān),在按鍵按下后會(huì)在一個(gè)很短的時(shí)間內(nèi)出現(xiàn)電平抖動(dòng)的情況,因此需要對(duì)按鍵進(jìn)行消抖處理。這里的按鍵消抖與單片機(jī)中的按鍵消抖問(wèn)題有所不同,不能采用延時(shí)的方法進(jìn)行按鍵消抖,這里我選用對(duì)時(shí)鐘脈沖計(jì)數(shù)的方式來(lái)判斷按鍵是否按下。采用50MHZ時(shí)鐘信號(hào),實(shí)測(cè)160ms的消抖時(shí)長(zhǎng)較為合適,即8000000個(gè)時(shí)鐘上升沿。
4.3時(shí)鐘復(fù)位

按下復(fù)位按鍵后,所有位清零。


4.4時(shí)鐘校時(shí)

時(shí)鐘計(jì)時(shí)過(guò)程中,可對(duì)時(shí)鐘進(jìn)行校時(shí)。本次設(shè)計(jì)不考慮對(duì)秒位進(jìn)行校時(shí),分鐘的個(gè)位和小時(shí)的個(gè)位加到10時(shí)會(huì)自動(dòng)進(jìn)位,因此只對(duì)分鐘的個(gè)位和小時(shí)的個(gè)位設(shè)置可以加1的校時(shí)按鈕,即可實(shí)現(xiàn)校時(shí)功能。整體比較容易實(shí)現(xiàn)。


4.5數(shù)碼管顯示模塊。

選擇需要顯示的時(shí)鐘位數(shù)作為敏感詞,用上述給出的顯示代碼對(duì)時(shí)鐘的每一位分別進(jìn)行顯示處理。

第五章 方案實(shí)現(xiàn)與驗(yàn)證5.1產(chǎn)生秒脈沖

always@(posedge clk)                                                                      //敏感詞為50MHZ時(shí)鐘上升沿

。。。。。。

                                          count=count+1;                                                                     

                                          if(count==32'd50000000)                            //產(chǎn)生一個(gè)一秒的脈沖,

                                                        begin

                                                                      count=0;

                                                                      count_s0=count_s0+1;              //秒個(gè)位計(jì)數(shù)

                                                        end


如代碼展現(xiàn),當(dāng)計(jì)數(shù)器count記到50000000個(gè)時(shí)鐘上升沿的時(shí)候,向秒個(gè)位進(jìn)1.


5.2秒個(gè)位進(jìn)位

                                          if(count_s0==4'd10)

                                                        begin

                                                                      count_s0=0;            

                                                                      count_s1=count_s1+1;              //產(chǎn)生秒十位進(jìn)位

                                                        end


當(dāng)秒的個(gè)位計(jì)數(shù)到10的時(shí)候,向秒的十位進(jìn)位。


5.3按鍵消抖


                            if (!inrst_m0)

                                                        count0=count0+1;

                                                        if(count0==32'd8000000 && !inrst_m0)

                                                                      begin

                                                                      count0=0;

                                                                      count_m0=count_m0+1;

                                                                      end

對(duì)時(shí)鐘秒沖進(jìn)行計(jì)數(shù),計(jì)數(shù)達(dá)到8000000時(shí),判斷此時(shí)的電平是否為0,若還是為0,則判斷按鍵按下,執(zhí)行分鐘個(gè)位加1操作。


5.4復(fù)位按鍵設(shè)置

              begin

                            if (!reset)                                                                                                  //按鍵按下為邏輯0

                                          begin

                                          count=0;                                                                                                  //復(fù)位置零

                                          count_s0=0;count_s1=0;

                                          count_m0=0;count_m1=0;

                                          count_h0=0;count_h1=0;

                                          end

                            else


復(fù)位按鍵按下后所有位置零。


5.5 數(shù)碼管顯示。

always@(count_s0)                                                                                                  //秒個(gè)位顯示

              begin

                            case(count_s0)

                                          4'd0: HEX0=7'b1000000;                            //0              低電平點(diǎn)亮高電平熄滅

                                          4'd1: HEX0=7'b1111001;                            //1

                                          4'd2: HEX0=7'b0100100;                            //2

                                          4'd3: HEX0=7'b0110000;                            //3

                                          4'd4: HEX0=7'b0011001;                            //4

                                          4'd5: HEX0=7'b0010010;                            //5

                                          4'd6: HEX0=7'b0000010;                            //6

                                          4'd7: HEX0=7'b1111000;                            //7

                                          4'd8: HEX0=7'b0000000;                            //8

                                          4'd9: HEX0=7'b0010000;                            //9

                                          default: HEX0=7'b1111111;              //不符合條件的顯示零

                            endcase

              end

5.6 RTL結(jié)構(gòu)總圖

顯示部分如下圖:



判斷主體如下圖:



部分引腳圖展現(xiàn)




最終實(shí)驗(yàn)現(xiàn)象:






  • 實(shí)驗(yàn)總結(jié)

其實(shí)本次的多功能數(shù)字鐘設(shè)計(jì)其實(shí)應(yīng)該還有很多其他的方法,比如用到外部中斷功能進(jìn)行時(shí)鐘的校時(shí),采用按鍵輸入加數(shù)碼管閃爍的方式進(jìn)行校時(shí)位的選擇,但限于時(shí)間較短,這部分知識(shí)空白,所以本次設(shè)計(jì)實(shí)有所缺陷。

經(jīng)歷了本次FPGA的設(shè)計(jì),有很多感受,首先就是看了一點(diǎn)數(shù)字鐘設(shè)計(jì)方面的資料,遇到很多不理解的地方,于是就需要再和同學(xué)進(jìn)行研究討論,在討論的過(guò)程中,能聽(tīng)到其他人的思路,感覺(jué)特別有意思,同樣的功能,實(shí)現(xiàn)的方法有許許多多,努力把自己的想法實(shí)現(xiàn),或是選擇一種你喜歡的設(shè)計(jì)借鑒一下,兩者都是很好的選擇。

通過(guò)這次設(shè)計(jì)實(shí)驗(yàn),著實(shí)培養(yǎng)了我們獨(dú)立思考、解決問(wèn)題的能力,從最一開(kāi)始的一籌莫展,沒(méi)有一點(diǎn)思路,感覺(jué)像平底拔樓一樣,從兩手空空到產(chǎn)生一個(gè)控制電路,從無(wú)到有,這是創(chuàng)造的力量。同時(shí),和其他同學(xué)討論的過(guò)程也很重要,

要說(shuō)的還有就是最后實(shí)驗(yàn)成功的喜悅是無(wú)可替代的,就好像你親手種的果樹(shù)長(zhǎng)出了果實(shí),養(yǎng)的雞下了雞蛋,是一種創(chuàng)造的喜悅,整個(gè)心就像是一個(gè)大箱子里面放著一塊糖,隱隱約約總能感覺(jué)到一絲甜蜜。

數(shù)碼管顯示的數(shù)字鐘是常見(jiàn)的技術(shù),這次基于FPGA的多功能數(shù)字鐘設(shè)計(jì)具有很高的工程價(jià)值和現(xiàn)實(shí)意義。讓我們將知識(shí)服務(wù)于生活,將知識(shí)用于實(shí)踐,鍛煉了我們發(fā)現(xiàn)問(wèn)題解決問(wèn)題的能力。

這次FPGA的多功能數(shù)字鐘設(shè)計(jì),加深了我們對(duì)FPGA設(shè)計(jì)的理解,培養(yǎng)了我們的邏輯思維和動(dòng)手操作能力,使我們將知識(shí)與技能鏈接起來(lái),使我們每個(gè)人的都在不斷進(jìn)步,提高了專(zhuān)業(yè)技能,提高了動(dòng)手實(shí)踐的綜合能力。

  • Verilog HDL源代碼附錄

  1. module clock (reset,inrst_m0,inrst_h0,clk,HEX0,HEX1,HEX2,HEX3,HEX4,HEX5);
  2. input clk,reset,inrst_m0,inrst_h0;
  3. output reg [6:0] HEX0,HEX1,HEX2,HEX3,HEX4,HEX5;
  4. reg [31:0] count=0,count0=0,count1=0;                                                                                    //實(shí)際寬度為25
  5. reg [3:0] count_s0=0,count_s1=0,
  6.                                           count_m0=0,count_m1=0,
  7.                                           count_h0=0,count_h1=0;
  8. always@(posedge clk)
  9.               begin
  10.                             if (!inrst_m0)
  11.                                                         count0=count0+1;
  12.                                                         if(count0==32'd8000000 && !inrst_m0)//按鍵消抖
  13.                                                                       begin
  14.                                                                       count0=0;
  15.                                                                       count_m0=count_m0+1;
  16.                                                                       end
  17.                             if (!inrst_h0)
  18.                                                         count1=count1+1;
  19.                                                         if(count1==32'd8000000 && !inrst_h0)
  20.                                                                       begin
  21.                                                                       count1=0;
  22.                                                                       count_h0=count_h0+1;
  23.                                                                       end            
  24.                             if (!reset)                                                                                                  //按鍵按下為邏輯0
  25.                                           begin
  26.                                           count=0;                                                                                                  //復(fù)位置零
  27.                                           count_s0=0;count_s1=0;
  28.                                           count_m0=0;count_m1=0;
  29.                                           count_h0=0;count_h1=0;
  30.                                           end
  31.                             else
  32.                                           count=count+1;                                                                     
  33.                                           if(count==32'd50000000)                            //產(chǎn)生一個(gè)一秒的脈沖,
  34.                                                         begin
  35.                                                                       count=0;
  36.                                                                       count_s0=count_s0+1;              //秒個(gè)位計(jì)數(shù)
  37.                                                         end
  38.                                           else            
  39.                                           if(count_s0==4'd10)
  40.                                                         begin
  41.                                                                       count_s0=0;            
  42.                                                                       count_s1=count_s1+1;              //產(chǎn)生秒十位進(jìn)位
  43.                                                         end
  44.                                           else
  45.                                           if(count_s1==4'd6)
  46.                                                         begin
  47.                                                                       count_s1=0;
  48.                                                                       count_m0=count_m0+1;
  49.                                                         end
  50.                                           else
  51.                                           if(count_m0==4'd10)                                          //分個(gè)位計(jì)數(shù)
  52.                                                         begin
  53.                                                                       count_m0=0;
  54.                                                                       count_m1=count_m1+1;
  55.                                                         end
  56.                                           else
  57.                                           if(count_m1==4'd6)                                          //分十位計(jì)數(shù)
  58.                                                         begin
  59.                                                                       count_m1=0;
  60.                                                                       count_h0=count_h0+1;
  61.                                                         end
  62.                                           else
  63.                                           if(count_h0==4'd10)                                          //時(shí)個(gè)位計(jì)數(shù)
  64.                                                         begin
  65.                                                                       count_h0=0;
  66.                                                                       count_h1=count_h1+1;
  67.                                                         end
  68.                                           else
  69.                                           if(count_h0==4 && count_h1==2)              //滿(mǎn)24判斷
  70.                                                         begin
  71.                                                                       count_h0=0;
  72.                                                                       count_h1=0;
  73.                                                         end

  74. end
  75.             
  76. always@(count_s0)                                                                                                  //秒個(gè)位顯示
  77.               begin
  78.                             case(count_s0)
  79.                                           4'd0: HEX0=7'b1000000;                            //0              低電平點(diǎn)亮高電平熄滅
  80.                                           4'd1: HEX0=7'b1111001;                            //1
  81.                                           4'd2: HEX0=7'b0100100;                            //2
  82.                                           4'd3: HEX0=7'b0110000;                            //3
  83.                                           4'd4: HEX0=7'b0011001;                            //4
  84.                                           4'd5: HEX0=7'b0010010;                            //5
  85.                                           4'd6: HEX0=7'b0000010;                            //6
  86.                                           4'd7: HEX0=7'b1111000;                            //7
  87.                                           4'd8: HEX0=7'b0000000;                            //8
  88.                                           4'd9: HEX0=7'b0010000;                            //9
  89.                                           default: HEX0=7'b1111111;              //不符合條件的顯示零
  90.                             endcase
  91.               end

  92. always@(count_s1)                                                                                                  //秒十位顯示
  93.               begin
  94.                             case(count_s1)
  95.                                           4'd0: HEX1=7'b1000000;                            //0              低電平點(diǎn)亮高電平熄滅
  96.                                           4'd1: HEX1=7'b1111001;                            //1
  97.                                           4'd2: HEX1=7'b0100100;                            //2
  98.                                           4'd3: HEX1=7'b0110000;                            //3
  99.                                           4'd4: HEX1=7'b0011001;                            //4
  100.                                           4'd5: HEX1=7'b0010010;                            //5
  101.                                           default: HEX1=7'b1111111;              //不符合條件的顯示零
  102.                             endcase
  103.               end

  104. always@(count_m0)                                                                                                  //分個(gè)位顯示
  105.               begin
  106.                             case(count_m0)
  107.                                           4'd0: HEX2=7'b1000000;                            //0              低電平點(diǎn)亮高電平熄滅
  108.                                           4'd1: HEX2=7'b1111001;                            //1
  109.                                           4'd2: HEX2=7'b0100100;                            //2
  110.                                           4'd3: HEX2=7'b0110000;                            //3
  111.                                           4'd4: HEX2=7'b0011001;                            //4
  112.                                           4'd5: HEX2=7'b0010010;                            //5
  113.                                           4'd6: HEX2=7'b0000010;                            //6
  114.                                           4'd7: HEX2=7'b1111000;                            //7
  115.                                           4'd8: HEX2=7'b0000000;                            //8
  116.                                           4'd9: HEX2=7'b0010000;                            //9
  117.                                           default: HEX2=7'b1111111;              //不符合條件的顯示零
  118.                             endcase
  119.               end
  120. always@(count_m1)                                                                                                  //分十位顯示
  121.               begin
  122.                             case(count_m1)
  123.                                           4'd0: HEX3=7'b1000000;                            //0              低電平點(diǎn)亮高電平熄滅
  124.                                           4'd1: HEX3=7'b1111001;                            //1
  125.                                           4'd2: HEX3=7'b0100100;                            //2
  126.                                           4'd3: HEX3=7'b0110000;                            //3
  127.                                           4'd4: HEX3=7'b0011001;                            //4
  128.                                           4'd5: HEX3=7'b0010010;                            //5
  129.                                           default: HEX3=7'b1111111;              //不符合條件的顯示零
  130.                             endcase
  131.               end
  132. always@(count_h0)                                                                                                  //時(shí)個(gè)位顯示
  133.               begin
  134.                             case(count_h0)
  135.                                           4'd0: HEX4=7'b1000000;                            //0              低電平點(diǎn)亮高電平熄滅
  136.                                           4'd1: HEX4=7'b1111001;                            //1
  137.                                           4'd2: HEX4=7'b0100100;                            //2
  138.                                           4'd3: HEX4=7'b0110000;                            //3
  139.                                           4'd4: HEX4=7'b0011001;                            //4
  140.                                           4'd5: HEX4=7'b0010010;                            //5
  141.                                           4'd6: HEX4=7'b0000010;                            //6
  142.                                           4'd7: HEX4=7'b1111000;                            //7
  143.                                           4'd8: HEX4=7'b0000000;                            //8
  144.                                           4'd9: HEX4=7'b0010000;                            //9
  145.                                           default: HEX4=7'b1111111;              //不符合條件的顯示零
  146.                             endcase
  147.               End

  148. always@(count_h1)                                                                                                  //時(shí)十位顯示
  149.               begin
  150.                             case(count_h1)
  151.                                           4'd0: HEX5=7'b1000000;                            //0              低電平點(diǎn)亮高電平熄滅
  152.                                           4'd1: HEX5=7'b1111001;                            //1
  153.                                           4'd2: HEX5=7'b0100100;                            //2
  154.                                           default: HEX5=7'b1111111;              //不符合條件的顯示零
  155.                             endcase
  156.               end

  157. endmodule
復(fù)制代碼

完整的Word格式文檔51黑下載地址:

FPGA課程設(shè)計(jì)多功能數(shù)字鐘.doc (2.32 MB, 下載次數(shù): 84)



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:366599 發(fā)表于 2018-7-6 23:33 | 只看該作者
好詳細(xì),學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

板凳
ID:632402 發(fā)表于 2019-10-30 10:52 來(lái)自手機(jī) | 只看該作者
很好的學(xué)習(xí)案例,講的比較清楚了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产婷婷综合 | 免费国产黄网站在线观看视频 | 一级免费在线视频 | 亚洲福利片 | 精品国产乱码久久久久久a丨 | 日本在线视| 日韩欧美在线观看视频 | 国产一区二 | 精品久久久久久亚洲精品 | 欧美日韩综合一区 | 奇米影视77| 99亚洲精品 | 亚洲一区精品视频 | 91精品国产91久久久久久吃药 | 777777777亚洲妇女| 羞羞视频网站在线观看 | 天天射天天干 | 男女搞网站 | 亚洲精品国产成人 | 亚洲福利一区二区 | 国产成人精品久久 | 国户精品久久久久久久久久久不卡 | 一区二区三区在线免费观看 | 亚洲国产中文在线 | 亚洲三级在线 | 欧美精品国产一区二区 | 四虎永久在线精品免费一区二 | 91视频麻豆| 天天躁日日躁狠狠躁白人 | 国产一区二区三区在线看 | 欧美1区 | 免费影视在线观看 | 中文字幕日韩一区 | 亚洲精品免费视频 | 一区二区中文 | a级性视频 | 精品欧美乱码久久久久久 | 亚洲精品2区 | 婷婷精品 | 一区二区三区国产 | 久久精品国产亚洲夜色av网站 |