數(shù)電課設(shè)-多功能電子鐘--宋峰
《數(shù)電課設(shè)-多功能電子鐘--宋峰》由會(huì)員分享,可在線閱讀,更多相關(guān)《數(shù)電課設(shè)-多功能電子鐘--宋峰(56頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、蘭州理工大學(xué) 電子技術(shù)綜合訓(xùn)練 設(shè)計(jì)報(bào)告 題目: 多功能電子鐘設(shè)計(jì) 姓名: 蔡冰倩 學(xué)號(hào): 10230625 班級(jí): 控制工程基地一班 同組成員: 吳博 指導(dǎo)教師: 楊新華 日期: 2012年1月1號(hào) i 州理工大學(xué) 摘要 通過(guò)CPLD/FPGAT編程邏輯器件實(shí)現(xiàn)多功能電子鐘。 電子鐘的主要功能有計(jì)時(shí)功能、校正功能、整點(diǎn)報(bào)時(shí)功能及定時(shí)鬧叫功能。 針對(duì)功能要求利用硬件描述語(yǔ)言設(shè)計(jì)程序, 通過(guò)Quartus軟件進(jìn)行仿真分析,將 程序下載到電路中,觀察數(shù)碼管可知實(shí)現(xiàn)其邏輯功能。 利用可編程邏輯器件可簡(jiǎn)化電路,實(shí)現(xiàn)功能的多樣性。 關(guān)鍵字:多
2、功能電子鐘 硬件描述語(yǔ)言 可編程邏輯器件 3 目錄 1 設(shè)計(jì)任務(wù)和要求 4 1.1 設(shè)計(jì)任務(wù) 4 1.2 設(shè)計(jì)要求 4 2系統(tǒng)設(shè)計(jì) 5 1.1 系統(tǒng)要求 5 1.2 方案設(shè)計(jì) 6 1.3 系統(tǒng)工作原理 6 3 電子鐘功能模塊及仿真 7 3.1 分頻模塊及其仿真 7 3.2 計(jì)時(shí)模塊及其仿真 9 3.3 定時(shí)模塊及其仿真 11 3.4 按鍵消抖模塊及其仿真 14 3.5 譯碼顯示模塊及其仿真 15 3.6 例化模塊 18 4 元件的選擇 44 5電路安裝、調(diào)試與測(cè)試 .45 1.1 電路安裝 .45 1.2 電路調(diào)試
3、 .46 1.3 系統(tǒng)功能及性能測(cè)試 .46 1.3.1 測(cè)試方法設(shè)計(jì) .46 1.3.2 測(cè)試結(jié)果及分析 .47 6 結(jié)論 .48 7 參考文獻(xiàn) .48 8 總結(jié)、體會(huì)和建議 .49 附錄:電路原理圖 ..50 元器件清單 .53 1設(shè)計(jì)任務(wù)及要求 1.1 設(shè)計(jì)任務(wù) 設(shè)計(jì)任務(wù)是進(jìn)行設(shè)計(jì)的基礎(chǔ),根據(jù)對(duì)設(shè)計(jì)任務(wù)的分析和理解進(jìn)行設(shè)計(jì)電路 及相應(yīng)元器件的選擇,從而進(jìn)行電路仿真和調(diào)試。所以對(duì)設(shè)計(jì)任務(wù)的理解和分析 是進(jìn)行設(shè)計(jì)的關(guān)鍵。 本設(shè)計(jì)的設(shè)計(jì)任務(wù)為:利用 CPLD/FPG般計(jì)一個(gè)多功能電子鐘。 數(shù)字電子鐘是一種用數(shù)字顯示秒、分、時(shí)的計(jì)時(shí)裝置,由于十足集成電路
4、 技術(shù)的發(fā)展,使數(shù)字鐘走時(shí)準(zhǔn)確、多功能化且性能穩(wěn)定等優(yōu)點(diǎn)。利用 CPLD/FPGA 設(shè)計(jì)一個(gè)可實(shí)現(xiàn)計(jì)時(shí)、校時(shí)、整點(diǎn)報(bào)時(shí)、定時(shí)鬧叫多功能的電子鐘,需要分兩步 走。首先,通過(guò) Verilog HDL硬件描述語(yǔ)言進(jìn)行代碼的編寫,利用 Quartus進(jìn) 行編譯和仿真。其次,根據(jù)設(shè)計(jì)任務(wù)和要求選擇器件進(jìn)行電路的焊接。 1.2 設(shè)計(jì)要求 設(shè)計(jì)要求是完成設(shè)計(jì)指標(biāo)的導(dǎo)航,只有很好的分析和了解設(shè)計(jì)的要求,才 可以完成相應(yīng)的設(shè)計(jì)。 設(shè)計(jì)要求: 利用實(shí)驗(yàn)室EDA實(shí)驗(yàn)箱上的CPLD/FPGA LED顯示器、揚(yáng)聲器、撥碼開關(guān) 等資源,設(shè)計(jì)一個(gè)多功能電子鐘,要求具有以下功能: 1、數(shù)字形式顯示月、日、時(shí)、分、
5、秒,在分和秒之間顯示“: ”,并按1 次/秒的速度閃爍; 2、日以24小時(shí)為一個(gè)記時(shí)周期; 3、有校正功能,能夠在任何時(shí)刻對(duì)電子鐘進(jìn)行方便的校正; 4、有定時(shí)鬧叫功能,能夠按照任意預(yù)先設(shè)置的時(shí)間鬧叫, 驅(qū)動(dòng)小型揚(yáng)聲器 工作,并要求在鬧叫狀態(tài)能夠手動(dòng)消除鬧叫; 5、整點(diǎn)時(shí)刻通過(guò)揚(yáng)聲器給出提示; 6、采用CPLD/FPGAT編程邏輯器件實(shí)現(xiàn); 針對(duì)設(shè)計(jì)要求可做簡(jiǎn)單分析:所設(shè)計(jì)的多功能電子鐘需要實(shí)現(xiàn)計(jì)時(shí)、整點(diǎn)報(bào)時(shí)、 定時(shí)鬧叫和校正功能。計(jì)時(shí)需要有相應(yīng)的計(jì)時(shí)器實(shí)現(xiàn),整點(diǎn)報(bào)時(shí)需要相應(yīng)的報(bào)時(shí) 蘭州理工大學(xué) 電路和小功率揚(yáng)聲器,定時(shí)鬧叫需要通過(guò)編寫的 Verilog HDL程序?qū)崿F(xiàn)定
6、時(shí)和 在時(shí)間到時(shí)驅(qū)動(dòng)小功率揚(yáng)聲器報(bào)時(shí),校正電路需要有撥碼開關(guān)和其他電路實(shí)現(xiàn)。 對(duì)設(shè)計(jì)要求的理解: 2系統(tǒng)設(shè)計(jì) 2.1 系統(tǒng)要求 通過(guò)FPGA/CPL比現(xiàn)多功能電子鐘的設(shè)計(jì)。電子鐘要實(shí)現(xiàn)計(jì)時(shí)、校時(shí)、定時(shí) 鬧叫等功能。通過(guò)對(duì)設(shè)計(jì)要求的每條的詳細(xì)分析可得出如下結(jié)果 : 1、 要實(shí)現(xiàn)顯示月、日、時(shí)、分、秒,需要十個(gè) LED數(shù)碼管;要在分和 秒之間顯示“:”,可以利用兩個(gè)發(fā)光二極管,也可以選擇含有“:” 的LED數(shù)碼管;要按1次/秒的速度閃爍,則需要1Hz的輸入脈沖 控制,所以需要通過(guò)晶振產(chǎn)生方波,經(jīng)過(guò)分頻產(chǎn)生 1Hz的方波。 2、 要實(shí)現(xiàn)24小時(shí)為一個(gè)計(jì)時(shí)周期,則需要一個(gè) 24進(jìn)制計(jì)時(shí)器
7、控制其 計(jì)數(shù)。 3、 要實(shí)現(xiàn)校正功能,則需要一個(gè)校正電路(含校正開關(guān))和相應(yīng)的校 正程序。 4、 要實(shí)現(xiàn)定時(shí)鬧叫功能,則需要一個(gè)時(shí)鐘脈沖來(lái)控制,使其在設(shè)定的 時(shí)刻報(bào)時(shí)。外接一個(gè)小型揚(yáng)聲器,在設(shè)定時(shí)刻鬧叫,并通過(guò)開關(guān) 消除鬧叫,同時(shí)也需要相應(yīng)的程序控制。 5、 通過(guò)分頻電路實(shí)現(xiàn)整點(diǎn)報(bào)時(shí)所需時(shí)鐘信號(hào),需設(shè)計(jì)相應(yīng)的程序段使 其在59分,59秒時(shí)報(bào)時(shí)。 6、 根性要求設(shè)計(jì)Verilog HDL程序,并在Quartus軟件上進(jìn)行編譯和 仿真,從而根據(jù)資源的需求選擇 CPLD/FPGAT編程邏輯器件。 要實(shí)現(xiàn)系統(tǒng)要求,需要 Verilog HDLS序和Quartus軟件的支持。下面對(duì)
8、其進(jìn)行簡(jiǎn)單介紹: (1)利用Verilog HDL硬件描述語(yǔ)言實(shí)現(xiàn)功能程序。Verilog HDL是廣泛應(yīng) 用的硬件描述語(yǔ)言,可以用在硬件設(shè)計(jì)流程的建模、綜合和模擬等多個(gè)階段。通 過(guò)應(yīng)用Verilog HDL對(duì)多功能電子鐘的設(shè)計(jì),可實(shí)現(xiàn)系統(tǒng)的設(shè)計(jì)要求。 Verilog HDL 硬件描述語(yǔ)是一種實(shí)用性很強(qiáng)的編程語(yǔ)言,可以實(shí)現(xiàn)軟件程序和硬件程序的 結(jié)合,即將所編寫的程序在仿真通過(guò)后利用下載器下載到電路板上, 通過(guò)程序控 制器件的工作。 模塊是Verilog的基本描述單位,用于描述某個(gè)設(shè)計(jì)的功能或結(jié)構(gòu)及其與其 他模塊通信的外部端口。 一個(gè)設(shè)計(jì)的結(jié)構(gòu)可使用開關(guān)級(jí)原語(yǔ)、門級(jí)原語(yǔ)和用戶定 義的原語(yǔ)方
9、式描述;設(shè)計(jì)的數(shù)據(jù)流行為使用連續(xù)賦值語(yǔ)句進(jìn)行描述;時(shí)序行為 使用過(guò)程結(jié)構(gòu)描述。一個(gè)模塊可以在另一個(gè)模塊中使用。 (2)Quartus 是 Alterat 提供的 FPGA/CPLDF發(fā)集成環(huán)境,支持 Verilog HDL 的設(shè)計(jì)流程。具包括模塊化的編輯器,也可以利用第三方的綜合工具,具有仿真 功能。Quartus的設(shè)計(jì)流程為:設(shè)計(jì)輸入,綜合或編譯,適配器件,仿真,下載。 通過(guò)Quartus可實(shí)現(xiàn)對(duì)程序的仿真和下載,從而實(shí)現(xiàn)系統(tǒng)的要求。 2.2 方案設(shè)計(jì) 根據(jù)系統(tǒng)要求,將設(shè)計(jì)程序分為計(jì)時(shí)模塊、整點(diǎn)報(bào)時(shí)模塊、定時(shí)鬧叫模塊、 校正模塊四大模塊,通過(guò)模塊的例化實(shí)現(xiàn)所有功能。所對(duì)應(yīng)的硬件連接可分
10、為集 成芯片、復(fù)位電路、校正電路、晶振電路、響鈴電路、譯碼顯示電路幾個(gè)模塊。 對(duì)可編程邏輯器件的選擇是實(shí)現(xiàn)硬件電路的基礎(chǔ)。 根據(jù)要求本設(shè)計(jì)可選擇芯 片EPM702城者芯片EP2c5T144C&但通過(guò)查11資料可知 EPM7023R有44個(gè)引 腳,可能會(huì)導(dǎo)致資源不足,即引腳不夠用,驅(qū)動(dòng)能力不足,所以選擇 altera公 司的 cyclone II 系列的 EP2C5T144 C8E片。 下面對(duì)芯片做簡(jiǎn)要介紹: ⑴擁有豐富的User IO (用戶IO弓I腳),即144個(gè)IO接口可供使用。開發(fā) 板通過(guò)2.54mmS準(zhǔn)排針,引出了所有的用戶IO弓唧。芯片引腳分為四組(Bank), 每組(每個(gè)B
11、ank)的IO引腳供電是獨(dú)立的,因此可以采用不同的電平標(biāo)準(zhǔn)。 ⑵內(nèi)部需要三個(gè)電壓:5V、3.3V、1.2V,其中3.3V給IO接口供電,1.2V 給內(nèi)核供電。 ⑶含有2個(gè)PLL PLL的作用是產(chǎn)生各種頻率的時(shí)鐘,在 FPG9擁有重要 的地位。 2.3 系統(tǒng)工作原理 通過(guò)晶振產(chǎn)生一個(gè)時(shí)鐘脈沖,成為主時(shí)鐘。在通過(guò)分頻電路輸出所需要的時(shí) 鐘脈沖,即1Hz的計(jì)時(shí)脈沖。 計(jì)時(shí)時(shí),當(dāng)秒計(jì)數(shù)器計(jì)到59時(shí),向分計(jì)時(shí)器進(jìn)1;當(dāng)分鐘計(jì)數(shù)器計(jì)到59,秒計(jì)數(shù)器計(jì)到59時(shí),向小時(shí)計(jì)時(shí)器進(jìn)1;當(dāng)小時(shí)計(jì)時(shí)器計(jì)到23,分鐘計(jì)數(shù)器計(jì) 到59,秒計(jì)數(shù)器計(jì)到59時(shí),向日期計(jì)時(shí)器進(jìn)1;當(dāng)日期計(jì)時(shí)器計(jì)到29,小時(shí)計(jì) 時(shí)器計(jì)
12、到23,分鐘計(jì)數(shù)器計(jì)到59,秒計(jì)數(shù)器計(jì)到59時(shí),向月份計(jì)數(shù)器進(jìn)1。將 所計(jì)時(shí)間通過(guò)LED數(shù)碼管顯示出來(lái)。 定時(shí)鬧叫時(shí),設(shè)置鬧鈴的分鐘和小時(shí),設(shè)置的時(shí)候由轉(zhuǎn)換按鍵控制調(diào)整分鐘 及調(diào)整小時(shí)之間的切換,每按一次調(diào)整鍵,所調(diào)整的計(jì)數(shù)器加 1,分鐘計(jì)數(shù)器計(jì) 滿60就滿0,小時(shí)計(jì)時(shí)器計(jì)滿24就清0。當(dāng)?shù)剿〞r(shí)間時(shí),驅(qū)動(dòng)小功率揚(yáng)聲器工作, 發(fā)出響鈴聲。 整點(diǎn)報(bào)時(shí)的工作原理為當(dāng)秒計(jì)數(shù)器為0,分計(jì)時(shí)器為0時(shí),驅(qū)動(dòng)小功率揚(yáng)聲器 發(fā)出報(bào)時(shí)聲。 校時(shí)為修正日期、月份、小時(shí)和分鐘的時(shí)間以及秒鐘的精確調(diào)整清零。 由轉(zhuǎn) 換按鍵控制調(diào)整分鐘和調(diào)整小時(shí)之間的切換, 每按一下調(diào)整鍵所調(diào)整的計(jì)數(shù)器加 1,分鐘計(jì)數(shù)器滿60
13、清零,小時(shí)計(jì)數(shù)器滿24清零;秒種的精確調(diào)整清零具體為在 正常計(jì)時(shí)的情況下,長(zhǎng)時(shí)間按住轉(zhuǎn)換按鍵,即可使秒鐘清零,進(jìn)行精確調(diào)時(shí)。 秒表工作原理為進(jìn)行手動(dòng)計(jì)時(shí),按一下計(jì)數(shù)按鍵為計(jì)時(shí),再按一次計(jì)數(shù)按鍵 為停止計(jì)時(shí),保存計(jì)數(shù)數(shù)值,依此類推;按一次清零鍵為計(jì)數(shù)清零,停止計(jì)數(shù)。 3.電子鐘功能模塊及仿真 3.1分頻模塊 分頻模塊的程序: timescale 1ns/100Ps module count32 ( asyn_clr_n syn_clr clk en counter ,//input, ,//input, ,//input, ,//input, 門控開關(guān) //output,
14、已止十上矣但耳 升少泊令[口方 同步清零信號(hào) 全局時(shí)鐘信號(hào) 計(jì)數(shù)使能信號(hào),計(jì)數(shù)器的 計(jì)數(shù)器關(guān)閉后,保持?jǐn)?shù)值不變。 計(jì)數(shù)器計(jì)數(shù)值 43 ); ****************************************** */ parameter U_DLY = 1 ;// Unit delay input asyn_clr_n input syn_clr input clk input en output [31:0] counter ;//0-clear counter; ;//1-clear counter; ; ;//1-enabl
15、e; 0-disable. reg [15:0] cnt_high ; // reg [15:0] cnt_low ; // reg cnt_low_max ; //cnt_low assign counter = {cnt_high, cnt_low};//32 計(jì)數(shù)器高16位 計(jì)數(shù)器低16位 達(dá)到最大值的標(biāo)志 位計(jì)數(shù)器由2個(gè)16位計(jì)數(shù)器拼 接而成。 //分段計(jì)數(shù):低16位計(jì)數(shù)器 always @( posedge clk or negedge asyn_clr_n ) if (asyn_clr_n == 1b0) // cnt_low <= 16h0000; //
16、 else if (syn_clr == 1b1) // cnt_low <= #U_DLY 16h0000; else if (en == 1b1) // 井少汨令 刪除時(shí)序邏輯中異步復(fù)位的單位延 時(shí) 同步清零 計(jì)數(shù)器使能 參數(shù)聲明 ******************************************* cnt_low <= #U_DLY cnt_low + 16h0001; else; // 保持 〃低16位計(jì)數(shù)器的進(jìn)位標(biāo)志 always @( posedge clk or negedge asyn_clr_n ) i
17、f (asyn_clr_n == 1b0) // 異步清零,清除進(jìn)位 cnt_low_max <= 1b0; // 刪除時(shí)序邏輯中異步復(fù)位的單位延 時(shí)。 else if (syn_clr == 1b1) // 同步清零,消除進(jìn)位 cnt_low_max <= #U_DLY 1b0; else if (en == 1b1 && cnt_low == 16hfffe) 〃 計(jì)數(shù)器使能,且低 16 位計(jì)滿則產(chǎn)生進(jìn)位。 // 因?yàn)閺倪M(jìn)位產(chǎn)生到cnt_high進(jìn)程 讀到此進(jìn)位需要一個(gè)時(shí)鐘周期,所以計(jì)數(shù)器只計(jì)到16hfffe cnt_low_max <= #U_DLY 1b1; el
18、se // 否則無(wú)進(jìn)位產(chǎn)生 cnt_low_max <= #U_DLY 1b0; //分段計(jì)數(shù):高16位計(jì)數(shù)器 always @( posedge clk or negedge asyn_clr_n ) if (asyn_clr_n == 1b0) // cnt_high <= 16h0000; // else if (syn_clr == 1b1) // cnt_high <= #U_DLY 16h0000; 井少汨令 刪除時(shí)序邏輯中異步復(fù)位的單位延時(shí) 同步清零 else if (en == 1b1 && cnt_low_max == 1b1) // cnt_hi
19、gh <= #U_DLY cnt_high + 16h0001; else; // 保持 計(jì)數(shù)器使能,且低16 位計(jì)數(shù)器已計(jì)滿 endmodule 仿真波形圖: 3.2計(jì)時(shí)模塊 [OJ[OJIO][0J 20. 9 M IS. 9 ns 計(jì)數(shù)模塊仿真程序: timescale 1ns/100Ps module counter( /*******************************************/ //輸入PORT說(shuō)明 /*******************************************/ input wire
20、clk , // 輸入時(shí)鐘 input wire rst_n , // 輸入復(fù)位 input wire counter_clk_pul,// 計(jì)數(shù)時(shí)鐘脈沖 設(shè)定進(jìn)位 input wire set_add , // input wire cin ,// 設(shè)定進(jìn)位 /*******************************************/ //輸出PORT說(shuō)明 /*******************************************/ output wire cout ,// 滿進(jìn)位 output wire [3
21、:0] gewei ,// 輸出個(gè)位 output wire [3:0] shiwei // 輸出十位 ); parameter [6:0] MAX_NUM = 6d59; reg [6:0] current_num ; always @( posedge clk or negedge rst_n) begin if ( rst_n == 1b0) begin current_num[6:0] <= 7h00 ; end else if (set_add == 1b1 && cin == 1b1 && counter_clk_pul 1b1)begin cu
22、rrent_num[6:0] <= current_num[6:0] + 7h03 ; end else if (set_add == 1b1 && cin == 1b1 )begin current_num[6:0] <= current_num[6:0] + 7h02 ; end else if( (set_add == 1b1 || cin == 1b1 ) && counter_clk_pul == 1b1)begin current_num[6:0] <= current_num[6:0] + 7h02 ; end else if( (set_add == 1b1
23、 || cin == 1b1 ) )begin current_num[6:0] <= current_num[6:0] + 7h01 ; end else if (counter_clk_pul == 1b1)begin current_num[6:0] <= current_num[6:0] + 7h01 ; end else if( current_num > MAX_NUM ) begin current_num[6:0] <= current_num[6:0] - MAX_NUM-1 ; end else ; end assign cout = (current
24、_num > MAX_NUM) ;// 只取一個(gè)時(shí)鐘脈沖長(zhǎng)度 assign gewei[3:0] = current_num[6:0]%10 ; assign shiwei[3:0] = (current_num[6:0]/10)%10 ; endmodule 仿真波形圖: csn elk coni ^mrL rsljn xhavat 3.3按鍵消抖模塊 按鍵消抖模塊程序: 表示時(shí)延單位為1ns,時(shí)延精度為100Ps timescale 1ns/100Ps // input wire rst_n ,//input, 已止十上
25、矣但耳 升少泊令1口 p input wire clk ,//input, 全局時(shí)鐘信號(hào) input wire en_cnt ,//input, 計(jì)數(shù)使能信號(hào) 可決定計(jì)數(shù)頻率 input wire signal_in_n ,//input, 輸入信號(hào) output reg signal_out_n //output, 處理后的信號(hào) module delay_filter_glitch_high ( ); /*******************************************/ //參數(shù)聲明 /*******
26、*************************************/ parameter U_DLY = 1 ; //Unit delay parameter CNT_WIDTH = 5b11111 ; // parameter CNT_TH = 5b11111 ; // /******************************************** / // 內(nèi)部信號(hào)中明 計(jì)數(shù)位寬 計(jì)數(shù)門限,可決定延時(shí)時(shí)長(zhǎng) /********************************************/ reg [CNT_WIDTH-1:0] cnt ; //
27、 reg signal_in_n_1dly; reg signal_in_n_2dly; reg signal_in_n_3dly; wire signal_in_edge ; // 計(jì)數(shù)器 指示輸入信號(hào)的上升/下降沿 /******************************************** 行為描述 ******************************************
28、 號(hào)上升/下降沿指示信號(hào) 檢測(cè)輸入信號(hào)有跳變后, 計(jì)數(shù)器就清零 計(jì)數(shù)器沒(méi)計(jì)滿后加1計(jì)數(shù) 否則,保持原來(lái)的數(shù)值 //異步信號(hào)的同步處理 always @ ( posedge clk or negedge rst_n ) begin if ( rst_n == 1b0 ) begin signal_in_n_1dly <= #U_DLY 1b1; signal_in_n_2dly <= #U_DLY 1b1; signal_in_n_3dly <= #U_DLY 1b1; end else begin sign
29、al_in_n_1dly <= #U_DLY signal_in_n; signal_in_n_2dly <= #U_DLY signal_in_n_1dly; signal_in_n_3dly <= #U_DLY signal_in_n_2dly; end end assign signal_in_edge = signal_in_n_3dly A signal_in_n_2dly; // 產(chǎn)生信 always @ ( posedge clk or negedge rst_n ) begin if ( rst_n == 1b0 ) cnt <= #U_DLY 1d0; els
30、e if (signal_in_edge == 1b1) // cnt <= #U_DLY 1d0; else if (en_cnt == 1b1 && cnt != CNT_TH) // cnt <= #U_DLY cnt + 1d1; else; // end always @ ( posedge clk or negedge rst_n ) begin if ( rst_n == 1b0 ) signal_out_n <= #U_DLY 1b1; else if ( cnt == CNT_TH ) signal_out_n <= #U_DLY signal_in_n_3d
31、ly; else; end endmodule 仿真波形圖 3.4定時(shí)模塊 校時(shí)模塊為在任意時(shí)刻可以對(duì)月、日、時(shí)、分、秒進(jìn)行校正。 校時(shí)模塊程序: timescale 1ns/100Ps module counter_ds( /*******************************************/ //輸入PORT說(shuō)明 /*******************************************/ input wire clk ,// 輸入時(shí)鐘 input wire rst_n ,// 輸入復(fù)位 input wire s
32、et_add ,// 設(shè)定進(jìn)位 output wire [3:0] gewei ,// 輸出個(gè)位 output wire [3:0] shiwei // 輸出十位 ); parameter [6:0] MAX_NUM = 6d59; reg [6:0] current_num ; always @( posedge clk or negedge rst_n) begin if ( rst_n == 1b0) begin current_num[6:0] <= 7b0 ; end else if (set_add == 1b1 )begin current_n
33、um[6:0] <= current_num[6:0] + 1b1 ; end else if( current_num > MAX_NUM ) begin current_num[6:0] <= current_num[6:0] - MAX_NUM end else ; end assign gewei[3:0] = current_num[6:0]%10 ; assign shiwei[3:0] = (current_num[6:0]/10)%10 ; endmodule 仿真波形圖 3.5譯碼顯示電路 timescale 1ns/100Ps module di
34、play_8_8led ( input wire clk , // 輸入時(shí)鐘 input wire rst_n , // 輸入復(fù)位 input wire [3:0] dataledl , // 輸入數(shù)字 1 input wire [3:0] dataled2 , // 輸入數(shù)字 2 input wire [3:0] dataled3 ,// 輸入數(shù)字3 input wire [3:0] dataled4 ,// 輸入數(shù)字4 input wire [3:0] dataled5 ,// 輸入數(shù)字5 input wire [3:0] dataled
35、6 ,// 輸入數(shù)字6 input wire [3:0] dataled7 ,// 輸入數(shù)字7 input wire [3:0] dataled8 ,// 輸入數(shù)字8 input wire [3:0] dataled9 , input wire [3:0] dataled10 , input wire [3:0] dataled11 , input wire [3:0] dataled12 , output reg [11:0] sel ,// 輸出8位數(shù)碼管子3-8選擇線 output reg [7:0
36、] out_led // 輸出 8 位數(shù)碼 ); reg [3:0] n_sel ; always @ (posedge clk or negedge rst_n) begin if(rst_n==0) begin n_sel[3:0]<=4b0 ; end else if(n_sel[3:0]==4b1011) begin n_sel[3:0]<=4b0 ; end else begin n_sel[3:0]<=n_sel[3:0]+4b1; end end always @ (posedge clk) begin case (n_sel[3:0]) 4b0000: sel[
37、11:0]=12b1111_1111_1110; 4b0001: sel[11:0]=12b1111_1111_1101; 4b0010: sel[11:0]=12b1111_1111_1011; 4b0011: sel[11:0]=12b1111_1111_0111; 4b0100: sel[11:0]=12b1111_1110_1111; 4b0101: sel[11:0]=12b1111_1101_1111; 4b0110: sel[11:0]=12b1111_1011_1111; 4b0111: sel[11:0]=12b1111_0111_1111; 4b1000:
38、sel[11:0]=12b1110_1111_1111; 4b1001: sel[11:0]=12b1101_1111_1111; 4b1010: sel[11:0]=12b1011_1111_1111; 4b1011: sel[11:0]=12b0111_1111_1111; endcase end reg [3:0] disp_temp ; always @ (*) begin case( sel[11:0]) 12b1111_1111_1110: disp_temp [3:0] = dataled1 [3:0]; 12b1111_1111_1101: disp_tem
39、p [3:0] = dataled2 [3:0]; 12b1111_1111_1011: disp_temp [3:0] = dataled3 [3:0]; 12b1111_1111_0111: disp_temp [3:0] = dataled4 [3:0]; 12b1111_1110_1111: disp_temp [3:0] = dataled5 [3:0]; 12b1111_1101_1111: disp_temp [3:0] = dataled6 [3:0]; 12b1111_1011_1111: disp_temp [3:0] = dataled7 [3:0]; 12b
40、1111_0111_1111: disp_temp [3:0] = dataled8 [3:0]; 12b1110_1111_1111: disp_temp [3:0] = dataled9 [3:0]; 12b1101_1111_1111: disp_temp [3:0] = dataled10[3:0]; 12b1011_1111_1111: disp_temp [3:0] = dataled11[3:0]; 12b0111_1111_1111: disp_temp [3:0] = dataled12[3:0]; endcase end always @ (*) begin
41、// 顯示轉(zhuǎn)換 case( disp_temp ) 4b0000: out_led [7:0]=8b1100_0000 ; //0 4b0001: out_led [7:0]=8b1111_1001 ; //1 4b0010: out_led [7:0]=8b1010_0100 ; //2 4b0011: out_led [7:0]=8b1011_0000 ; //3 4‘b0100: out_led [7:0]=8b1001_1001 //4 4b0101: out_led [7:0]=8b1001_0010 //5 4b0110: out_led [7:0]
42、=8b1000_0010 //6 4b0111: out_led [7:0]=8b1111_1000 //7 4b1000: out_led [7:0]=8b1000_0000 //8 4b1001: out_led [7:0]=8b1001_0000 //9 4b1010: out_led [7:0]=8b1011_1111 //- 4b1011: out_led [7:0]=8b1111_1111 // 全滅 default: out_led [7:0]=8b1111_1111 ; // 全滅
43、 endcase end endmodule :15」衛(wèi)頊:值 LL5「EJ 迫匚WJ㈡司 H u b.t Ke 0機(jī) 曰7L】?d 立小 田 甲7良片 屏a T『E] 口蚓 砸森摒[L面 仿真波形圖 ■ TQ 3I ? T? NT% ? 74 c>ai 3f 083 T 51J A □ itl A [加」 -..I] 槨 - ...0) A. 口 4]| a - ..6J k - .T] a - ..6J k 5] a -..t]l k -..ail a - …2] k - ..|] k - ...0) k 3.6模塊例化 t
44、imescale 1ns/100Ps module day_timer( input wire pin_clk_in ,// 輸入時(shí)鐘 input wire pin_rst_n ,// 輸入復(fù)位 input wire pin_s_set ,// 秒設(shè)定 input wire pin m set ,// 分設(shè)定 input wire pin_h_set ,// input wire pin_r_set , input wire pin_y_set , input wire pin_dsorsz_ _set
45、, input wire pin_fm_set , output wire [11:0] pin_sel ,// 分設(shè)定 output wire [7:0 ] pin_disp_led , // output wire pin_fm 輸出8位數(shù)碼管子3-8選 擇線 輸出8位數(shù)碼管子 ); parameter U_DLY = 1; /*******************************************************************/ // Counter /*******************************
46、************************************/ wire [31:0] counter_32 ; count32 u_counter_32 ( .asyn_clr_n ( pin_rst_n ) , //input, .syn_clr ( !pin_rst_n ) , //input, .clk ( pin_clk_in ) , //input, .en ( 1b1 ) , //input, 已止十上矣但耳 升少泊令[口方 同步清零信號(hào) 全局時(shí)鐘信號(hào) 計(jì)數(shù)使能信號(hào),計(jì) 數(shù)器的門控開關(guān),計(jì)數(shù)器關(guān)閉后,保持?jǐn)?shù)值不變。 .counter (count
47、er_32 ) //output, 計(jì)數(shù)器計(jì)數(shù)值 /*******************************************************************/ // Counter 1s /*******************************************************************/ reg cpld_1hz_
48、pul_1dly ; reg cpld_1hz_pul_2dly ; reg cpld_1hz_pul ; always @( posedge pin_clk_in or negedge pin_rst_n) begin if (pin_rst_n == 1b0) begin cpld_1hz_pul_1dly <= #U_DLY 1b0 ; cpld_1hz_pul_2dly <= #U_DLY 1b0 ; cpld_1hz_pul <= #U_DLY 1b0 ; end else begin cpld_1hz_pul_1dly <= #U_DLY counter_32
49、[21] ; // 33M 時(shí)鐘的時(shí) 鐘輸出為1.11 s cpld_1hz_pul_2dly <= #U_DLY cpld_1hz_pul_1dly; cpld_1hz_pul<=#U_DLY(~cpld_1hz_pul_2dly)&cpld_1hz_pul_1dly; end end /*******************************************/ //時(shí)鐘的月、日、時(shí)、分、秒設(shè)定按鍵去抖動(dòng)模塊 //時(shí)鐘或定時(shí)模式選擇按鍵去抖模塊 /*******************************************/ wire s_set_f ; w
50、ire m_set_f ; wire h_set_f ; wire r_set_f ; wire y_set_f ; wire dsorsz_set_f ; wire dsok_set_f ; delay_filter_glitch_high delay_filter_glitch_high_u1( .rst_n ( pin_rst_n ), //input, 異步清零信號(hào) .clk ( pin_clk_in), //input, 全局時(shí)鐘信號(hào) .en_cnt ( 1b1 ),//input, 計(jì)數(shù)使能信號(hào) 可決定計(jì)數(shù)頻率 .signal_in_n ( pin_s_s
51、et ), //input, 輸入信號(hào) .signal_out_n ( s_set_f ) //output, 處理后的信號(hào) ); delay_filter_glitch_high delay_filter_glitch_high_u2( .rst_n ( pin_rst_n ), //input, .clk ( pin_clk_in), //input, .en_cnt ( 1b1 ), //input, .signal_in_n ( pin_m_set ), //input, .signal_out_n ( m_set_f ) //output, ); delay_f
52、ilter_glitch_high delay_filter_glitch_high_u3( .rst_n ( pin_rst_n ), //input, .clk ( pin_clk_in), //input, .en_cnt ( 1b1 ), //input, .signal_in_n ( pin_h_set ), //input, .signal_out_n ( h_set_f ) //output, ); 已止十上矣但耳 升少泊令[口方 全局時(shí)鐘信號(hào) 計(jì)數(shù)使能信號(hào) 可決定計(jì)數(shù)頻率 輸入信號(hào) 處理后的信號(hào) 已止十上矣但耳 升少泊令[口方 全局時(shí)鐘信號(hào) 計(jì)
53、數(shù)使能信號(hào) 可決定計(jì)數(shù)頻率 輸入信號(hào) 處理后的信號(hào) delay_filter_glitch_high delay_filter_glitch_high_u4( .rst_n ( pin_rst_n ), //input, 異步清零信號(hào) .clk ( pin_clk_in), //input, 全局時(shí)鐘信號(hào) .en_cnt ( 1b1 ),//input, 計(jì)數(shù)使能信號(hào) 可決定計(jì)數(shù)頻率 .signal_in_n ( pin_r_set ), //input, 輸入信號(hào) .signal_out_n ( r_set_f ) //output, 處理后的信號(hào) ); dela
54、y_filter_glitch_high delay_filter_glitch_high_u5( .rst_n ( pin_rst_n ), //input, 異步清零信號(hào) .clk ( pin_clk_in), //input, 全局時(shí)鐘信號(hào) .en_cnt ( 1b1 ), //input, 計(jì)數(shù)使能信號(hào) 可決定計(jì)數(shù)頻率 .signal_in_n ( pin_y_set ), //input, 輸入信號(hào) .signal_out_n ( y_set_f ) //output, 處理后的信號(hào) ); delay_filter_glitch_high 井少汨令 信號(hào) 全局時(shí)
55、鐘 信號(hào) 計(jì)數(shù)使能 信號(hào),可決定計(jì)數(shù)頻率 輸入信號(hào) 處理后的 信號(hào) delay_filter_glitch_high_u6( .rst_n ( pin_rst_n ), //input, .clk ( pin_clk_in ), //input, .en_cnt ( 1b1 ), //input, .signal_in_n ( pin_dsorsz_set ), //input, .signal_out_n ( dsorsz_set_f ) //output, ); delay_filter_glitch_high delay_filter_glitch_high_u7
56、( .rst_n ( pin_rst_n ), //input, 異步清零信號(hào) .clk ( pin_clk_in), //input, 全局時(shí)鐘信號(hào) .en_cnt ( 1b1 ),//input, 計(jì)數(shù)使能信號(hào) 可決定計(jì)數(shù)頻率 .signal_in_n ( pin_fm_set), //input, 輸入信號(hào) .signal_out_n ( dsok_set_f) //output, 處理后的信號(hào) ); /*******************************************/ //產(chǎn)生秒設(shè)定信號(hào)下降沿指示信號(hào) /**********************
57、*********************/ reg s_set_f_1dly; reg s_set_f_2dly; reg s_set_f_3dly; wire s_set_f_neg ; // 指示輸入信號(hào)的下降沿 always @ ( posedge pin_clk_in or negedge pin_rst_n ) begin if ( pin_rst_n == 1b0) begin s_set_f_1dly <= #U_DLY 1b1; s_set_f_2dly <= #U_DLY 1b1; s_set_f_3dly <= #U_DLY 1b1; end el
58、se begin s_set_f_1dly <= #U_DLY s_set_f; s_set_f_2dly <= #U_DLY s_set_f_1dly; s_set_f_3dly <= #U_DLY s_set_f_2dly; end end assign s_set_f_neg = s_set_f_3dly && !s_set_f_2dly; /*******************************************/ //產(chǎn)生分設(shè)定信號(hào)下降沿指示信號(hào) /*******************************************/ reg m_s
59、et_f_1dly; reg m_set_f_2dly; reg m_set_f_3dly; wire m_set_f_neg ; // 指示輸入信號(hào)的下降沿 always @ ( posedge pin_clk_in or negedge pin_rst_n ) begin if ( pin_rst_n == 1b0) begin m_set_f_1dly <= #U_DLY 1b1; m_set_f_2dly <= #U_DLY 1b1; m_set_f_3dly <= #U_DLY 1b1; end else begin m_set_f_1dly <= #U_
60、DLY m_set_f; m_set_f_2dly <= #U_DLY m_set_f_1dly; m_set_f_3dly <= #U_DLY m_set_f_2dly; end end assign m_set_f_neg = m_set_f_3dly && !m_set_f_2dly; /*******************************************/ //產(chǎn)生時(shí)設(shè)定信號(hào)下降沿指示信號(hào) /*******************************************/ reg h_set_f_1dly; reg h_set_f_2dly;
61、 reg h_set_f_3dly; wire h_set_f_neg ; // 指示輸入信號(hào)的下降沿 always @ ( posedge pin_clk_in or negedge pin_rst_n ) begin if ( pin_rst_n == 1b0 ) begin h_set_f_1dly <= #U_DLY 1b1; h_set_f_2dly <= #U_DLY 1b1; h_set_f_3dly <= #U_DLY 1b1; end else begin h_set_f_1dly <= #U_DLY h_set_f; h_set_f_2dly <=
62、 #U_DLY h_set_f_1dly; h_set_f_3dly <= #U_DLY h_set_f_2dly; end end assign h_set_f_neg = h_set_f_3dly && !h_set_f_2dly; /*******************************************/ //產(chǎn)生日設(shè)定信號(hào)下降沿指示信號(hào) /*******************************************/ reg r_set_f_1dly; reg reg r_set_f_2dly; r_set_f_3dly; wire r_set
63、_f_neg ; // 指示輸入信號(hào)的下降沿 always @ ( posedge pin_clk_in or negedge pin_rst_n ) begin if ( pin_rst_n == 1b0 ) begin r_set_f_1dly <= #U_DLY 1b1; r_set_f_2dly <= #U_DLY 1b1; r_set_f_3dly <= #U_DLY 1b1; end else begin r_set_f_1dly <= #U_DLY r_set_f; r_set_f_2dly <= #U_DLY r_set_f_1dly; r_set_f_3
64、dly <= #U_DLY r_set_f_2dly; end end assign r_set_f_neg = r_set_f_3dly && !r_set_f_2dly; /*******************************************/ //產(chǎn)生月設(shè)定信號(hào)下降沿指示信號(hào) /*******************************************/ reg y_set_f_1dly; reg y_set_f_2dly; reg y_set_f_3dly; wire y_set_f_neg ; // 指示輸入信號(hào)的下降沿 always @
65、 ( posedge pin_clk_in or negedge pin_rst_n ) begin if ( pin_rst_n == 1b0 ) begin y_set_f_1dly <= #U_DLY 1b1; y_set_f_2dly <= #U_DLY 1b1; y_set_f_3dly <= #U_DLY 1b1; end else begin y_set_f_1dly <= #U_DLY y_set_f; y_set_f_2dly <= #U_DLY y_set_f_1dly; y_set_f_3dly <= #U_DLY y_set_f_2dly; end
66、 end assign y_set_f_neg = y_set_f_3dly && !y_set_f_1dly; /*******************************************/ //定時(shí)或時(shí)鐘選擇按鍵取下降沿 /*******************************************/ reg dsorsz_set_f_1dly; reg dsorsz_set_f_2dly; reg dsorsz_set_f_3dly; wire dsorsz_set_f_wire; // 指示輸入信號(hào)的下降沿 reg dsorsz_set_f_neg ; always @ ( posedge pin_clk_i
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 火力發(fā)電廠各設(shè)備的主要作用大全
- 3.高壓電工考試判斷練習(xí)題含答案
- 企業(yè)電氣防爆知識(shí)
- 13 低壓電工電工作業(yè)模擬考試題庫(kù)試卷含答案
- 電氣設(shè)備維修的十項(xiàng)原則
- 2.電氣電纜與直流模擬考試復(fù)習(xí)題含答案
- 電氣節(jié)能措施總結(jié)
- 2.電氣電機(jī)(一)模擬考試復(fù)習(xí)題含答案
- 接地電阻測(cè)量原理與測(cè)量方法
- 3.高壓電工作業(yè)模擬考試題庫(kù)試卷含答案
- 礦山維修電工安全技術(shù)操作規(guī)程
- 電工基礎(chǔ)口訣總結(jié)
- 3.某電廠值長(zhǎng)面試題含答案解析
- 電工基礎(chǔ)知識(shí)順口溜
- 配電系統(tǒng)詳解