日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Verilog】基于Nexys4DDR开发板实现数字钟

發布時間:2025/4/5 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Verilog】基于Nexys4DDR开发板实现数字钟 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
功能:

基于Nexys4DDR開發板實現的數字鐘,六位數碼管顯示時分秒,可切換24時制/12時制,有整點報時功能(led燈閃爍)。

?

Verilog代碼:
`timescale 1ns / 1ps//數字鐘,輸入100M時鐘信號,控制數字顯示器通過高頻掃描來顯示當前時間 module digital_clock(clk_100M, select, y, h, min, sh, led1, led2);input clk_100M;input h, min, sh;output led1, led2;output[7:0] y;output[7:0] select;reg led1;wire led2;reg[16:0] count;reg[7:0] select, y;wire clk_1hz, clk_1khz, clk_100M;wire[3:0] s0, s1, m0, m1, h0, h1;//變量說明://clk_100M是100M的時鐘信號select是控制數碼管亮暗的使能端,y是七段譯碼器的輸出端//led2是正點報時燈//count用于記錄時鐘走過的秒數,clk_1hz是分頻后1hz的時鐘信號//s0~h1記錄秒、分、時的個十位//h、min分別為分鐘和小時校時,sh==0時為24時制,sh==1時為12時制,led1是上下午指示燈//分頻器獲得1hz和1khz時鐘信號,輸入輸出必須為wire型frequency_divider fred(clk_1hz, clk_1khz, clk_100M);//計時模塊,每24*60*60秒為一輪initial count = 0;always@(posedge clk_1hz)begincase({h,min})2'b01: if(sh==0 && count < 17'd86341) count <= count + 6'd60;//24小時制的分鐘校時else if(sh==1 && count < 16'd43141) count <= count + 6'd60;//12小時制的分鐘校時else count <= 0;2'b10: if(sh==0 && count < 17'd82800) count <= count + 12'd3600;//24小時制的小時校時else if(sh==0 && count >= 17'd82800) count <= 0;//24小時制清零else if(sh==1 && count < 16'd43200) count <= count + 12'd3600;//12小時制的小時校時else count <= 12'd3600;//12小時制清零2'b00:if(sh==0 && count < 17'd86399) count <= count + 1;else if(sh==0 && count >= 17'd86399) count <= 0;else if(sh==1 && count < 16'd46799) count <= count + 1;else count <= 3600;2'b11: count <= count;endcaseend//獲得當前時間的時分秒各位數time_count t(count, s0, s1, m0, m1, h0, h1);//12小時制的上下午指示燈,上午滅,下午亮initial led1 = 0;always@(h1) if(sh==1 && {h1,h0}==1) led1 <= ~led1;always@(posedge sh)if(count > 16'd43200)begincount <= count - 16'd43200;led1 <= ~led1;end//正點報時showtime show(clk_1hz, count, led2);//獲取當前時間的時分秒各位數的七段譯碼值wire[7:0] y0, y1, y2, y3, y4, y5;decoder4_8 d1(s0, y0);decoder4_8 d2(s1, y1);decoder4_8 d3(m0, y2);decoder4_8 d4(m1, y3);decoder4_8 d5(h0, y4);decoder4_8 d6(h1, y5);//數碼管高頻顯示當前小時、分鐘和秒reg[2:0] flag;//flag相當于模6計數器,對應時分秒的六位數initialbegin flag = 0;y = 0;select = 0;endalways@(posedge clk_1khz) flag = (flag+1)%6;always@(flag)beginif(flag == 3'd0)//顯示秒的個位beginselect <= 8'b1111_1110;y <= y0;endif(flag == 3'd1)//顯示秒的十位beginselect <= 8'b1111_1101;y <= y1;endif(flag == 3'd2)//顯示分鐘的個位beginselect <= 8'b1111_1011;y <= y2;endif(flag == 3'd3)//顯示分鐘的十位beginselect <= 8'b1111_0111;y <= y3;endif(flag == 3'd4)//顯示小時的個位beginselect <= 8'b1110_1111;y <= y4;endif(flag == 3'd5)//顯示小時的十位beginselect <= 8'b1101_1111;y <= y5;endend endmodule//分頻器 module frequency_divider(clk_1hz, clk_1khz, clk_100M);input clk_100M;output clk_1hz, clk_1khz;reg[16:0] count1;reg[9:0] count2;reg clk_1khz, clk_1hz;//變量說明://輸入clk_100M為100M的時鐘信號//count1和count2是分頻器計的數變量,clk_1khz和clk_1hz是分頻器的輸出//中間變量必須在源程序中初始化!!!initial begincount1 = 0;count2 = 0;clk_1khz = 0;clk_1hz = 0;end//100M 100000分頻得到1khzalways@(posedge clk_100M)beginif(count1 == 17'd49999)beginclk_1khz <= ~clk_1khz;count1 <= 0;endelse count1 <= count1 + 1;end//1khz 1000分頻得到1hzalways@(posedge clk_1khz)beginif(count2 == 10'd499)beginclk_1hz <= ~clk_1hz;count2 <= 0;endelse count2 <= count2 + 1;end endmodule //七段譯碼器 module decoder4_8(x, y);input[3:0] x;output[7:0] y;reg[7:0] y;always@(x)case(x)4'd0: y <= 8'h03;//數碼管顯示04'd1: y <= 8'h9f;//數碼管顯示14'd2: y <= 8'h25;//數碼管顯示24'd3: y <= 8'h0d;//數碼管顯示34'd4: y <= 8'h99;//數碼管顯示44'd5: y <= 8'h49;//數碼管顯示54'd6: y <= 8'h41;//數碼管顯示64'd7: y <= 8'h1f;//數碼管顯示74'd8: y <= 8'h01;//數碼管顯示84'd9: y <= 8'h09;//數碼管顯示9endcase endmodule //時分秒計算器 module time_count(count, s0, s1, m0, m1, h0, h1);input[16:0] count;output[3:0] s0, s1, m0, m1, h0, h1;reg[3:0] s0, s1, m0, m1, h0, h1;//分別對應秒、分、時的個位、十位initial begins0 = 0; s1 = 0; m0 = 0; m1 = 0; h0 = 0; h1 = 0;endalways@(count)begins0 <= (count%60)%10;//秒的個位s1 <= (count%60-((count%60)%10))/10;//秒的十位m0 <= (((count-count%60)/60)%60)%10;//分鐘的個位m1 <= ((((count-count%60)/60)-((count-count%60)/60)%10)%60)/10;//分鐘的十位h0 <= ((count-count%3600)/3600)%10;//小時的個位h1 <= (((count-count%3600)/3600)-((count-count%3600)/3600)%10)/10;//小時的十位end endmodule //正點報時,幾點就亮幾下 module showtime(clk_1hz, count, led2);input clk_1hz;input[16:0] count;output led2;reg led2;reg[4:0] clock_number;initial begin clock_number = 0; led2 = 0; endalways@(clk_1hz)beginif(clock_number == 0)case(count)17'd3598: clock_number <= 2;//馬上1點17'd7197: clock_number <= 4;//馬上2點17'd10796: clock_number <= 6;//馬上3點17'd14395: clock_number <= 8;//馬上4點17'd17994: clock_number <= 10;//馬上5點17'd21592: clock_number <= 12;//馬上6點17'd25192: clock_number <= 14;//馬上7點17'd28791: clock_number <= 16;//馬上8點17'd32390: clock_number <= 18;//馬上9點17'd35989: clock_number <= 20;//馬上10點17'd39588: clock_number <= 22;//馬上11點17'd43187: clock_number <= 24;//馬上12點17'd46786: clock_number <= 26;//馬上13點17'd50385: clock_number <= 28;//馬上14點17'd53984: clock_number <= 30;//馬上15點17'd57583: clock_number <= 32;//馬上16點17'd61182: clock_number <= 34;//馬上17點endcase elsebeginled2 <= ~led2;clock_number <= clock_number - 1;endend endmodule

?

管腳約束文件.ucf
NET "y<7>" LOC=T10 | IOSTANDARD=LVCMOS33; #IO_L24N_T3_A00_D16_14 NET "y<6>" LOC=R10 | IOSTANDARD=LVCMOS33; #IO_25_14 NET "y<5>" LOC=K16 | IOSTANDARD=LVCMOS33; #IO_25_15 NET "y<4>" LOC=K13 | IOSTANDARD=LVCMOS33; #IO_L17P_T2_A26_15 NET "y<3>" LOC=P15 | IOSTANDARD=LVCMOS33; #IO_L13P_T2_MRCC_14 NET "y<2>" LOC=T11 | IOSTANDARD=LVCMOS33; #IO_L19P_T3_A10_D26_14 NET "y<1>" LOC=L18 | IOSTANDARD=LVCMOS33; #IO_L4P_T0_D04_14 NET "y<0>" LOC=H15 | IOSTANDARD=LVCMOS33; #IO_L19N_T3_A21_VREF_15NET "select<0>" LOC=J17 | IOSTANDARD=LVCMOS33; #IO_L23P_T3_FOE_B_15 NET "select<1>" LOC=J18 | IOSTANDARD=LVCMOS33; #IO_L23N_T3_FWE_B_15 NET "select<2>" LOC=T9 | IOSTANDARD=LVCMOS33; #IO_L24P_T3_A01_D17_14 NET "select<3>" LOC=J14 | IOSTANDARD=LVCMOS33; #IO_L19P_T3_A22_15 NET "select<4>" LOC=P14 | IOSTANDARD=LVCMOS33; #IO_L8N_T1_D12_14 NET "select<5>" LOC=T14 | IOSTANDARD=LVCMOS33; #IO_L14P_T2_SRCC_14 NET "select<6>" LOC=K2 | IOSTANDARD=LVCMOS33; #IO_L23P_T3_35 NET "select<7>" LOC=U13 | IOSTANDARD=LVCMOS33; #IO_L23N_T3_A02_D18_14NET "clk_100M" LOC=E3 | IOSTANDARD=LVCMOS33; NET "min" LOC=J15 | IOSTANDARD=LVCMOS33; #IO_L24N_T3_RS0_15 NET "h" LOC=L16 | IOSTANDARD=LVCMOS33; #IO_L3N_T0_DQS_EMCCLK_14 NET "sh" LOC=M13 | IOSTANDARD=LVCMOS33; #IO_L13N_T2_MRCC_14 NET "sh" CLOCK_DEDICATED_ROUTE = FALSE;NET "led1" LOC=H17 | IOSTANDARD=LVCMOS33; #IO_L18P_T2_A24_15 NET "led2" LOC=K15 | IOSTANDARD=LVCMOS33; #IO_L24P_T3_RS1_15 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的【Verilog】基于Nexys4DDR开发板实现数字钟的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 污视频网站在线播放 | 亚洲黄色三级 | 国产视频播放 | 亚洲区成人 | 18性xxxxx性猛交| 免费的av网站 | 奇米影视久久久 | 天堂资源最新在线 | 欧洲色视频| 高清欧美性猛交 | 无码国产精品96久久久久 | 蜜乳av懂色av粉嫩av | 国产亚洲一区二区三区不卡 | 日韩福利一区二区 | 国产精品电影一区 | 国产制服91一区二区三区制服 | 一本到高清 | 日韩黄色录像 | 久久久久人妻一道无码AV | 国产日日干 | 亚洲一区二区av在线 | 欧美亚洲色综久久精品国产 | 最新色视频 | 一本到免费视频 | 亚洲精选中文字幕 | 色天天综合网 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 欧美丰满bbw | av少妇在线 | 奇米色777 | 国产视频一区二区三区四区 | 九九涩| 欧美亚洲国产视频 | 色乱码一区二区三在线看 | 豆花视频在线 | 物业福利视频 | 97超碰在线资源 | 97香蕉久久夜色精品国产 | 91精品国产色综合久久不卡粉嫩 | 久久久久久av无码免费看大片 | 亚洲尤物视频 | 日本高清免费观看 | 亚洲九色 | 奇米成人 | 日韩精品xxx| 亚洲av区无码字幕中文色 | 寡妇激情做爰呻吟 | 禁漫天堂免费网站 | 青青草手机视频 | 麻豆chinese新婚xxx | 欧美日韩一区二区视频在线观看 | 国产精品成人自拍 | www.99精品 | 欧美国产日韩一区二区三区 | 被黑人啪到哭的番号922在线 | 超碰导航 | 一级片手机在线观看 | 潘金莲一级淫片aaaaaaa | 香蕉视频亚洲 | 日产精品久久久久久久 | 国产99久久久国产精品免费看 | 97国产精品久久久 | 国产农村妇女毛片精品久久麻豆 | hd性videos意大利精品 | 久久久久国色av免费观看性色 | 中国国产bdsm紧缚捆绑 | 日本一区二区视频在线 | 青春草视频在线免费观看 | 涩涩在线播放 | 日批视频免费播放 | 久久免费视频2 | www.成人.com| zjzjzjzjzj亚洲女人 | 91狠狠 | 国产精品毛片一区二区在线看 | 久久久精品免费视频 | 日韩激情图片 | 美痴女~美人上司北岛玲 | 久久蜜臀精品av | 女女互磨互喷水高潮les呻吟 | 国产免费aa | 性欧美熟妇videofreesex | 特黄aaaaaaaaa毛片免费视频 | 欧美亚洲综合网 | videos另类灌满极品另类 | 国产做a | 亚洲一二三四在线 | 琪琪射| 欧美日韩一区二区三区四区五区 | 日韩一区二区三区在线观看视频 | 国产丝袜自拍 | 黄色免费看片 | 久久综合色网 | 三级少妇 | 欧美在线播放一区 | 大屁股白浆一区二区 | 成年人看的视频网站 | 香蕉视频99 | 老司机深夜网站 |