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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6532|回復: 5
收起左側

QuartusII設計的數(shù)字日歷 附verilogHDL源程序

  [復制鏈接]
ID:329016 發(fā)表于 2020-11-4 20:39 | 顯示全部樓層 |閱讀模式
設計并制作一臺數(shù)字日歷。
1.1.2 性能指標要求
① 用EDA的I/O設備和PLD芯片實現(xiàn)數(shù)字日歷的設計。
② 數(shù)字日歷能夠顯示年、月、日、時、分和秒。
③ 用EDA上的8只八段數(shù)碼管分兩屏分別顯示年、月、日和時、分、秒,即在一定時間段內(nèi)顯示年、月、日(如20080101),然后在另一時間段內(nèi)顯示時、分、秒(如00123625),兩個時間段能自動倒換。
④ 數(shù)字日歷具有復位和校準年、月、日、時、分、秒的按鈕,但校年和校時同用一個按鈕,即在顯示年、月、日時用此按鈕校年,在顯示時、分、秒時則用此按鈕校時,依此類推。
1.2 設計思路及設計框圖
1.2.1設計思路
              用verilogHDL語言該設計中總體包括顯示部分、計時部分、控制部分、校時部分、年月日部分以及分頻功能再加上自己的創(chuàng)新。然后調(diào)試出來,下載到箱驗證。
數(shù)字日歷由6個模塊組成,分別有計數(shù)器模塊(jsq),年月日模塊(wnl2018),控制
模塊(control),校時選擇模塊(mux_4)和顯示選擇模塊(mux_16)還有奇數(shù)月份報時模塊(led),分頻模塊(fenping);奇月報時模塊為創(chuàng)新模塊,它當在月份為奇數(shù)的時候燈光全亮,偶數(shù)的時候全滅。
1.2.2總體設計框圖
2  各個模塊程序的設計
1.1 校時選擇模塊
當k=0時,開關j1,j2,j3校秒時分然后將信號分別送到jsq模塊的jm(校秒)、jf(校分)、js(校時)。當k=1時,開關j1,j2,j3校年月日然后將信號分別送到wnl2018模塊的jr(校日)、jy(校月)、jn(校年)。
1.2 顯示選擇模塊
當k=0時,把jsq送來的時分秒的狀態(tài)信號送到數(shù)碼管顯示。當k=1時,把wnl2018送來的年月日的狀態(tài)信號送到數(shù)碼管顯示。
1.3 計數(shù)器模塊
clrn是異步清除輸入端,低電平有效;clk是時鐘輸入端,上升沿有效;jm、jf和js分別是校秒、校分、校時輸入端;qm[7..0]、qf[7..0]、qs[7..0]分別是年、月、日的輸出端;cout是進位。
1.4 控制模塊
clk是1秒時鐘輸入端,k1和k2是控制輸入端,當k1k2=00或11時是自動顯示模式,控制數(shù)碼顯示器用8秒鐘時間顯示年、月、日,另外8秒時鐘時間顯示時、分、秒;當k1k2=01時,僅顯示年、月、日,同時用j1,j2,和j3校秒、校分、校時;當k1k2=10時,僅顯示年、月、日,同時用j1、j2和j3校日、校月和校年;k是控制輸出端。
1.5 分頻器模塊
使用了一個20M分頻的電路,用于萬年歷的計時自動切換的顯示模式。
1.6 Led模塊
    當月數(shù)為奇數(shù)是led燈全亮,偶數(shù)是全滅。

1.7 年月日模塊

clrn是異步清除輸入端,低電平有效;clk是時鐘輸入端,上升沿有效;jn、jy和jr分別是校年、校月、校日輸入端;qn[15..0]、qy[7..0]、qr[7..0]分別是年、月、日的輸出端。
3  調(diào)試過程
首先,新建一個工程,把編寫的程序模塊放入進去,再把六十計數(shù)器和二十四計數(shù)器的分別生成原件符號,然后進行原理圖編輯,再連接好24小時計數(shù)器的設計同時生成原件符號。最后把各元器件組合起來。編譯,仿真,鎖定引腳,下載無誤后再調(diào)試看看能不能實現(xiàn)任務里面要求的功能。
4  功能測試
4.1 測試儀器與設備
              Quartus II9.0 和EDA實驗箱
4.2 性能指標測試
把程序下載后試驗箱上能夠正確實現(xiàn)年、月、日和時、分、秒的顯示和切換。也能通過調(diào)節(jié)K1和K2來調(diào)節(jié)年月日和日期的切換,新加的led燈也能實現(xiàn)奇數(shù)全亮偶數(shù)全滅的效果。

雖然花了很多時間去做,不過我不僅學會如何做萬年歷,而且更熟練的運用QuartusII9.0軟件,對EDA技術有更深入的認識。在做完基本要求之后還創(chuàng)新了一個功能。雖然我創(chuàng)新的思路很簡單,但是實際操作中還是遇到了很多困難,比如說自己編寫的程序無法實現(xiàn)預期的要求。然后我就去百度和結合自己的程序繼續(xù)編寫代碼,有時實在寫不出來,我就跑去問老師。在這次中學到了很多很多東西,也增加了自己的思考能力和動手能力。從一開始開題選題,然后再著手設計框圖,再到網(wǎng)上查閱相關資料,確定電路圖到最終制作成型,每一步都有自己努力的付出。剛開始我做的并不成功,不能顯示萬年歷的結果。但是我相信沒有人是一下子就可以做出來的,在成功之前的付出往往是巨大的。于是我對編寫的程序進行了認真檢查和反復更改,終于我成功的實現(xiàn)了所需的全部功能。這次使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論
附錄1:仿真波形圖(部分模塊)
Wnl2018模塊仿真波形圖

control模塊仿真波形圖

分頻器模塊
module fenping(clk,clk_HZ);
input clk;
output reg clk_HZ;
reg[24:0] counter;
always @(posedge clk)
begin
              counter = counter + 1;
              if(counter==5000000) counter = 'b0;
              else if(counter<=2500000) clk_HZ = 'b0;
              else clk_HZ = 'b1;
end
Endmodule
控制模塊
module control(clk,k1,k2,k);
input clk,k1,k2;
output reg k;
reg [3:0] qc;
reg rc;
always @(posedge clk)
              begin qc=qc+1;
              if(qc<8) rc = 0;
              else rc = 1;
              case ({k1,k2})
              0:k = rc;
              1:k = 0;
              2:k = 1;
              3:k = rc;
              endcase
end
endmodule
校時選擇模塊
module mux_4(k,jm,jf,js,jr,jy,jn,j1,j2,j3);  
              input k,j1,j2,j3;
              output reg jm,jf,js,jr,jy,jn;
              always
              begin
                            if(k==0) {jm,jf,js}={j1,j2,j3};
                            else {jr,jy,jn} = {j1,j2,j3};
              end                                         
                            endmodule
顯示選擇模塊
module mux_16(k,qm,qf,qs,qr,qy,qn,q);
input k;
input[7:0] qm,qf,qs,qr,qy;
input[15:0] qn;
output reg[31:0] q;
always
              begin
              if(k==0) begin
              q[31:24] = 0;
              q[23:0] = {qs,qf,qm}; end
              else q={qn,qy,qr};
end
endmodule
年月日模塊
module wnl2018(clrn,clk,jn,jy,jr,qn,qy,qr);
input clrn,clk,jn,jy,jr;
output [15:0] qn;
output [7:0] qy,qr;
reg [15:0] qn;
reg[7:0] qy,qr;
reg clkn,clky;
reg [7:0] date;
reg clkn1,clkn2,clkn3;
initial begin clkn1 = 1;clkn2 = 1;clkn3 = 1;end//初始化年脈沖
initial begin qn = 'h2000;qy = 1;qr = 1;end//初始化年,月,日時間
always @(posedge (clk^jr) or negedge clrn)//日計數(shù)模塊
begin
              if(~clrn) qr = 1;
              else begin
                            if(qr==date) qr = 1;
                            else qr=qr+1;
                            if(qr[3:0] == 'ha) begin
                                          qr[3:0] = 0;qr[7:4] = qr[7:4] + 1;end
                                          if(qr==date) clky = 1;
                                          else clky = 0;end
                                          end            
always @(posedge clky^jy or negedge clrn)//月計數(shù)模塊
begin
              if(~clrn) qy = 1;
              else begin
                            if(qy=='h12) qy = 1;
                            else qy=qy+1;
                            if(qy[3:0] == 'ha) begin
                                          qy[3:0] = 0;qy[7:4] = qy[7:4] + 1;end
                                          if(qy=='h12) clkn = 1;
                                          else clkn = 0;end
                                          end                                         
                                          always
                                                        begin
                                                        case(qy)
                                          'h01: date = 'h31;
                                          'h02: begin
                                                        if((qn/4==0)&(qn/100!=0)|(qn/400==0)) date = 'h29;
                                                        else date = 'h28;end
                                                        'h03: date = 'h31;
                                                        'h04: date = 'h30;
                                                        'h05: date = 'h31;
                                                        'h06: date = 'h30;
                                                        'h07: date = 'h31;
                                                        'h08: date = 'h31;
                                                        'h09: date = 'h30;
                                                        'h10: date = 'h31;
                                                        'h11: date = 'h30;
                                                        'h12: date = 'h31;
                                                        default: date = 'h30;
                                                        endcase
                                          end
                                          //年計數(shù)模塊
                                          always @(posedge (clkn^jn) or negedge clrn)
                                                        begin
                                                                      if(~clrn) qn[3:0] = 0;
                                                                      else begin if(qn[3:0]==9) qn[3:0] = 0;
                                                                                    else qn[3:0] = qn[3:0] + 1;
                                                                                    if(qn[3:0] == 9) clkn1 = 0;
                                                                                    else clkn1 = 1;end
                                                                      end
                                                        always @(posedge clkn1 or negedge clrn)
                                                                      begin
                                                                                    if(~clrn) qn[7:4] = 0;
                                                                                    else begin if(qn[7:4]==9) qn[7:4] = 0;
                                                                                                  else qn[7:4] = qn[7:4] + 1;
                                                                                                  if(qn[7:4]==9) clkn2 = 0;
                                                                                                  else clkn2 = 1;end
                                                                                                  end
                                                        always @(posedge clkn2 or negedge clrn)
                                                                      begin
                                                                                    if(~clrn) qn[11:8] = 0;
                                                                                    else begin if(qn[11:8] == 9) qn[11:8] = 0;
                                                                                    else qn[11:8] = qn[11:8] + 1;
                                                                                    if(qn[7:4] == 9) clkn3 = 0;
                                                                                    else clkn3 = 1;end
                                                                                    end
                                                        always @(posedge clkn3 or negedge clrn)
                                                                      begin
                                                                                    if(~clrn) qn[15:12] = 2;
                                                                                                  else if(qn[15:12]==9) qn[15:12] = 0;
                                                                                                                else qn[15:12] = qn[15:12] + 1;
                                          end
endmodule
Led燈模塊
module led(months,qledout);
input [7:0]months;
output reg [11:0] qledout;
always
begin
              if(months%2)
              begin
                            qledout = 'b111111111111;            
              end
              else qledout = 'b000000000000;            
end
endmodule
六十進制計數(shù)器模塊
module cnt60(clk,clrn,j,q,cout);
input clk,clrn,j;
output reg[7:0] q;
output reg cout;
always @(posedge clk^j or negedge clrn)
begin
              if(~clrn) q = 0;
              else begin
                            if(q=='h59) q= 0;
                            else q=q+1;
                            if(q[3:0]=='ha) begin
                            q[3:0] = 0; q[7:4]=q[7:4] + 1;end
                            if(q=='h59) cout = 1;
                            else cout = 0; end
                            end
              endmodule
二十四進制計數(shù)器模塊
module cnt24(clk,clrn,j,q,cout);
input clk,clrn,j;
output reg [7:0] q;
output reg cout;
always @(posedge clk^j or negedge clrn)
begin
if(~clrn) q = 0;
else begin
              if(q=='h23) q= 0;
              else q = q+1;
              if(q[3:0] == 'ha) begin
              q[3:0] = 0;q[7:4] = q[7:4] + 1;end
              if(q == 'h23) cout=1;
              else cout = 0;end
end
Endmodule
51hei.png
全部資料51hei下載地址:
數(shù)字日歷.zip (1.21 MB, 下載次數(shù): 92)
數(shù)字日歷.doc (202 KB, 下載次數(shù): 44)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:827716 發(fā)表于 2020-12-2 23:44 來自手機 | 顯示全部樓層
看不懂仿真的時序圖
回復

使用道具 舉報

ID:921360 發(fā)表于 2021-5-17 23:46 來自手機 | 顯示全部樓層
圖上的管腳用的是什么芯片啊?
回復

使用道具 舉報

ID:985182 發(fā)表于 2021-11-27 21:08 | 顯示全部樓層
請問樓主可以分享一下文件嗎?
回復

使用道具 舉報

ID:57657 發(fā)表于 2021-12-17 13:21 | 顯示全部樓層
gg0914 發(fā)表于 2021-5-17 23:46
圖上的管腳用的是什么芯片啊?

Verilog HDL是一種用來設計芯片的語言
回復

使用道具 舉報

ID:808093 發(fā)表于 2022-11-27 15:00 | 顯示全部樓層
兄弟,用的什么芯片
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品伦理一区二区三区 | 久久久久久综合 | 九九综合 | 国产激情在线 | 国产精品国产三级国产aⅴ原创 | 中文字幕97 | 午夜久久久久久久久久一区二区 | 中文在线播放 | 久久久久久久av | 精品视频在线观看 | www.久久久久久久久 | 国产视频一二三区 | 免费观看黄色片视频 | www.887色视频免费 | 久草成人 | 华丽的挑战在线观看 | 国产精品免费一区二区三区四区 | aa级毛片毛片免费观看久 | 久久久久久网站 | 最新国产在线 | 亚洲欧美激情国产综合久久久 | 久久97精品 | 日中文字幕在线 | 蜜桃精品噜噜噜成人av | 日本a∨视频 | 日韩午夜在线观看 | 午夜影院中文字幕 | 日韩成人在线免费观看 | 国产成人黄色 | 欧美精品免费观看二区 | 中文字幕第九页 | 日韩中文字幕2019 | 一级毛片免费完整视频 | 欧美日韩高清 | av 一区二区三区 | 粉嫩高清一区二区三区 | 日韩精品视频在线 | 欧美在线免费 | 久优草| 一本大道久久a久久精二百 欧洲一区二区三区 | 欧美在线激情 |