第一篇:FPGA課程設(shè)計(jì)多功能數(shù)字鐘講解
多功能數(shù)字鐘
開課學(xué)期:2014—2015 學(xué)年第二學(xué)期 課程名稱: FPGA課程設(shè)計(jì)
學(xué) 院: 信息科學(xué)與工程學(xué)院
專 業(yè): 集成電路設(shè)計(jì)與集成系統(tǒng)
班 級(jí): 學(xué) 號(hào): 姓 名:
任課教師:
2015 年 7 月 21 日
說(shuō) 明
一、論文書寫要求與說(shuō)明
1.嚴(yán)格按照模板進(jìn)行書寫。自己可以自行修改標(biāo)題的題目 2.關(guān)于字體:
a)題目:三號(hào)黑體加粗。
b)正文:小四號(hào)宋體,行距為1.25倍。
3.嚴(yán)禁抄襲和雷同,一經(jīng)發(fā)現(xiàn),成績(jī)即判定為不及格??!
二、設(shè)計(jì)提交說(shuō)明
1.設(shè)計(jì)需要提交“電子稿”和“打印稿”;
2.“打印稿”包括封面、說(shuō)明(即本頁(yè)內(nèi)容)、設(shè)計(jì)內(nèi)容三部分;訂書機(jī)左邊裝訂。
3.“電子稿”上交:文件名為 “FPGA課程設(shè)計(jì)報(bào)告-班級(jí)-學(xué)號(hào)-姓名.doc”,所有報(bào)告發(fā)送給班長(zhǎng),由班長(zhǎng)統(tǒng)一打包后統(tǒng)一發(fā)送到付小倩老師。
4.“打印稿”由班長(zhǎng)收齊后交到:12教305辦公室; 5.上交截止日期:2015年7月31日17:00之前。
第一章
緒論....................................................................................................................3 關(guān)鍵詞:FPGA,數(shù)字鐘....................................................................................................3 第二章 FPGA的相關(guān)介紹...............................................................................................4 2.1 FPGA概述........................................................................................................4 2.2 FPGA特點(diǎn)...........................................................................................................4 2.3 FPGA設(shè)計(jì)注意...................................................................................................5 第三章 Quartus II與Verilog HDL相關(guān)介紹..................................................................7 3.1 Quartus II..............................................................................................................7 3.2 Verilog HDL......................................................................................................7 第四章 設(shè)計(jì)方案..............................................................................................................8 4.1數(shù)字鐘的工作原理..............................................................................................8 4.2 按鍵消抖.............................................................................................................8 4.3時(shí)鐘復(fù)位..............................................................................................................8 4.4時(shí)鐘校時(shí)..............................................................................................................8 4.5數(shù)碼管顯示模塊。..............................................................................................8 第五章 方案實(shí)現(xiàn)與驗(yàn)證..................................................................................................9 5.1產(chǎn)生秒脈沖..........................................................................................................9 5.2秒個(gè)位進(jìn)位..........................................................................................................9 5.3按鍵消抖..............................................................................................................9 5.4復(fù)位按鍵設(shè)置....................................................................................................10 5.5 數(shù)碼管顯示。...................................................................................................10 5.6 RTL結(jié)構(gòu)總圖....................................................................................................11 第六章 實(shí)驗(yàn)總結(jié)............................................................................................................14 第七章 Verilog HDL源代碼附錄..................................................................................15
第一章
緒論
現(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ì)開發(fā)技術(shù)的發(fā)展。前者以微細(xì)加工技術(shù)為代表,而后者的代表就是電子設(shè)計(jì)自動(dòng)化(electronic design automatic, EDA)技術(shù)。
本設(shè)計(jì)采用的VHDL是一種全方位的硬件描述語(yǔ)言,具有極強(qiáng)的描述能力,能支持系統(tǒng)行為級(jí)、寄存器傳輸級(jí)和邏輯門級(jí)這三個(gè)不同層次的設(shè)計(jì);支持結(jié)構(gòu)、數(shù)據(jù)流、行為三種描述形式的混合描述,覆蓋面廣,抽象能力強(qiáng),因此在實(shí)際應(yīng)用中越來(lái)越廣泛。ASIC是專用的系統(tǒng)集成電路,是一種帶有邏輯處理的加速處理器;而FPGA是特殊的ASIC芯片,與其它的ASIC芯片相比,它具有設(shè)計(jì)開發(fā)周期短、設(shè)計(jì)制造成本低、開發(fā)工具先進(jìn)、標(biāo)準(zhǔn)產(chǎn)品無(wú)需測(cè)試、質(zhì)量穩(wěn)定以及可實(shí)時(shí)在線檢測(cè)等優(yōu)點(diǎn)。
在控制系統(tǒng)中,鍵盤是常用的人機(jī)交換接口,當(dāng)所設(shè)置的功能鍵或數(shù)字鍵按下的時(shí)候,系統(tǒng)應(yīng)該完成該鍵所對(duì)應(yīng)的功能。因此,按鍵信息輸入是與軟件結(jié)構(gòu)密切相關(guān)的過(guò)程。根據(jù)鍵盤結(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í)開關(guān)烘箱、通斷動(dòng)力設(shè)備,甚至各種定時(shí)電氣的自動(dòng)啟用等,所有這些都是以鐘表數(shù)字化為基礎(chǔ)的。因此研究數(shù)字鐘以及擴(kuò)大其應(yīng)用有著非常現(xiàn)實(shí)的意義。
關(guān)鍵詞:FPGA,數(shù)字鐘
第二章 FPGA的相關(guān)介紹
FPGA(Field-Programmable Gate Array),即現(xiàn)場(chǎng)可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xià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)??删幊踢壿嬆KCLB是實(shí)現(xiàn)邏輯功能的基本單元,它們通常規(guī)則的排列成一個(gè)陣列,散布于整個(gè)芯片;可編程輸入/輸出模塊(IOB)主要完成芯片上的邏輯與外部封裝腳的接口,它通常排列在芯片的四周;可編程互連資源包括各種長(zhǎng)度的連接線段和一些可編程連接開關(guān),它們將各個(gè)CLB之間或CLB、IOB之間以及IOB之間連接起來(lái),構(gòu)成特定功能的電路。
FPGA一般來(lái)說(shuō)比ASIC(專用集成芯片)的速度要慢,無(wú)法完成復(fù)雜的設(shè)計(jì),而且消耗更多的電能。但是他們也有很多的優(yōu)點(diǎn)比如可以快速成品,可以被修改來(lái)改正程序中的錯(cuò)誤和更便宜的造價(jià)。廠商也可能會(huì)提供便宜的但是編輯能力差的FPGA。因?yàn)檫@些芯片有比較差的可編輯能力,所以這些設(shè)計(jì)的開發(fā)是在普通的FPGA上完成的,然后將設(shè)計(jì)轉(zhuǎn)移到一個(gè)類似于ASIC的芯片上。另外一種方法是用CPLD(復(fù)雜可編程邏輯器件備)。
2.2 FPGA特點(diǎn)
FPGA的基本特點(diǎn)主要有:
1)采用FPGA設(shè)計(jì)ASIC電路,用戶不需要投片生產(chǎn),就能得到合用的芯片。
2)FPGA可做其它全定制或半定制ASIC電路的中試樣片。3)FPGA內(nèi)部有豐富的觸發(fā)器和I/O引腳。
4)FPGA是ASIC電路中設(shè)計(jì)周期最短、開發(fā)費(fèi)用最低、風(fēng)險(xiǎn)最小的器件之一。5)FPGA采用高速CHMOS工藝,功耗低,可以與CMOS、TTL電平兼容??梢哉f(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)行編程。用戶可以根據(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ú)須專用的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;4'd1: HEX0=7'b1111001;4'd2: HEX0=7'b0100100;4'd3: HEX0=7'b0110000;4'd4: HEX0=7'b0011001;4'd5: HEX0=7'b0010010;4'd6: HEX0=7'b0000010;4'd7: HEX0=7'b1111000;4'd8: HEX0=7'b0000000;4'd9: HEX0=7'b0010000;
//0 低電平點(diǎn)亮高電平熄滅 //1 //2 //3 //4 //5 //6 //7 //8 //9 default: HEX0=7'b1111111;//不符合條件的顯示零
第三章 Quartus II與Verilog HDL相關(guān)介紹
3.1 Quartus II Quartus II 是Altera公司的綜合性PLD/FPGA開發(fā)軟件,原理圖、VHDL、VerilogHDL以及AHDL(Altera Hardware 支持Description Language)等多種設(shè)計(jì)輸入形式,內(nèi)嵌自有的綜合器以及仿真器,可以完成從設(shè)計(jì)輸入到硬件配置的完整PLD設(shè)計(jì)流程。Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模塊庫(kù),使用戶可以充分利用成熟的模塊,簡(jiǎn)化了設(shè)計(jì)的復(fù)雜性、加快了設(shè)計(jì)速度。對(duì)第三方EDA工具的良好支持也使用戶可以在設(shè)計(jì)流程的各個(gè)階段使用熟悉的第三方EDA工具。
Quartus II 軟件擁有友好的界面,使用便捷,功能強(qiáng)大,當(dāng)中可編程邏輯設(shè)計(jì)環(huán)境采用完成集成化,是先進(jìn)的EDA工具軟件。該軟件具備諸多特點(diǎn)(例如:開放性,與結(jié)構(gòu)無(wú)聯(lián)系,多平臺(tái)設(shè)計(jì),完全集成化,設(shè)計(jì)庫(kù)豐富、工具模塊化等),支持原理圖、VHDL、VerilogHDL以及AHDL等多種設(shè)計(jì)輸入形式。Quartus II能夠在多系統(tǒng)上使用,為用戶的設(shè)計(jì)方式提供了完善的圖形界面。具有運(yùn)行速度快,界面統(tǒng)一,功能集中,學(xué)用簡(jiǎn)單等特點(diǎn)。
圖形或HDL編輯Analysis & Synthesis(分析與綜合)Filter(適配器)Assembler(編程文件匯編)編輯器Timing Analyzer(時(shí)序分析器)設(shè)計(jì)輸入綜合或編譯適配器件下載仿真
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年代中期開發(fā)出來(lái)的。前者由Gateway Design Automation公司(該公司于1989年被Cadence公司收購(gòu))開發(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ù)器滿60后向分計(jì)數(shù)器進(jìn)位,分計(jì)數(shù)器滿60后向小時(shí)計(jì)數(shù)器進(jìn)位,小時(shí)計(jì)數(shù)器按照“24翻0”規(guī)律計(jì)數(shù)。計(jì)數(shù)滿后各計(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)并非理想式開關(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)。。。
如代碼展現(xiàn),當(dāng)計(jì)數(shù)器count記到50000000個(gè)時(shí)鐘上升沿的時(shí)候,向秒個(gè)位進(jìn)1.count=count+1;
begin
end count=0;count_s0=count_s0+1;
//秒個(gè)位計(jì)數(shù)
if(count==32'd50000000)
//產(chǎn)生一個(gè)一秒的脈沖,//敏感詞為50MHZ時(shí)鐘上升沿
5.2秒個(gè)位進(jìn)位
當(dāng)秒的個(gè)位計(jì)數(shù)到10的時(shí)候,向秒的十位進(jìn)位。
if(count_s0==4'd10)
begin
end count_s0=0;count_s1=count_s1+1;
//產(chǎn)生秒十位進(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)
begin
count=0;
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)
begin
case(count_s0)
4'd0: HEX0=7'b1000000;
4'd1: HEX0=7'b1111001;
4'd2: HEX0=7'b0100100;
4'd3: HEX0=7'b0110000;
4'd4: HEX0=7'b0011001;
4'd5: HEX0=7'b0010010;
4'd6: HEX0=7'b0000010;
4'd7: HEX0=7'b1111000;
4'd8: HEX0=7'b0000000;
4'd9: HEX0=7'b0010000;
default: HEX0=7'b1111111;
endcase end
//按鍵按下為邏輯0
//復(fù)位置零
//秒個(gè)位顯示
//0 低電平點(diǎn)亮高電平熄滅 //1 //2 //3 //4 //5 //6 //7 //8 //9
//不符合條件的顯示零
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ò)程中,能聽到其他人的思路,感覺(jué)特別有意思,同樣的功能,實(shí)現(xiàn)的方法有許許多多,努力把自己的想法實(shí)現(xiàn),或是選擇一種你喜歡的設(shè)計(jì)借鑒一下,兩者都是很好的選擇。
通過(guò)這次設(shè)計(jì)實(shí)驗(yàn),著實(shí)培養(yǎng)了我們獨(dú)立思考、解決問(wèn)題的能力,從最一開始的一籌莫展,沒(méi)有一點(diǎn)思路,感覺(jué)像平底拔樓一樣,從兩手空空到產(chǎn)生一個(gè)控制電路,從無(wú)到有,這是創(chuàng)造的力量。同時(shí),和其他同學(xué)討論的過(guò)程也很重要,要說(shuō)的還有就是最后實(shí)驗(yàn)成功的喜悅是無(wú)可替代的,就好像你親手種的果樹長(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)步,提高了專業(yè)技能,提高了動(dòng)手實(shí)踐的綜合能力。
第七章 Verilog HDL源代碼附錄
module clock(reset,inrst_m0,inrst_h0,clk,HEX0,HEX1,HEX2,HEX3,HEX4,HEX5);input clk,reset,inrst_m0,inrst_h0;output reg [6:0] HEX0,HEX1,HEX2,HEX3,HEX4,HEX5;reg [31:0] count=0,count0=0,count1=0;reg [3:0] count_s0=0,count_s1=0,count_m0=0,count_m1=0, count_h0=0,count_h1=0;
//實(shí)際寬度為25 always@(posedge clk)begin
if(!inrst_m0)
count0=count0+1;if(count0==32'd8000000 &&!inrst_m0)//按鍵消抖
begin count0=0;count_m0=count_m0+1;end if(!inrst_h0)count1=count1+1;if(count1==32'd8000000 &&!inrst_h0)
begin count1=0;count_h0=count_h0+1;end
//按鍵按下為邏輯0
//復(fù)位置零 if(!reset)begin count=0;count_s0=0;count_s1=0;count_m0=0;count_m1=0;count_h0=0;count_h1=0;end count=count+1;begin else
if(count==32'd50000000)
//產(chǎn)生一個(gè)一秒的脈沖,end count=0;count_s0=count_s0+1;
//秒個(gè)位計(jì)數(shù)
else if(count_s0==4'd10)
begin
end count_s0=0;count_s1=count_s1+1;
//產(chǎn)生秒十位進(jìn)位
else if(count_s1==4'd6)
begin
end
//分個(gè)位計(jì)數(shù) count_s1=0;count_m0=count_m0+1;else if(count_m0==4'd10)
begin
end
//分十位計(jì)數(shù) count_m0=0;count_m1=count_m1+1;else if(count_m1==4'd6)
begin
end
//時(shí)個(gè)位計(jì)數(shù) count_m1=0;count_h0=count_h0+1;else if(count_h0==4'd10)
begin
end
//滿24判斷 count_h0=0;count_h1=count_h1+1;else if(count_h0==4 && count_h1==2)
begin
count_h0=0;
count_h1=0;end
end
always@(count_s0)
begin
case(count_s0)
4'd0: HEX0=7'b1000000;
4'd1: HEX0=7'b1111001;
4'd2: HEX0=7'b0100100;
4'd3: HEX0=7'b0110000;
4'd4: HEX0=7'b0011001;
4'd5: HEX0=7'b0010010;
4'd6: HEX0=7'b0000010;
4'd7: HEX0=7'b1111000;
4'd8: HEX0=7'b0000000;
4'd9: HEX0=7'b0010000;
default: HEX0=7'b1111111;
endcase end
always@(count_s1)
begin
case(count_s1)
4'd0: HEX1=7'b1000000;
4'd1: HEX1=7'b1111001;
4'd2: HEX1=7'b0100100;
4'd3: HEX1=7'b0110000;
4'd4: HEX1=7'b0011001;
4'd5: HEX1=7'b0010010;
default: HEX1=7'b1111111;endcase
//秒個(gè)位顯示
//0 低電平點(diǎn)亮高電平熄滅//1 //2 //3 //4 //5 //6 //7 //8 //9
//不符合條件的顯示零
//秒十位顯示
//0 低電平點(diǎn)亮高電平熄滅//1 //2 //3 //4 //5
//不符合條件的顯示零
end
always@(count_m0)
begin
case(count_m0)
4'd0: HEX2=7'b1000000;
4'd1: HEX2=7'b1111001;
4'd2: HEX2=7'b0100100;
4'd3: HEX2=7'b0110000;
4'd4: HEX2=7'b0011001;
4'd5: HEX2=7'b0010010;
4'd6: HEX2=7'b0000010;
4'd7: HEX2=7'b1111000;
4'd8: HEX2=7'b0000000;
4'd9: HEX2=7'b0010000;
default: HEX2=7'b1111111;
endcase end always@(count_m1)
begin
case(count_m1)
4'd0: HEX3=7'b1000000;
4'd1: HEX3=7'b1111001;
4'd2: HEX3=7'b0100100;
4'd3: HEX3=7'b0110000;
4'd4: HEX3=7'b0011001;
4'd5: HEX3=7'b0010010;
default: HEX3=7'b1111111;
endcase end always@(count_h0)
begin
case(count_h0)
4'd0: HEX4=7'b1000000;4'd1: HEX4=7'b1111001;
//分個(gè)位顯示
//0 低電平點(diǎn)亮高電平熄滅 //1 //2 //3 //4 //5 //6 //7 //8 //9
//不符合條件的顯示零
//分十位顯示
//0 低電平點(diǎn)亮高電平熄滅 //1 //2 //3 //4 //5
//不符合條件的顯示零
//時(shí)個(gè)位顯示
//0 低電平點(diǎn)亮高電平熄滅 //1
4'd2: HEX4=7'b0100100;
4'd3: HEX4=7'b0110000;
4'd4: HEX4=7'b0011001;
4'd5: HEX4=7'b0010010;
4'd6: HEX4=7'b0000010;
4'd7: HEX4=7'b1111000;
4'd8: HEX4=7'b0000000;
4'd9: HEX4=7'b0010000;
default: HEX4=7'b1111111;endcase End
always@(count_h1)
begin
case(count_h1)
4'd0: HEX5=7'b1000000;
4'd1: HEX5=7'b1111001;
4'd2: HEX5=7'b0100100;
default: HEX5=7'b1111111;
endcase end
endmodule
//2 //3 //4 //5 //6 //7 //8 //9
//不符合條件的顯示零
//時(shí)十位顯示
//0 低電平點(diǎn)亮高電平熄滅//1 //2
//不符合條件的顯示零
第二篇:多功能數(shù)字鐘課程設(shè)計(jì)
多功能數(shù)字鐘
朱安煙
(安陽(yáng)師范學(xué)院 物電學(xué)院, 河南 安陽(yáng) 455002)
摘要:時(shí)鐘相比具有更高的準(zhǔn)確性和直觀性
因此得到了更加廣泛的使用。數(shù)字鐘從原理上講是一種典型的數(shù)字電路,其中
本設(shè)計(jì)采用六位LED
24小時(shí)計(jì)時(shí)方式根據(jù)數(shù)碼管動(dòng)態(tài)顯示原理來(lái)進(jìn)行顯示。用晶振產(chǎn)生振蕩脈加以分頻得到所需的鐘表秒脈沖,利用純數(shù)字電路,實(shí)現(xiàn)數(shù)字電子時(shí)鐘功能,時(shí)間重置功能。此次數(shù)字鐘的理圖設(shè)計(jì),PCB圖的制作主要是基于altium designer軟件,利用proteus7.7軟件進(jìn)行仿真,最終本設(shè)計(jì)實(shí)現(xiàn)24小時(shí)的時(shí)鐘計(jì)時(shí)、時(shí)間重置功能。
關(guān)鍵詞:LED數(shù)碼管
時(shí)序電路
邏輯電路
時(shí)鐘
校時(shí)引言
僅向。方案論證:
2.1方案一
由于是數(shù)字鐘的設(shè)計(jì),可以用單片機(jī)AT89C51來(lái)實(shí)現(xiàn)計(jì)數(shù)功能,相對(duì)于純數(shù)字電路來(lái)講它具有功耗低、體積小、使用方便等優(yōu)點(diǎn)。但在大二下半學(xué)期初期,對(duì)單片機(jī)方面的內(nèi)容知識(shí)還不夠完善,加上用單片機(jī)為核心來(lái)做數(shù)字鐘還需做編程,對(duì)自身來(lái)說(shuō)又是一難點(diǎn)。不過(guò)此法可以待以后,學(xué)習(xí)知識(shí)完善后再考慮。
2.2 方案二
繼而考慮到用原先學(xué)過(guò)的純數(shù)字電路來(lái)做,以74Ls160來(lái)做為計(jì)數(shù)的芯片,用六片分別實(shí)現(xiàn) 數(shù)字鐘的小時(shí)、分、秒、的計(jì)數(shù),并用晶振加以分頻產(chǎn)生數(shù)字鐘所需的秒脈沖。
從以上兩種方案,很容易看出,采用方案二,用此法做即可以復(fù)習(xí)回顧早期學(xué)習(xí)的數(shù)電模電知識(shí),又避免了單片機(jī)知識(shí)不足的問(wèn)題,故用此法。結(jié)果與討論
3.1.1數(shù)字鐘主要計(jì)數(shù)芯片為74ls160其引腳圖如下:
這種同步可預(yù)置十進(jìn)計(jì)數(shù)器是由四個(gè)D型觸發(fā)器和若干個(gè)門電路構(gòu)成,內(nèi)部有超前進(jìn)位,具有計(jì)數(shù)、置數(shù)、禁止、直接(異步)清零等功能。對(duì)所有觸發(fā)器同時(shí)加上時(shí)鐘,使得當(dāng)計(jì)數(shù)使能輸入和內(nèi)部門發(fā)出指令時(shí)輸出變化彼此協(xié)調(diào)一致而實(shí)現(xiàn)同步工作。這種工作方式消除了非同步(脈沖時(shí)鐘)計(jì)數(shù)器中常有的輸出計(jì)數(shù)尖峰。緩沖時(shí)鐘輸入將在時(shí)鐘輸入上升沿觸發(fā)四個(gè)觸發(fā)器。這種計(jì)數(shù)器是可全編程的,即輸出可預(yù)置到任何電平。當(dāng)預(yù)置是同步時(shí),在置數(shù)輸入上將建立一低電平,禁止計(jì)數(shù),并在下一個(gè)時(shí)鐘之后不管使能輸入是何電平,輸出都與建立數(shù)據(jù)一致。清除是異步的(直接清零),不管時(shí)鐘輸入、置數(shù)輸入、使能輸入為何電平,清除輸入端的低電平把所有四個(gè)觸發(fā)器的輸出直接置為低電平。超前進(jìn)位電路無(wú)須另加門,即可級(jí)聯(lián)出n位同步應(yīng)用的計(jì)數(shù)器。它是借助于兩個(gè)計(jì)數(shù)使能輸入和一個(gè)動(dòng)態(tài)進(jìn)位輸出來(lái)實(shí)現(xiàn)的。兩個(gè)計(jì)數(shù)使能輸入(ENP和ENT)計(jì)數(shù)時(shí)必須是高電平,且輸入ENT必須正反饋,以便使能動(dòng)態(tài)進(jìn)位輸出。因而被使能的動(dòng)態(tài)進(jìn)位輸出將產(chǎn)生一個(gè)高電平輸出脈沖,其寬度近似等于QA輸出高電平。此高電平溢出進(jìn)位脈沖可用來(lái)使能其后的各個(gè)串聯(lián)級(jí)。使能ENP和ENT輸入的跳變不受時(shí)鐘輸入的影響。電路有全獨(dú)立的時(shí)鐘電路。改變工作模式的控制輸入(使能ENP、ENT或清零)縱使發(fā)生變化,直到時(shí)鐘發(fā)生為止,都沒(méi)有什么影響。計(jì)數(shù)器的功能(不管使能、不使能、置數(shù)或計(jì)數(shù))完全由穩(wěn)態(tài)建立時(shí)間和保持時(shí)間所要求的條件來(lái)決定。
管腳說(shuō)明: CLR:清零復(fù)位端
當(dāng)輸入為低電平時(shí)有效
CLK:時(shí)鐘信號(hào)接收端
A~D:讀入
QA~QD:輸出
ENT、ENP置一時(shí)芯片正常工作
LOAD:置數(shù)端
RCO:信號(hào)輸出端
GND:接地
Vcc:接高
工作方式:
3.1.2 7段LED數(shù)碼管
3.1.3 32.768KHZ晶振
32.768KHZ是一個(gè)標(biāo)準(zhǔn)的頻率,晶振頻率的應(yīng)用主要有以下幾個(gè)方面的參數(shù):尺寸、負(fù)載電容、頻率偏差、應(yīng)用范圍。按尺寸外形來(lái)分主要分為插件和貼片的;插件的主要有2*
6、3*
8、49s 等,貼片的就有很多種了,跟據(jù)各公司的設(shè)計(jì)可的型號(hào)有很多,例如:日本KDS晶振就有49SMD、DST310S、SM—14J、DST520、DST410S等。
3.1.4 CD4060分頻器
CD4060由一振蕩器和14級(jí)二進(jìn)制串行計(jì)數(shù)器位組成,振蕩器的結(jié)構(gòu)可以是RC或晶振電路,CR為高電平時(shí),計(jì)數(shù)器清零且振蕩器使用無(wú)效。所有的計(jì)數(shù)器位均為主從觸發(fā)器。在CP1(和CP0)的下降沿計(jì)數(shù)器以二進(jìn)制進(jìn)行計(jì)數(shù)。在時(shí)鐘脈沖線上使用斯密特觸發(fā)器對(duì)時(shí)鐘上升和下降時(shí)間無(wú)限制 引腳功能:
/CP1:時(shí)鐘輸入端
/CP0:時(shí)鐘輸出端
/CP0:反相時(shí)鐘輸出端
Q4~Q10,Q12~Q14:計(jì)數(shù)器輸出端
/Q14:第14級(jí)計(jì)數(shù)器反相輸出端
VDD:電源正
VSS:電源負(fù)
CR:清零端 3.1.5 74ls48
功能介紹:
74LS48除了有實(shí)現(xiàn)7段顯示譯碼器基本功能的輸入(DCBA)和輸出(Ya~Yg)端外,7448還引入了燈測(cè)試輸入端(LT)和動(dòng)態(tài)滅零輸入端(RBI),以及既有輸入功能又有輸出功能的消隱輸入/動(dòng)態(tài)滅零輸出(BI/RBO)端。
由7448真值表可獲知7448所具有的邏輯功能:
(1)7段譯碼功能(LT=1,RBI=1)
在燈測(cè)試輸入端(LT)和動(dòng)態(tài)滅零輸入端(RBI)都接無(wú)效電平時(shí),輸入DCBA經(jīng)7448譯碼,輸出高電平有效的7段字符顯示器的驅(qū)動(dòng)信號(hào),顯示相應(yīng)字符。除DCBA = 0000外,RBI也可以接低電平,見(jiàn)表1中1~16行。
(2)消隱功能(BI=0)
此時(shí)BI/RBO端作為輸入端,該端輸入低電平信號(hào)時(shí),表1倒數(shù)第3行,無(wú)論LT 和RBI輸入什么電平信號(hào),不管輸入DCBA為什么狀態(tài),輸出全為“0”,7段顯示器熄滅。該功能主要用于多顯示器的動(dòng)態(tài)顯示。
(3)燈測(cè)試功能(LT = 0)
此時(shí)BI/RBO端作為輸出端,端輸入低電平信號(hào)時(shí),表1最后一行,與 及DCBA輸入無(wú)關(guān),輸出全為“1”,顯示器7個(gè)字段都點(diǎn)亮。該功能用于7段顯示器測(cè)試,判別是否有損壞的字段。
(4)動(dòng)態(tài)滅零功能(LT=1,RBI=1)
此時(shí)BI/RBO端也作為輸出端,LT 端輸入高電平信號(hào),RBI 端輸入低電平信號(hào),若此時(shí)DCBA = 0000,表1倒數(shù)第2行,輸出全為“0”,顯示器熄滅,不顯示這個(gè)零。DCBA≠0,則對(duì)顯示無(wú)影響。該功能主要用于多個(gè)7段顯示器同時(shí)顯示時(shí)熄滅高位的零。
3.2 原理設(shè)計(jì)
整體電路設(shè)計(jì)方案:
3.2.1 振蕩電路設(shè)計(jì)
振蕩電路由振蕩器產(chǎn)生的脈沖,振蕩器是數(shù)字鐘的核心。振蕩器的穩(wěn)定度及頻率的精度決定了數(shù)字鐘的精確程度,次處有555定時(shí)器和晶振兩種產(chǎn)生秒脈沖的方法:555振蕩器做振蕩源一般用于精確度要求不高的場(chǎng)合,由門電路組成的多諧振蕩器的振蕩周期不僅與時(shí)間常數(shù)RC有關(guān),而且還取決于門電路的閾值電壓VTH,由于VTH容易受到溫度、電源電壓及干擾的影響,因此頻率穩(wěn)定性較差,只能用于對(duì)頻率穩(wěn)定性要求不高的場(chǎng)合??紤]到振蕩頻率的精確度與穩(wěn)定性固采用晶振做為振蕩源來(lái)實(shí)現(xiàn)振蕩電路,得時(shí)鐘脈沖更穩(wěn)定,時(shí)間走的更準(zhǔn)37.268KHz晶振 通過(guò)cd4060分頻器進(jìn)行十四分頻得到0.5s的脈沖信號(hào),再進(jìn)行一個(gè)SN74LS74進(jìn)行二分頻得到所需的秒脈沖信號(hào):
3.2.2 校時(shí)電路設(shè)計(jì)
根據(jù)電路設(shè)計(jì)所知需要在分處和小時(shí)處需要校時(shí),分別在分和時(shí)個(gè)位向十位進(jìn)位處各加一開關(guān),另一端接地并且在與地之間接100pf電容為防止按鍵抖動(dòng)。
電路設(shè)計(jì)如下:
當(dāng)開關(guān)處于自然位置時(shí)分十位clk端所接為高電平,當(dāng)開關(guān)按下時(shí)則引入一低電平實(shí)其clk端有一個(gè)下降沿脈沖接入,使其產(chǎn)生了校時(shí)功能。
3.2.3顯示電路設(shè)計(jì)
顯示電路是用74ls48驅(qū)動(dòng)七段共陰數(shù)碼管來(lái)作為時(shí)鐘顯示器。
電路設(shè)計(jì)如下:
3.2.4 計(jì)時(shí)電路設(shè)計(jì)
數(shù)字鐘的秒和分位都是從0到60循環(huán)計(jì)數(shù)的,所以可以用用異步清零法設(shè)計(jì)60進(jìn)制計(jì)數(shù)器作為秒和分的計(jì)數(shù)器。用異步置數(shù)法設(shè)計(jì)小時(shí)所用的24進(jìn)制計(jì)數(shù)器。秒、分位設(shè)計(jì)電路如下:
3.3 程序調(diào)試過(guò)程
在板子焊接好以后通上5V電源發(fā)現(xiàn)六Led燈只有三個(gè)能完整亮出來(lái),其余的都不亮或是亮的不全,而且秒位不走,校時(shí)按鍵不管用。問(wèn)題很多。
開始調(diào)試:
1、首先調(diào)試的是秒位為何不走,先測(cè)晶振石否起振,測(cè)量后發(fā)現(xiàn)晶振正常起振,然后從74ls160的clk端用示波器測(cè)試一下沒(méi)有脈沖信號(hào)輸入,則找74ls74的輸出口也無(wú)脈沖,以次往前推,最后測(cè)量出從74ls74輸入端有正確的脈沖輸入,輸出端卻無(wú)脈沖輸出。觀察后沒(méi)有連接錯(cuò)誤,故用萬(wàn)用表測(cè)vcc.end端都有正確的電平接入,再測(cè)量?jī)牲c(diǎn)間是否有漏焊現(xiàn)象,最后測(cè)出一處漏焊點(diǎn)使D端與Q端沒(méi)有接通。重新焊接后秒位正常計(jì)時(shí)。
2、秒位正常計(jì)時(shí),但向秒的十位進(jìn)位時(shí)總是顯示從8到19,查閱資料可知,在第一個(gè)160芯片到第二個(gè)160芯片中缺一個(gè)非門,充當(dāng)延時(shí)作用,使個(gè)位計(jì)數(shù)到9再來(lái)一個(gè)脈沖下計(jì)數(shù)時(shí)再向前進(jìn)位。加上非門進(jìn)位正常了。
3、秒位向分位進(jìn)位正常,但校時(shí)按鍵不能用,且分位向十分位不能進(jìn)位,通過(guò)觀察焊接對(duì)比原理圖與pcb圖后發(fā)現(xiàn),開關(guān)接地的一端弄反了,應(yīng)是開關(guān)與接電容端相側(cè)對(duì)著的端接地。這個(gè)錯(cuò)誤導(dǎo)致開關(guān)不能用,亦使分的十位端的74ls160芯片clk段一直接了地,故不能使其正常進(jìn)位。修改過(guò)后則可以正常進(jìn)位,且兩開關(guān)都能用了。
4、顯示小時(shí)位的第一個(gè)數(shù)碼管一直不亮,通過(guò)測(cè)量發(fā)現(xiàn)led數(shù)碼管沒(méi)有燒壞,能正常工作,通過(guò)對(duì)比PCB圖觀察沒(méi)有焊接錯(cuò)誤,用萬(wàn)用表測(cè)量則發(fā)現(xiàn)驅(qū)動(dòng)次led的74ls48管沒(méi)有正常接地,連接跳線處有一虛焊,重新焊接后恢復(fù)正常。
5、但分向小時(shí)不能進(jìn)位,由示波器觀察發(fā)現(xiàn)74ls160芯片clk端無(wú)脈沖輸入,但十分位有脈沖輸出,且導(dǎo)線也導(dǎo)通了,就觀察原理圖發(fā)現(xiàn)原理圖一處錯(cuò)誤,分向時(shí)進(jìn)位時(shí)是分滿60向前進(jìn)一個(gè)脈沖,故分的TC端不用再接到時(shí)的CLK端了。找到錯(cuò)誤后用鑷子將板上的銅線劃段,則正常進(jìn)位了。
6、小時(shí)進(jìn)位正常但顯示的不是24進(jìn)制,顯示的是44進(jìn)制,則推測(cè)可能是跳線連接錯(cuò)誤,將顯示小時(shí)的十位 74ls160芯片接B端連接成接C端了,故使其顯示44進(jìn)制,通過(guò)觀察、對(duì)比pcb圖,最后發(fā)現(xiàn)果然如此。修改過(guò)后小時(shí)為正常24進(jìn)制了。
7、最后一個(gè)數(shù)碼管有三段老是不亮,觀察連接沒(méi)有錯(cuò)誤,測(cè)量焊接也正常,最后用萬(wàn)用表測(cè)量發(fā)現(xiàn)芯片沒(méi)有問(wèn)題,那三段不亮的數(shù)碼管燒了。
8、調(diào)試好后在后來(lái)的觀察中發(fā)現(xiàn)從秒向分進(jìn)位時(shí)有時(shí)一下進(jìn)兩位,自己找不出來(lái)原因。問(wèn)過(guò)老師后,老師說(shuō)是由于防抖電容所致。嘗試著將電容先劃斷試了一下就沒(méi)有那種情況了。但此時(shí)校時(shí)開關(guān)由于抖動(dòng)緣故,按一下有時(shí)跳3、4個(gè)位,校時(shí)不穩(wěn)定了。結(jié)論
此數(shù)字鐘相對(duì)于機(jī)械鐘來(lái)說(shuō)有低功耗,高精度,數(shù)字化顯示和不易損壞等特點(diǎn)。符合人們?nèi)粘<揖蛹稗k公對(duì)鐘表的要求,可以作為家居、辦公等用表。
參考文獻(xiàn)
[1] 佘新平數(shù)學(xué)電子技術(shù)基礎(chǔ) 華中科技大學(xué)出版社 2009年
[2] 許樹玲 丁電寬 王晉 電子技術(shù)及實(shí)驗(yàn) 內(nèi)蒙古大學(xué)出版社2005年
[3] 佘新平數(shù)字電路設(shè)計(jì)·仿真·測(cè)試 華中大學(xué)出版社 2010年
附圖: 電路原理圖:
第三篇:基于FPGA的數(shù)字鐘課程設(shè)計(jì)
計(jì)算機(jī)與信息工程系
《脈沖與數(shù)字電路》 課程設(shè)計(jì)報(bào)告
專業(yè)
通信工程
班級(jí)
B090507
學(xué)號(hào)
B09050722
姓名
張亞威
報(bào)告完成日期
2011/06/24
指導(dǎo)教師
秦玉潔
評(píng)語(yǔ):
成績(jī):
批閱教師簽名:
批閱時(shí)間:
1.任務(wù)和設(shè)計(jì)要求
設(shè)計(jì)具有時(shí)、分、秒計(jì)數(shù)顯示,以24小時(shí)循環(huán)計(jì)時(shí)的時(shí)鐘電路,帶有清零和校準(zhǔn)功能;
2.設(shè)計(jì)原理
采用硬件描述語(yǔ)言Verilog 進(jìn)行編程,實(shí)現(xiàn)20MHZ晶振到1HZ的分頻;采用verilog語(yǔ)言實(shí)現(xiàn)數(shù)字表功能實(shí)現(xiàn)的各個(gè)模塊;通過(guò)各個(gè)模塊的代碼生成相應(yīng)的模塊原理圖;再將各個(gè)模塊生成的原理圖進(jìn)行疊加組成一個(gè)數(shù)字表系統(tǒng);
3.系統(tǒng)設(shè)計(jì)
設(shè)計(jì)的數(shù)字表有6個(gè)輸入,16個(gè)輸出;
6個(gè)輸入中,有一個(gè)是時(shí)鐘信號(hào),開發(fā)板上的28號(hào)引腳輸入的50MHZ的時(shí)鐘信號(hào);一個(gè)清零端,當(dāng)數(shù)字表正常顯示時(shí),按下清零端可以實(shí)現(xiàn)
數(shù)字鐘整體電路圖:
4.各個(gè)模塊設(shè)計(jì)
基于EP1C6Q240C8的數(shù)字鐘設(shè)計(jì),有6個(gè)模塊組成: Fdiv 分頻模塊
Control 模式選擇模塊 Tune 校正模塊 Zoushi 時(shí)間正常運(yùn)行模塊 Saomiao 數(shù)碼管動(dòng)態(tài)掃描模塊; Decoder BCD譯碼模塊;
Fdiv 模塊:
功能:實(shí)現(xiàn)20MHZ的時(shí)鐘信號(hào)分成10KHZ的信號(hào)和1HZ的信號(hào);
輸入:clk 為20MHZ的時(shí)鐘信號(hào); 輸出:f10000HZ 為10KH的時(shí)鐘信號(hào);
F1HZ 為1HZ的時(shí)鐘信號(hào); Fdiv 模塊代碼:
module fdiv(clk,f10000Hz,f1Hz);output f10000Hz,f1Hz;input clk;reg f10000Hz,f1Hz;integer CNT1=0,CNT2=0;always@(posedge clk)
begin
if(CNT1<1999)
begin
CNT1=CNT1+1;
f10000Hz<=1'b0;
end
else
begin
CNT1=0;
f10000Hz<=1'b1;
end
end
always@(posedge f10000Hz)
begin
if(CNT2<9999)
begin
CNT2=CNT2+1;
f1Hz<=1'b0;
end
else
begin
CNT2=0;
f1Hz<=1'b1;
end
end endmodule fdiv 模塊波形仿真:
由于實(shí)際的分頻波形仿真中,由于要將20MHZ的分成1HZ的,需要將信號(hào)縮小20 000 000倍,因此,此處采用將20HZ的先分成10HZ,然后再將10HZ的分成1HZ的時(shí)鐘信號(hào);在仿真中這樣整,在實(shí)際演示中再改下代碼,實(shí)現(xiàn)真正的20MHZ到1HZ的分頻;它們只是一個(gè)倍數(shù)關(guān)系而已;
Control 模塊:
功能:實(shí)現(xiàn)電子表的正常顯示及時(shí)間校正模式的轉(zhuǎn)換;
輸入:key 模式修改鍵,每來(lái)一個(gè)高電平,mode加一次。如果mode 的值為2,則mode被賦值為 1;
Reset 復(fù)位鍵,如果reset 為 1,則mode 被賦值為0; 輸出:mode 用于輸出到下一級(jí)模塊,進(jìn)行模式判斷; Control 模塊源代碼:
module control(mode,key,reset);input key,reset;output[1:0] mode;reg[1:0] mode;always@(posedge key)begin
if(reset)
begin
mode<=2'b00;
end
else
begin
mode<=mode+2'b01;
if(mode==2)
begin
mode<=2'b00;
end
end end endmodule Control 模塊波形仿真
Tune 模塊
功能:實(shí)現(xiàn)秒分時(shí)的校正;
輸入:Mode 為模式選擇,mode為0時(shí)是正常顯示時(shí)間模式;mode 為1時(shí),是秒、分、時(shí)加一模式。Mode為2時(shí),是時(shí)分秒減一模式;
Ht 為時(shí)調(diào)節(jié)輸入;
mt 為分調(diào)節(jié)輸入;
St 為秒調(diào)節(jié)輸入;
輸出:Aa 為秒的個(gè)位;
Ba 為秒的十位;
Da 為分鐘的個(gè)位;
Ea 為分鐘的十位;
Ga 為小時(shí)的個(gè)位;
Ha 為小時(shí)的十位; Tune 調(diào)時(shí)模塊源代碼:
module tune(mode,ht,mt,st,aa,ba,da,ea,ga,ha);input[1:0] mode;input ht;input mt;input st;output[3:0] aa;output[2:0] ba;output[3:0] da;output[2:0] ea;output[3:0] ga;output[1:0] ha;reg[3:0] aa,da,ga;reg[2:0] ba,ea;reg[1:0] ha;
always@(posedge st)begin
if(mode==1)
begin
aa<=aa+1;
if(aa==9)
begin
ba<=ba+1;
aa<=0;
end
if(ba==5&&aa==9)
ba<=0;
end
else if(mode==2)
begin
aa<=aa-1;
if(aa==0)
begin
ba<=ba-1;
aa<=9;
end
if(ba==0&&aa==0)
ba<=5;
end end always@(posedge mt)begin
if(mode==1)
begin
da<=da+1;
if(da==9)
begin
ea<=ea+1;
da<=0;
end
if(ea==5&&da==9)
ea<=0;
end
else if(mode==2)
begin
da<=da-1;
if(da==0)
begin
ea<=ea-1;
da<=9;
end
if(ea==0&&da==0)
ea<=5;
end end always@(posedge ht)begin
if(mode==1)
begin
ga<=ga+1;
if(ga==9)
begin
ha<=ha+1;
ga<=0;
end
if(ha==2&&ga==3)
begin
ha<=0;
ga<=0;
end
end
else if(mode==2)
begin
ga<=ga-1;
if(ga==0)
begin
ha<=ha-1;
ga<=9;
end
if(ga==0&&ha==0)
begin
ga<=3;
ha<=2;
end
end end
endmodule Tune
調(diào)時(shí)模塊仿真波形:
Mode 為0 時(shí),ht,mt,st均不起作用;
Mode 為1時(shí),小時(shí)加到23,ht再來(lái)一個(gè)上升沿,小時(shí)變?yōu)?;
Mode 為1時(shí),秒、分加到59,st、mt再來(lái)一個(gè)上升沿,秒、分變成0;
Mode 為2時(shí),小時(shí)減到0,ht再來(lái)一個(gè)上升沿,小時(shí)變?yōu)?3;
Mode 為2時(shí),秒、分減到0,st、mt再來(lái)一個(gè)上升沿,秒、分變成59;
Zou shi模塊:
功能:實(shí)現(xiàn)時(shí)間的正常顯示及校正顯示;
正常顯示,當(dāng)秒加到59時(shí),1HZ的脈沖信號(hào)CLK1再來(lái)一個(gè)上升沿,秒變?yōu)?,同時(shí)分加一;
當(dāng)正常顯示時(shí),復(fù)位端來(lái)一個(gè)上升沿的脈沖,顯示變成輸入端輸入的數(shù)據(jù);
Mode 變成模式1時(shí),顯示變成輸入端輸入的數(shù)據(jù);
Mode 變成模式2時(shí),顯示變成輸入端輸入的數(shù)據(jù);
Sao miao模塊:
功能:實(shí)現(xiàn)數(shù)碼管的動(dòng)態(tài)掃描;
輸入:clk10K 輸入10KHZ的時(shí)鐘信號(hào)作為數(shù)碼管的動(dòng)態(tài)掃描時(shí)鐘信號(hào);
a[3..0] 上一級(jí)輸出的秒的個(gè)位;
b[2..0] 上一級(jí)輸出的秒的十位;
c[3..0] 上一級(jí)輸出的分秒之間的標(biāo)志位;
d[3..0] 上一級(jí)輸出的分的個(gè)位;
e[2..0] 上一級(jí)輸出的分的十位;
f[2..0] 上一級(jí)輸出的秒的時(shí)分之間的標(biāo)志位; g[3..0] 上一級(jí)輸出的時(shí)的個(gè)位;
h[2..0] 上一級(jí)輸出的時(shí)的個(gè)位;
輸出:zx[3..0]數(shù)碼管將要顯示的4位BCD碼;
Zw[7..0]八位數(shù)碼管動(dòng)態(tài)掃描輸出; Sao miao 數(shù)碼管掃描模塊源代碼:
module saomiao(a,b,c,d,e,f,g,h,f10000HZ,zx,zw);input f10000HZ;input[3:0] a,d,g,c,f;input[2:0] b,e;input[1:0] h;output[3:0] zx;output[7:0] zw;reg[3:0] zx;
reg[7:0] zw;reg[2:0] slip;always@(posedge f10000HZ)begin
if(slip==100)
slip<=4'b000;
else
slip<=slip+1'b1;end always@(slip)begin
case(slip)
4'd0:begin zw=8'b11111110;zx=a;end
4'd1:begin zw=8'b11111101;zx=b;end
4'd2:begin zw=8'b11111011;zx=c;end
4'd3:begin zw=8'b11110111;zx=d;end
4'd4:begin zw=8'b11101111;zx=e;end
4'd5:begin zw=8'b11011111;zx=f;end
4'd6:begin zw=8'b10111111;zx=g;end
4'd7:begin zw=8'b01111111;zx=h;end
default:zw=8'bx;
endcase end endmodule Sao miao 數(shù)碼管掃描模塊仿真波形:
Zx顯示的是上一級(jí)輸出的4位BCD碼,此處是以十進(jìn)制的形式顯示的;
Decoder 模塊:
功能:將上一級(jí)輸出的4為BCD碼轉(zhuǎn)換成數(shù)碼管能正常顯示的數(shù)據(jù);
輸入:zx[3..0]上一級(jí)輸出的4位BCD碼; 輸出:seg[6..0]數(shù)碼管能正常顯示的數(shù)據(jù);
Decoder 譯碼模塊源代碼: module decoder(zx,seg);input[3:0] zx;output[6:0] seg;reg[6:0] seg;always@(zx)begin case(zx)4'b0000: seg<=7'b0111111;4'b0001: seg<=7'b0000110;4'b0010: seg<=7'b1011011;4'b0011: seg<=7'b1001111;4'b0100: seg<=7'b1100110;4'b0101: seg<=7'b1101101;4'b0110: seg<=7'b1111101;4'b0111: seg<=7'b0000111;4'b1000: seg<=7'b1111111;4'b1001: seg<=7'b1101111;4'b1010: seg<=7'b1000000;
default:seg<=7'bx;
endcase end endmodule Decoder 譯碼模塊仿真波形:
輸入的4位BCD碼從0~10,則數(shù)碼管顯示0~9和一橫標(biāo)志位;
5.系統(tǒng)調(diào)試與性能分析
在第一次做好之后,下載到開發(fā)板里面,出現(xiàn)了問(wèn)題,不能下載成功;最初認(rèn)為是下載器的驅(qū)動(dòng)沒(méi)有安裝好,后來(lái)經(jīng)過(guò)認(rèn)真的分析是因?yàn)樵谶x擇芯片的時(shí)候,選錯(cuò)了芯片;在進(jìn)行了芯片的正確選擇,以及引腳的正確配置后,成功的加生成的.sof文件下載到了開發(fā)板中;
6.設(shè)計(jì)過(guò)程中遇到的問(wèn)題及解決方法。
程序完全調(diào)時(shí)成功后,下載到開發(fā)板中,顯示全部為0,可能是時(shí)鐘分頻的問(wèn)題;解決方法是修改源代碼,進(jìn)行正確的時(shí)鐘信號(hào)分頻;
第四篇:多功能數(shù)字鐘課程設(shè)計(jì)報(bào)告
課題名稱 姓名 學(xué)號(hào) 院、系、部 專業(yè) 指導(dǎo)教師
電子技術(shù)課程設(shè)計(jì)報(bào)告書
2016年6月12日
一、設(shè)計(jì)任務(wù)及要求:
用中小規(guī)模集成芯片設(shè)計(jì)并制作多功能數(shù)字鐘,具體要求如下:
1、準(zhǔn)確及時(shí),以數(shù)字形式顯示時(shí)(00~23)、分(00~59)、秒(00~59)的時(shí)間。
2、具有校時(shí)功能。指導(dǎo)教師簽名:
2016
二、指導(dǎo)教師評(píng)語(yǔ):
指導(dǎo)教師簽名:
2016
三、成績(jī)
指導(dǎo)教師簽名:
2016年6月年6月年6月日
日
日
多功能數(shù)字鐘課程設(shè)計(jì)報(bào)告 設(shè)計(jì)目的
一、設(shè)計(jì)原理與技術(shù)方法:
包括:電路工作原理分析與原理圖、元器件選擇與參數(shù)計(jì)算、電路調(diào)試方法與結(jié)果說(shuō)明; 軟件設(shè)計(jì)說(shuō)明書與流程圖、軟件源程序代碼、軟件調(diào)試方法與運(yùn)行結(jié)果說(shuō)明。
1、電路工作原理分析與原理圖
數(shù)字鐘實(shí)際上是一個(gè)對(duì)標(biāo)準(zhǔn)頻率(1Hz)進(jìn)行計(jì)數(shù)的計(jì)數(shù)電路。由于標(biāo)準(zhǔn)的1Hz 時(shí)間信號(hào)必須做到準(zhǔn)確穩(wěn)定,所以通常使用輸出頻率穩(wěn)定的石英晶體振蕩器電路構(gòu)成數(shù)字鐘的振源。又由于計(jì)數(shù)的起始時(shí)間不可能與標(biāo)準(zhǔn)時(shí)間(如北京時(shí)間)一致,故需要在電路上加一個(gè)校時(shí)電路。因此一個(gè)具有計(jì)時(shí)、校時(shí)、報(bào)時(shí)、顯示等基本功能的數(shù)字鐘主要由振蕩器、分頻器、計(jì)數(shù)器、譯碼器、顯示器、校時(shí)電路、報(bào)時(shí)電路等七部分組成。石英晶體振蕩器產(chǎn)生的信號(hào)經(jīng)過(guò)分頻器得到秒脈沖后,秒脈沖送入計(jì)數(shù)器計(jì)數(shù),計(jì)數(shù)結(jié)果通過(guò)“時(shí)”、“分”、“秒”譯碼器譯碼,并通過(guò)顯示器顯示時(shí)間。由以上分析可得到原理框圖如下圖
圖1 實(shí)驗(yàn)原理框圖
2、元器件選擇與參數(shù)計(jì)算
(1)晶體振蕩電路:產(chǎn)生秒脈沖既可以采用555脈沖發(fā)生電路也可以采用晶振脈沖發(fā)生電路。若由集成電路定時(shí)器555與RC組成的多諧振蕩器作為時(shí)間標(biāo)準(zhǔn)信號(hào)源,可使555與RC組成多諧振蕩器,產(chǎn)生頻率 f=1kHz的方波信號(hào),再通過(guò)分頻則可得到秒脈沖信號(hào)。晶體振蕩器電路則可以給數(shù)字鐘提供一個(gè)頻率穩(wěn)定準(zhǔn)確的32768Hz的方波信號(hào),可保證數(shù)字鐘的走時(shí)準(zhǔn)確及穩(wěn)定。相比二者的穩(wěn)定性,晶振電路比555電路能夠產(chǎn)生更加穩(wěn)定的脈沖,數(shù)字電路中的時(shí)鐘是由振蕩器產(chǎn)生的,振蕩器是數(shù)字鐘的核心。振蕩器的穩(wěn)定度及頻率的精度決定了數(shù)字鐘計(jì)時(shí)的準(zhǔn)確程度,所以最后決定采用晶振脈沖發(fā)生電路。石英晶體振蕩器的特點(diǎn)是振蕩頻率準(zhǔn)確、電路結(jié)構(gòu)簡(jiǎn)單、頻率易調(diào)整,它是電子鐘的核心,用它產(chǎn)生標(biāo)準(zhǔn)頻率信號(hào),再由分頻器分成秒時(shí)間脈沖。
所以秒脈沖晶體振蕩選用32768Hz的晶振,該元件專為數(shù)字鐘電路而設(shè)計(jì),其頻率較低,有利于減少分頻器級(jí)數(shù)。從有關(guān)手冊(cè)中,可查得C1、C2均為20pF。當(dāng)要求頻率準(zhǔn)確度和穩(wěn)定度更高時(shí),還可接入校正電容并采取溫度補(bǔ)償措施。由于CMOS電路的輸入阻抗極高,因此反饋電阻R1可選為20MΩ。
(2)分頻器電路:分頻器電路將32768Hz的高頻方波信號(hào)經(jīng)32768(152)次分頻后得到1Hz的方波信號(hào)供秒計(jì)數(shù)器進(jìn)行計(jì)數(shù)。分頻器實(shí)際上也就是計(jì)數(shù)器。該電路可通過(guò)CD4060與雙D觸發(fā)器74LS74共同實(shí)現(xiàn)。
(3)時(shí)間計(jì)數(shù)器電路:時(shí)間計(jì)數(shù)電路由秒個(gè)位和秒十位計(jì)數(shù)器、分個(gè)位和分十位計(jì)數(shù)器及時(shí)個(gè)位和時(shí)十位計(jì)數(shù)器電路構(gòu)成,其中秒個(gè)位和秒十位計(jì)數(shù)器、分個(gè)位和分十位計(jì)數(shù)器為60進(jìn)制計(jì)數(shù)器,而根據(jù)設(shè)計(jì)要求,時(shí)個(gè)位和時(shí)十位計(jì)數(shù)器為24進(jìn)制計(jì)數(shù)器。計(jì)數(shù)器可以使用十進(jìn)制的74LS160。
(4)譯碼驅(qū)動(dòng)電路:譯碼驅(qū)動(dòng)電路將計(jì)數(shù)器輸出的8421BCD碼轉(zhuǎn)換為數(shù)碼管需要的邏輯狀態(tài),并且為保證數(shù)碼管正常工作提供足夠的工作電流。譯碼器可以使用CD4511。
(5)校時(shí)電路:可以通過(guò)基本的門器件、電阻與開關(guān)實(shí)現(xiàn)。由設(shè)計(jì)的電路圖可選擇與非門74LS00。(6)整點(diǎn)報(bào)時(shí)電路:一般時(shí)鐘都應(yīng)具備整點(diǎn)報(bào)時(shí)電路功能,即在時(shí)間出現(xiàn)整點(diǎn)前數(shù)秒內(nèi),數(shù)字鐘會(huì)自動(dòng)報(bào)時(shí),以示提醒.其作用方式是發(fā)出連續(xù)的或有節(jié)奏的音頻聲波。
3、電路調(diào)試方法與結(jié)果說(shuō)明(1)電路調(diào)試方法 ①數(shù)碼管的調(diào)試:可以用萬(wàn)用表的負(fù)極接數(shù)碼管的3或8腳,正極依次接數(shù)碼管剩余的管腳所接電阻的另一端,并將萬(wàn)用表調(diào)至測(cè)發(fā)光二極管檔位,從而測(cè)試數(shù)碼管的顯示是否正確。②“時(shí)”“分”“秒”電路的調(diào)試:將“時(shí)”“分”“秒”電路連接完成后,可以用函數(shù)信號(hào)發(fā)生器產(chǎn)生的1Hz方波信號(hào)分別作為“時(shí)”、“分”、“秒”的個(gè)位74LS160的計(jì)數(shù)脈沖,從而測(cè)試“時(shí)”是否為24進(jìn)制,“分”和“秒”是否為60進(jìn)制。③校時(shí)電路的調(diào)試:先將電路外接用函數(shù)信號(hào)發(fā)生器產(chǎn)生的2Hz方波信號(hào),再分別通過(guò)校時(shí)、校分電路開關(guān)的斷開、閉合以及開關(guān)閉合后電路的工作情況判斷電路的校時(shí)、校分功能是否正確。
④秒脈沖產(chǎn)生電路的調(diào)試:將電路產(chǎn)生的秒時(shí)間脈沖接入示波器,觀察并計(jì)算電路是否產(chǎn)生1Hz方波信號(hào)。(2)結(jié)果說(shuō)明
①數(shù)碼管的調(diào)試:當(dāng)正極依次接1、2、4、5、7、9、10管腳時(shí),數(shù)碼管依次是G、F、A、B、C、D、E亮。②“時(shí)”“分”“秒”電路的調(diào)試:“時(shí)”為24進(jìn)制(從“00”到“23”),“分”和“秒”都為60進(jìn)制(從“00”到“59”)。
③校時(shí)電路的調(diào)試:開關(guān)斷開時(shí)電路處于正常工作狀態(tài),開關(guān)閉合時(shí)電路處于校時(shí)、校分狀態(tài)。
④秒脈沖產(chǎn)生電路的調(diào)試:電路產(chǎn)生1Hz方波信號(hào)。
4、軟件設(shè)計(jì)說(shuō)明書與流程圖(1)秒脈沖產(chǎn)生電路
晶體振蕩器是構(gòu)成數(shù)字式時(shí)鐘的核心,它保證了時(shí)鐘的走時(shí)準(zhǔn)確及穩(wěn)定。由于晶體具有較高的頻率穩(wěn)定性及準(zhǔn)確性,從而保證了輸出頻率的穩(wěn)定和準(zhǔn)確。晶體XTAL的頻率選為32768HZ。該元件專為數(shù)字鐘電路而設(shè)計(jì),其頻率較低,有利于減少分頻器級(jí)數(shù)。從有關(guān)手冊(cè)中,可查得C1、C2均為20pF。當(dāng)要求頻率準(zhǔn)確度和穩(wěn)定度更高時(shí),還可接入校正電容并采取溫度補(bǔ)償措施。由于CMOS電路的輸入阻抗極高,因此反饋電阻R1可選為22MΩ。較高的反饋電阻有利于提高振蕩頻率的穩(wěn)定性。通常,數(shù)字鐘的晶體振蕩器輸出頻率較高,為了得到1Hz的秒信號(hào)輸入,需要對(duì)振蕩器的輸出信號(hào)進(jìn)行分頻。通常實(shí)現(xiàn)分頻器的電路是計(jì)數(shù)器電路,一般采用多級(jí)2進(jìn)制計(jì)數(shù)器來(lái)實(shí)現(xiàn)。
本實(shí)驗(yàn)中采用CD4060來(lái)構(gòu)成分頻電路。管腳圖見(jiàn)圖2。CD4060在數(shù)字集成電路中可實(shí)現(xiàn)的分頻次數(shù)最高,而且CD4060還包含振蕩電路所需的非門,使用更為方便。CD4060計(jì)數(shù)為14級(jí)2進(jìn)制計(jì)數(shù)器,可以將32768Hz的信號(hào)分頻為2Hz,再經(jīng)過(guò)74LS74即可獲得1Hz的方波信號(hào)。原理電路圖如圖3所示,圖4為仿真電路圖。
圖2 D4060管腳圖
圖3 CD4060秒脈沖振蕩發(fā)生器
圖 4 產(chǎn)生1Hz時(shí)間脈沖的電路圖
(2)時(shí)間計(jì)數(shù)器電路 ①“秒”“分”電路
根據(jù)題目要求,“秒”和“分”都是60進(jìn)制的,而且是從“00”到“59”,可以使用十進(jìn)制的74LS160來(lái)實(shí)現(xiàn)這個(gè)功能。首先將兩片74LS160通過(guò)串行進(jìn)位方式接成百進(jìn)制計(jì)數(shù)器,即分別將“秒”和“分”個(gè)位的進(jìn)位輸出信號(hào)經(jīng)非門作為“秒”和“分”十位的計(jì)數(shù)輸入脈沖。當(dāng)計(jì)數(shù)器從全0狀態(tài)開始計(jì)數(shù),計(jì)入59個(gè)脈沖時(shí),經(jīng)與非門譯碼產(chǎn)生低電平信號(hào)立刻將兩片74LS160同時(shí)置零,于是便得到了60進(jìn)制的計(jì)數(shù)器。74160的邏輯功能示意圖、引腳圖及功能表如下所示。
圖5 a)74160邏輯功能示意圖
b)74160引腳圖
圖6 74160邏輯功能表 ②“時(shí)”電路 根據(jù)題目要求,“時(shí)”是24進(jìn)制的,而且是從“00”到“23”,可以使用十進(jìn)制的74LS160來(lái)實(shí)現(xiàn)這個(gè)功能。首先將兩片74LS160通過(guò)串行進(jìn)位方式接成百進(jìn)制計(jì)數(shù)器,當(dāng)計(jì)數(shù)器從全0狀態(tài)開始計(jì)數(shù),計(jì)入23個(gè)脈沖時(shí),經(jīng)與非門譯碼產(chǎn)生低電平信號(hào)立刻將兩片74LS160同時(shí)置零,于是便得到了24進(jìn)制的計(jì)數(shù)器。(3)譯碼驅(qū)動(dòng)電路
計(jì)數(shù)器實(shí)現(xiàn)了對(duì)時(shí)間的累計(jì)以8421BCD碼形式輸出,選用顯示譯碼電路將計(jì)數(shù)器的輸出數(shù)碼轉(zhuǎn)換為數(shù)碼顯示器件所需要的輸出邏輯和一定的電流,選用CD4511作為顯示譯碼電路,選用LED數(shù)碼管作為顯示單元電路。由于CD4511是輸出高電平有效,所以選用七段共陰極LED數(shù)碼管。若將“秒”、“分”、“時(shí)”計(jì)數(shù)器的每位輸出分別接到相應(yīng)七段譯碼器的輸入端,便可進(jìn)行不同數(shù)字的顯示。“秒”用數(shù)碼管顯示如圖7所示。
圖7 “秒”的譯碼及驅(qū)動(dòng)顯示電路圖(4)校時(shí)電路
數(shù)字種啟動(dòng)后,每當(dāng)數(shù)字鐘顯示與實(shí)際時(shí)間不符合,需要根據(jù)標(biāo)準(zhǔn)時(shí)間進(jìn)行校時(shí)。通常,校正時(shí)間的方法是:首先截?cái)嗾5挠?jì)數(shù)通路,然后再進(jìn)行人工觸發(fā)計(jì)數(shù)或?qū)㈩l率較高的方波信號(hào)加到需要校正的計(jì)數(shù)單元的輸入端,校正好后,再轉(zhuǎn)入正常計(jì)時(shí)狀態(tài)即可。?!懊搿睍r(shí),采用等待校時(shí)。?!胺帧薄ⅰ皶r(shí)”的原理比較簡(jiǎn)單,采用加速校時(shí)。對(duì)校時(shí)電路的要求是 : 1.在小時(shí)校正時(shí)不影響分和秒的正常計(jì)數(shù)。2.在分校正時(shí)不影響秒和小時(shí)的正常計(jì)數(shù)。當(dāng)開關(guān)斷開時(shí),因?yàn)樾U盘?hào)和0相與的輸出為0,而開關(guān)的另一端接高電平,正常輸入信號(hào)可以順利通過(guò)與或門,故校時(shí)電路處于正常計(jì)時(shí)狀態(tài);當(dāng)開關(guān)閉合時(shí),情況正好與上述相反,這時(shí)校時(shí)電路處于校時(shí)狀態(tài)。與非門可選74LS00,非門則可用與非門2個(gè)輸入端并接來(lái)代替從而節(jié)省芯片。校時(shí)電路圖見(jiàn)圖8。
校時(shí)電路圖(5)整點(diǎn)報(bào)時(shí)電路
一般時(shí)鐘都應(yīng)具備整點(diǎn)報(bào)時(shí)電路功能,即在時(shí)間出現(xiàn)整點(diǎn)前數(shù)秒內(nèi),數(shù)字鐘會(huì)自動(dòng)報(bào)時(shí),以示提醒。其作用方式是發(fā)出連續(xù)的或有節(jié)奏的音頻聲波。當(dāng)時(shí)間在59分50秒到59分59秒期間時(shí),分十位、分個(gè)位和秒十位均保持不變,分別為5、9和5,因此可將分計(jì)數(shù)器十位的QC和QA、個(gè)位的QD和QA及秒計(jì)數(shù)器十位的QC 和QA相與。電路在整點(diǎn)前6秒鐘內(nèi)開始整點(diǎn)報(bào)時(shí),即當(dāng)時(shí)間在59分54秒到59分59秒期間時(shí),報(bào)時(shí)電路產(chǎn)生報(bào)時(shí)控制信號(hào),控制小喇叭產(chǎn)生低音;當(dāng)時(shí)間為00分00秒時(shí),報(bào)時(shí)電路產(chǎn)生報(bào)時(shí)控制信號(hào),控制小喇叭產(chǎn)生高音。
5、軟件調(diào)試方法與運(yùn)行結(jié)果說(shuō)明(1)軟件調(diào)試方法
由于仿真時(shí)晶振不能正常工作,所以通過(guò)外接1KHz方波信號(hào)來(lái)調(diào)試電路?!皶r(shí)”“分”“秒”電路的調(diào)試:“時(shí)”為24進(jìn)制(從“00”到“23”),“分”和“秒”都為60進(jìn)制(從“00”到“59”)。校時(shí)電路的調(diào)試:可以通過(guò)校時(shí)、校分電路的開關(guān)來(lái)校對(duì)時(shí)間,并判斷電路的“時(shí)”“分”“秒”的進(jìn)制是否正確。開關(guān)斷開時(shí)電路處于正常工作狀態(tài),開關(guān)閉合時(shí)電路處于校時(shí)、校分狀態(tài)。(2)運(yùn)行結(jié)果說(shuō)明
數(shù)碼管的各部分可以正確顯示,電路的“時(shí)”為24進(jìn)制(從“00”到“23”),“分”和“秒”都為60進(jìn)制(從“00”到“59”)。開關(guān)斷開時(shí)電路處于正常工作狀態(tài),開關(guān)閉合時(shí)電路處于校時(shí)、校分狀態(tài),通過(guò)控制開關(guān)及輸入信號(hào)可以達(dá)到校時(shí)功能。
三、設(shè)計(jì)體會(huì)與建議 1.設(shè)計(jì)體會(huì)
我覺(jué)得此次的數(shù)字鐘設(shè)計(jì)實(shí)驗(yàn),電路原理相對(duì)來(lái)比較簡(jiǎn)單,但電路圖比較復(fù)雜,所用芯片比較多,相應(yīng)的連線也多,這就給焊接電路增加了較大的難度。不過(guò)通過(guò)此次實(shí)驗(yàn),使我更進(jìn)一步地熟悉了芯片的結(jié)構(gòu),掌握了實(shí)驗(yàn)中所用各芯片的工作原理和其具體的使用方法,同時(shí)還接觸到了一些新認(rèn)識(shí)的芯片,增長(zhǎng)了見(jiàn)識(shí)。這次課程設(shè)計(jì)是一次難得的鍛煉機(jī)會(huì),讓我們能夠充分運(yùn)用所學(xué)過(guò)的理論知識(shí)和自己動(dòng)手實(shí)際操作的能力,另外還讓我們學(xué)習(xí)查找資料的方法,以及自己設(shè)計(jì)電路、焊接電路、分析解決電路存在的問(wèn)題的能力。這對(duì)于我來(lái)說(shuō)是很好的提高,填補(bǔ)了平日理論學(xué)習(xí)后實(shí)踐方面的空白。參考文獻(xiàn)
[1] 閻石.數(shù)字電子技術(shù)基礎(chǔ)[M].北京:高等教育出版社,2001年
[2] 楊素行.模擬電子技術(shù)基礎(chǔ)簡(jiǎn)明教程[M].北京:高等教育出版社,2005年 [3]康華光.電子技術(shù)基礎(chǔ)[M].北京:高等教育出版社,1999年 [4]彭華林等編.數(shù)字電子技術(shù)[M].長(zhǎng)沙:湖南大學(xué)出版社,2004年 [5]金唯香等編.電子測(cè)試技術(shù)[M].長(zhǎng)沙:湖南大學(xué)出版社,2004年
第五篇:EDA課程設(shè)計(jì)——多功能數(shù)字鐘
哈爾濱工業(yè)大學(xué)(威海)電子學(xué)課程設(shè)計(jì)報(bào)告
帶有整點(diǎn)報(bào)時(shí)的數(shù)字鐘設(shè)計(jì)與制作
姓名: 蔣棟棟 班級(jí): 0802503 學(xué)號(hào): 080250331 指導(dǎo)教師:
井巖
目錄
一、課程設(shè)計(jì)的性質(zhì)、目的和任務(wù)????????????3
二、課程設(shè)計(jì)基本要求?????????????????3
三、設(shè)計(jì)課題要求???????????????????3
四、課程設(shè)計(jì)所需要儀器????????????????4
五、設(shè)計(jì)步驟?????????????????????4
1、整體設(shè)計(jì)框圖???????????????????4
2、各個(gè)模塊的設(shè)計(jì)與仿真???????????????4
2.1分頻模塊???????????????????????4
2.2計(jì)數(shù)器模塊??????????????????????6
2.3控制模塊??????????????????????10
2.4數(shù)碼管分配?????????????????????13
2.5顯示模塊??????????????????????14
2.6報(bào)時(shí)模塊??????????????????????16
六、調(diào)試中遇到的問(wèn)題及解決的方法???????????18
七、心得體會(huì)?????????????????????18
一、課程設(shè)計(jì)的性質(zhì)、目的和任務(wù)
創(chuàng)新精神和實(shí)踐能力二者之中,實(shí)踐能力是基礎(chǔ)和根本。這是由于創(chuàng)新基于實(shí)踐、源于實(shí)踐,實(shí)踐出真知,實(shí)踐檢驗(yàn)真理。實(shí)踐活動(dòng)是創(chuàng)新的源泉,也是人才成長(zhǎng)的必由之路。
通過(guò)課程設(shè)計(jì)的鍛煉,要求學(xué)生掌握電路的一般設(shè)計(jì)方法,具備初步的獨(dú)立設(shè)計(jì)能力,提高綜合運(yùn)用所學(xué)的理論知識(shí)獨(dú)立分析和解決問(wèn)題的能力,培養(yǎng)學(xué)生的創(chuàng)新精神。
二、課程設(shè)計(jì)基本要求
掌握現(xiàn)代大規(guī)模集成數(shù)字邏輯電路的應(yīng)用設(shè)計(jì)方法,進(jìn)一步掌握電子儀器的正確使用方法,以及掌握利用計(jì)算機(jī)進(jìn)行電子設(shè)計(jì)自動(dòng)化(EDA)的基本方法。
三、設(shè)計(jì)課題要求
(1)構(gòu)造一個(gè)24小時(shí)制的數(shù)字鐘。要求能顯示時(shí)、分、秒。(2)要求時(shí)、分、秒能各自獨(dú)立的進(jìn)行調(diào)整。
(3)能利用喇叭作整點(diǎn)報(bào)時(shí)。從59分50秒時(shí)開始報(bào)時(shí),每隔一秒報(bào)時(shí)一秒,到達(dá)00分00秒時(shí),整點(diǎn)報(bào)時(shí)。整點(diǎn)報(bào)時(shí)聲的頻率應(yīng)與其它的報(bào)時(shí)聲頻有明顯區(qū)別。
#設(shè)計(jì)提示(僅供參考):(1)對(duì)頻率輸入的考慮
數(shù)字鐘內(nèi)所需的時(shí)鐘頻率有:基準(zhǔn)時(shí)鐘應(yīng)為周期一秒的標(biāo)準(zhǔn)信號(hào)。報(bào)時(shí)頻率可選用1KHz和2KHz左右(兩種頻率相差八度音,即頻率相差一倍)。另外,為防止按鍵反跳、抖動(dòng),微動(dòng)開關(guān)輸入應(yīng)采用寄存器輸入形式,其時(shí)鐘應(yīng)為幾十赫茲。
(2)計(jì)時(shí)部分計(jì)數(shù)器設(shè)計(jì)的考慮 分、秒計(jì)數(shù)器均為模60計(jì)數(shù)器。
小時(shí)計(jì)數(shù)為模24計(jì)數(shù)器,同理可建一個(gè)24進(jìn)制計(jì)數(shù)器的模塊。(3)校時(shí)設(shè)計(jì)的考慮
數(shù)字鐘校準(zhǔn)有3個(gè)控制鍵:時(shí)校準(zhǔn)、分校準(zhǔn)和秒校準(zhǔn)。
微動(dòng)開關(guān)不工作,計(jì)數(shù)器正常工作。按下微動(dòng)開關(guān)后,計(jì)數(shù)器以8Hz頻率連續(xù)計(jì)數(shù)(若只按一下,則計(jì)數(shù)器增加一位),可調(diào)用元件庫(kù)中的邏輯門建一個(gè)控制按鍵的模塊,即建立開關(guān)去抖動(dòng)電路(見(jiàn)書70頁(yè))。
(4)報(bào)時(shí)設(shè)計(jì)的考慮
可以將高頻時(shí)鐘分頻得到約2KHz和1KHz的音頻,作為數(shù)字鐘的報(bào)時(shí)頻率。當(dāng)電子鐘顯示XX:59:50時(shí),數(shù)字鐘開始報(bào)時(shí)“DO“,持續(xù)一秒,而且每隔一秒報(bào)一下,直至顯示XX:00:00時(shí)報(bào)“DI”,持續(xù)一秒后停止。最后輸出至喇叭。應(yīng)調(diào)用元件庫(kù)中的邏輯門建一個(gè)控制報(bào)時(shí)的模塊。
(5)建一個(gè)七段譯碼的模塊
因在系統(tǒng)可編程器件實(shí)驗(yàn)箱上的數(shù)碼管沒(méi)有經(jīng)過(guò)譯碼,故要用AHDL語(yǔ)言寫一個(gè)七段譯碼的模塊,且應(yīng)考慮數(shù)碼管為共陽(yáng)極。數(shù)碼管上的點(diǎn)(D2、D4、D6)應(yīng)置Vcc。
四、課程設(shè)計(jì)所需要儀器
1、計(jì)算機(jī)一臺(tái)
2、quartusⅡ軟件
3、FPGA開發(fā)板
五、設(shè)計(jì)步驟
1、模塊介紹
(1)分頻模塊:產(chǎn)生1Hz、1KHz、2KHz頻率(2)計(jì)數(shù)器模塊:生成60進(jìn)制、24進(jìn)制計(jì)數(shù)器(3)控制模塊:按鍵控制、按鍵消抖
(4)顯示模塊:7段數(shù)碼管顯示器,分別顯示小時(shí)、分鐘、秒(5)報(bào)時(shí)模塊:進(jìn)行整點(diǎn)報(bào)時(shí)
2、各個(gè)模塊的設(shè)計(jì)與仿真
2.1分頻模塊
CLK晶振頻率50MHZ,分成2KHZ,1KHZ,1HZ的信號(hào)?;鶞?zhǔn)1HZ信號(hào)作為時(shí)鐘計(jì)時(shí)的秒計(jì)數(shù)時(shí)鐘信號(hào);分頻的1KHZ,2KHZ信號(hào)用于報(bào)時(shí)電路的不同聲訊。
程序代碼:
library ieee;use ieee.std_logic_1164.all;entity fre is port(clk ,sel: in std_logic;clk1hz,clk1khz,clk2khz:out std_logic);end fre;architecture beh of fre is signal data1khz,data2khz,data1hz : std_logic := '0';begin clk1hz <= data1hz;clk1khz <= data1khz;clk2khz <= data2khz;clk1khz_pro : process(clk)--產(chǎn)生1khz信號(hào) variable cnt : integer range 0 to 24999;begin if clk'event and clk='1' then if cnt = 24999 then cnt := 0;data1khz <= not data1khz;else cnt := cnt + 1;end if;end if;end process clk1khz_pro;clk2khz_pro : process(clk)--variable cnt : integer range 0 to 12499;begin if clk'event and clk='1' then if cnt = 12499 then cnt := 0;data2khz <= not data2khz;else cnt := cnt + 1;end if;end if;end process clk2khz_pro;clk1hz_pro : process(data1khz)--variable cnt : integer range 0 to 499;begin if data1khz'event and data1khz='1' then if sel='0' then cnt:=0;else if cnt = 499 then cnt := 0;data1hz <= not data1hz;else cnt := cnt + 1;end if;end if;end if;end process clk1hz_pro;end beh;
輸入模塊電路圖:
產(chǎn)生2khz信號(hào) 產(chǎn)生1hz 信號(hào) 5 freclkclk1hzclk2khzinst selclk1khz2.2計(jì)數(shù)器模塊
由秒計(jì)數(shù)器,分計(jì)數(shù)器,時(shí)計(jì)數(shù)器組成了最基本的數(shù)字鐘計(jì)時(shí)電路,兩個(gè)六十進(jìn)制計(jì)數(shù)器與二十四進(jìn)制計(jì)數(shù)器組合構(gòu)成。
程序代碼:
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use IEEE.STD_LOGIC_ARITH.ALL;
entity shuzizhong is port(clk_change : in std_logic;s_en,m_en,h_en:in std_logic;sel:in std_logic;secout,minout,hourout :out std_logic;sl,sh,ml,mh,hl,hh:out std_logic_vector(3 downto 0);a:out std_logic_vector(15downto 0));end shuzizhong;architecture behav of shuzizhong is
signal low_rega,high_rega,low_regb,high_regb,low_regc,high_regc :std_logic_vector(3 downto 0):=“0000”;signal sout,mout,hout :std_logic :='0';begin--秒的60進(jìn)制進(jìn)制 counter_sec_l : process(clk_change,s_en)begin
sl<=low_rega;sh<=high_rega;ml<=low_regb;mh<=high_regb;hl<=low_regc;hh<=high_regc;6 if clk_change'event and clk_change='1' then if s_en='1' then if low_rega=“1001” then low_rega <= “0000”;else low_rega <= low_rega+'1';end if;end if;end if;end process counter_sec_l;counter_sec_h : process(clk_change,s_en,low_rega)begin if clk_change'event and clk_change='1' then if s_en='1' then if low_rega=“1001” then if high_rega =“0101”then high_rega <= “0000”;else high_rega <= high_rega+'1';end if;end if;end if;end if;end process counter_sec_h;sout <= '1' when low_rega=“1001” and high_rega=“0101” else '0';
----分鐘的60進(jìn)制設(shè)置 counter_min_l : process(clk_change,m_en)begin if clk_change'event and clk_change='1' then if m_en='1' then if sout='1'or sel='0' then if low_regb=“1001” then low_regb <= “0000”;else low_regb <= low_regb+'1';end if;end if;end if;end if;end process counter_min_l;counter_min_h : process(clk_change,m_en,low_regb)begin if clk_change'event and clk_change='1' then 7 if sout='1'or sel='0' then if m_en='1' then if low_regb=“1001” then
if high_regb =“0101”then
high_regb <= “0000”;else high_regb <= high_regb+'1';end if;end if;end if;end if;end if;end process counter_min_h;mout <= '1' when low_regb=“1001” and high_regb=“0101”and sout='1' else '0';--小時(shí)的24進(jìn)制設(shè)置 counter_hour_l : process(clk_change,h_en)begin if clk_change'event and clk_change='1' then if h_en='1' then if mout='1'or sel='0' then if low_regc=“1001”or hout='1' then low_regc <= “0000”;else low_regc <= low_regc+'1';end if;end if;end if;end if;end process counter_hour_l;counter_hour_h : process(clk_change,h_en,hout)begin if clk_change'event and clk_change='1' then if mout='1'or sel='0' then if h_en='1' then if hout='1' then high_regc<=“0000”;else if low_regc=“1001” then high_regc <= high_regc+'1';end if;end if;end if;8 end if;end if;end process counter_hour_h;hout <= '1' when low_regc=“0011” and high_regc=“0010” else '0';secout<=sout;minout<=mout;hourout<=hout;a<=high_regb&low_regb&high_rega&low_rega;end behav;
輸入模塊電路圖:
shuzizhongclk_changes_enm_enh_enselsecoutminouthouroutsl[3..0]sh[3..0]ml[3..0]mh[3..0]hl[3..0]hh[3..0]a[15..0]inst
2.3控制模塊
分五個(gè)狀態(tài)0狀態(tài)正常計(jì)時(shí),按下按鍵進(jìn)入下一狀態(tài)開始調(diào)時(shí)模式1,按下按鍵進(jìn)入調(diào)秒模式2,按下按鍵進(jìn)入調(diào)分模式3,按下按鍵進(jìn)入調(diào)小時(shí)模式4.按下按鍵恢復(fù)正常計(jì)時(shí)模式。
程序代碼:
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity key_press is port(set ,mode: in std_logic;clk1khz,clk1hz: in std_logic;secout,minout: in std_logic;clk_change,clk2hz_en:out std_logic;sel,s_ce,m_ce,h_ce:out std_logic;s_en,m_en,h_en:out std_logic);end key_press;architecture beh of key_press is 9 signal key1,key2:std_logic;signal sce_reg, mce_reg ,hce_reg:std_logic;signal ssl,ssen,mmen,hhen:std_logic;signal con : integer range 0 to 4 :=0;--按鍵按下(延時(shí))begin
key_press2 : process(set,clk1khz)variable cnt :integer range 0 to 999;begin if set='0' then if clk1khz'event and clk1khz='1'then if cnt=50 and set='0' then cnt :=cnt+1;key2 <= '1';else cnt:=cnt+1;key2 <= '0';end if;end if;else cnt:=0;key2<='0';end if;end process key_press2;key_press1 : process(mode,clk1khz)variable cnt :integer range 0 to 999;begin if mode='0' then if clk1khz'event and clk1khz='1'then if cnt=50 and mode='0' then cnt :=cnt+1;key1 <= '1';else cnt:=cnt+1;key1 <= '0';end if;end if;else cnt:=0;key1<='0';end if;end process key_press1;count : process(key1,key2)begin if key1'event and key1='1' then if con=4 then con<=0;else con<=con+1;end if;end if;10 end process count;con_pro : process(con)begin case con is when 0 => ssl<='1';sce_reg <= '0';ssen <='1';mce_reg <= '0';mmen <='1';hce_reg <= '0';hhen <='1';clk2hz_en <='0';when 1 => ssl<='0';sce_reg <= '0';ssen <='1';mce_reg <= '0';mmen <='1';hce_reg <= '0';hhen <='1';clk2hz_en <='1';when 2 => ssl<='0';sce_reg <= '1';ssen <='1';mce_reg <= '0';mmen <='0';hce_reg <= '0';hhen <='0';clk2hz_en <='1';when 3 => ssl<='0';sce_reg <= '0';ssen <='0';mce_reg <= '1';mmen <='1';hce_reg <= '0';hhen <='0';clk2hz_en <='1';when 4 => ssl<='0';sce_reg <= '0';ssen <='0';mce_reg <= '0';mmen <='0';hce_reg <= '1';hhen <='1';clk2hz_en <='1';when others => ssl<='0';sce_reg <= '0';ssen <='1';mce_reg <= '0';mmen <='1';hce_reg <= '0';hhen <='1';clk2hz_en <='0';end case;end process con_pro;sel_pro : process(ssl)begin case ssl is when '0'=> s_ce<=sce_reg;m_ce<=mce_reg;h_ce<=hce_reg;clk_change<=key2;when '1'=> s_ce<=ssen;11 m_ce<=mmen;h_ce<=hhen;clk_change<=clk1hz;when others=> s_ce<=ssen;m_ce<=secout;h_ce<=minout;clk_change<=clk1hz;end case;end process sel_pro;sel<=ssl;s_en<=ssen;m_en<=mmen;h_en<=hhen;end beh;
輸入模塊電路圖: key_presssetclk_changemodeclk2hz_enclk1khzselclk1hzs_cesecoutm_ceminouth_ces_enm_enh_eninst
2.4數(shù)碼管分配
程序代碼:
library ieee;use ieee.std_logic_1164.all;entity display is port(datain : in std_logic_vector(3 downto 0);dataout : out std_logic_vector(7 downto 0));end display;architecture duan of display is begin process(datain)begin case datain is 12 when “0000” => dataout <=“11000000”;--dp,g,f,e,d,c,b,a when “0001” => dataout <=“11111001”;when “0010” => dataout <=“10100100”;when “0011” => dataout <=“10110000”;when “0100” => dataout <=“10011001”;when “0101” => dataout <=“10010010”;when “0110” => dataout <=“10000010”;when “0111” => dataout <=“11111000”;when “1000” => dataout <=“10000000”;when “1001” => dataout <=“10010000”;when “1010” => dataout <=“10111111”;when “1011” => dataout <=“10000011”;when “1100” => dataout <=“10100111”;when “1101” => dataout <=“10100001”;when “1110” => dataout <=“10000110”;when “1111” => dataout <=“10001110”;when others => null;end case;end process;end;
輸入模塊電路圖:
displaydatain[3..0]dataout[7..0]inst
2.5顯示模塊
使用七段數(shù)碼管顯示小時(shí)、分鐘與秒
程序代碼:
library ieee;use ieee.std_logic_1164.all;entity scan is port(clk1khz : in std_logic;sl,sh,ml,mh,hl,hh : in std_logic_vector(3 downto 0);clk2hz_en : in std_logic;s_ce,m_ce,h_ce : in std_logic;en_out : out std_logic_vector(7 downto 0);13 dataout : out std_logic_vector(3 downto 0));end scan;architecture beh of scan is signal cnt : integer range 0 to 7;signal en : std_logic_vector(7 downto 0);signal clk2hz : std_logic;signal h_ce_reg,m_ce_reg,s_ce_reg : std_logic;begin h_ce_reg <= not h_ce;m_ce_reg <= not m_ce;s_ce_reg <= not s_ce;cnt_pro : process(clk1khz)begin if clk1khz'event and clk1khz='1' then if cnt = 7 then cnt <= 0;else cnt <= cnt + 1;end if;end if;end process cnt_pro;clk2hz_pro :process(clk1khz)variable c : integer range 0 to 499 := 0;begin if clk1khz'event and clk1khz='1' then if clk2hz_en ='1' then if c =499 then c := 0;clk2hz <= not clk2hz;else c := c + 1;end if;else clk2hz <= '0';end if;end if;end process clk2hz_pro;scan_pro : process(cnt,sl,sh,ml,mh,hl,hh)begin case cnt is when 0 => dataout <= sl;en <= “11111110”;when 1 => dataout <= sh;en <= “11111101”;when 2 => dataout <= ml;en <= “11110111”;when 3 => dataout <= mh;en <= “11101111”;when 4 => dataout <= hl;en <= “10111111”;14 when 5 => dataout <= hh;en <= “01111111”;when 6 => dataout <= “1010”;en <= “11111011”;when 7 => dataout <= “1010”;en <= “11011111”;when others => null;end case;end process scan_pro;
en_out <= en or((clk2hz & clk2hz)or(h_ce_reg & h_ce_reg))& clk2hz &((clk2hz & clk2hz)or(m_ce_reg & m_ce_reg))& clk2hz &((clk2hz & clk2hz)or(s_ce_reg & s_ce_reg));end beh;
輸入模塊電路圖:
scanclk1khzen_out[7..0]sl[3..0]dataout[3..0]sh[3..0]ml[3..0]mh[3..0]hl[3..0]hh[3..0]clk2hz_ens_cem_ceh_ceinst
2.6報(bào)時(shí)模塊
利用蜂鳴器進(jìn)行整點(diǎn)報(bào)時(shí)
程序代碼:
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use IEEE.STD_LOGIC_ARITH.ALL;--整點(diǎn)報(bào)時(shí) entity baoshi is port(clk1khz,clk2khz : in std_logic;a:in std_logic_vector(15 downto 0);sel:in std_logic;bell:out std_logic);end baoshi;architecture zhong of baoshi is signal c1,ring:std_logic;begin ring_bell :process(clk1khz,clk2khz)15 begin case a is when “***0” => c1<=clk1khz;when “***0” => c1<=clk1khz;when “***0” => c1<=clk1khz;when “***0” => c1<=clk1khz;when “***0” => c1<=clk1khz;when “***0” => c1<=clk2khz;when “***0” => c1<=clk2khz;when others => c1<='0';end case;end process ring_bell;
bs: process(c1)begin if sel='1' then if c1='1' then ring<='0';else ring<='1';end if;end if;end process bs;bell<=ring;
end zhong;
輸入模塊電路圖:
baoshiclk1khzbellclk2khza[15..0]selinst
整體模塊電路圖
displayshuzizhongs_enm_enh_enselclk_changes_enm_enh_enselsecoutminouthouroutsl[3..0]sh[3..0]ml[3..0]mh[3..0]hl[3..0]hh[3..0]setmodefreclkINPUTVCCINPUTVCCdata[3..0]datain[3..0]secoutminoutinst1scanclk1khzclk1khzsl[3..0]sh[3..0]ml[3..0]mh[3..0]hl[3..0]a[15..0]dataout[7..0]OUTPUTdataout[7..0]en_out[7..0]dataout[3..0]OUTPUTen_out[7..0]data[3..0]key_presssetclk1khzmodeclk1khzclk1hzsecoutminoutclk_changeclk2hz_ensels_cem_ceh_ces_enm_enh_eninst6s_enm_enh_enselinst7a[15..0]INPUTVCChh[3..0]clk2hz_ens_cem_ceh_ceinst4baoshiclk1khzclk2khza[15..0]selclk1khzbellclk2khza[15..0]sel++selclkclk1hzselclk1khzclk2khzinst2clk1khzclk2khzsecoutminoutOUTPUTbellinst
六、調(diào)試中遇到的問(wèn)題及解決的方法:
1、編程時(shí),經(jīng)常導(dǎo)致語(yǔ)法錯(cuò)誤,如:“;”沒(méi)有寫上,變量類型沒(méi)有預(yù)先標(biāo)明,前后變量名字由于缺少一個(gè)或多一個(gè)字母而導(dǎo)致出錯(cuò)。解決辦法:對(duì)照錯(cuò)誤,認(rèn)真檢查程序,看哪個(gè)地方的標(biāo)點(diǎn),變量沒(méi)有寫上或標(biāo)明。
2、進(jìn)行編譯或波形仿真時(shí),經(jīng)常得到的不是預(yù)想中的結(jié)果。
解決辦法:將需要編譯或進(jìn)行仿真的實(shí)體文件置頂,經(jīng)檢錯(cuò)無(wú)誤后,進(jìn)行波形仿真,在仿真之前需要合理設(shè)置仿真結(jié)束時(shí)間和信號(hào)周期。
3、在控制時(shí)間的顯示的時(shí)候,由于變量太多多發(fā)現(xiàn)不能完全的控制住變量,導(dǎo)致顯示的時(shí)候出現(xiàn)了亂碼,數(shù)碼管顯示不正常 解決辦法:減少變量,仔細(xì)推敲,合理命名。
七、心得體會(huì)
一個(gè)多星期的課程設(shè)計(jì)讓我受益匪淺,也讓我真正明白理論與實(shí)踐相結(jié)合的重要性。通過(guò)具體實(shí)踐才能讓自己清楚哪些知識(shí)已經(jīng)掌握,哪些知識(shí)仍需鞏固加強(qiáng)。與此同時(shí),我也對(duì)EDA以及VHDL語(yǔ)言有了進(jìn)一步了解,對(duì)于其結(jié)構(gòu)、語(yǔ)法、功能等認(rèn)識(shí)不少。當(dāng)然,我目前所做的還僅僅只是一些基本操作,要想真正將其融會(huì)貫通還需要今后更多的學(xué)習(xí)與實(shí)踐。雖然只是一個(gè)小設(shè)計(jì),我卻也從中學(xué)到了不少設(shè)計(jì)流程和一些相關(guān)問(wèn)題。設(shè)計(jì)是一個(gè)十分嚴(yán)謹(jǐn)?shù)倪^(guò)程,容不得隨意和馬虎。要想快速而高效地完成一項(xiàng)設(shè)計(jì),必須先有一個(gè)清晰明了的設(shè)計(jì)思路,設(shè)想好一個(gè)整體框架,然后在此基礎(chǔ)上,逐漸將各個(gè)部分功能進(jìn)行完善。在設(shè)計(jì)的過(guò)程中,也曾遇到不少困難,但正所謂堅(jiān)持就是勝利,要想取得成功,必須要有努力付出,這樣所取得的結(jié)果才更有意義。