0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FPGA學(xué)習(xí)系列:22. 數(shù)字時(shí)鐘的設(shè)計(jì)

FPGA學(xué)習(xí)交流 ? 2018-08-07 13:47 ? 次閱讀

設(shè)計(jì)背景:

數(shù)字時(shí)鐘的設(shè)計(jì),在我們的好多設(shè)計(jì)中都有過(guò)這樣那樣的設(shè)計(jì),這基本屬于一個(gè)比較精簡(jiǎn)的一個(gè)小項(xiàng)目,可以練習(xí)我們學(xué)到的好多知識(shí)點(diǎn)。

設(shè)計(jì)原理:

本次的設(shè)計(jì)主要還是為了結(jié)合我們所學(xué)到的知識(shí),因?yàn)槲覀儗W(xué)到的知識(shí)要經(jīng)常的用,并不是我們不用,一直在用我們就可以加深我們的想法和思路,這也是一種良好的學(xué)習(xí)態(tài)度。

我設(shè)計(jì)的數(shù)字鐘是這樣的一種架構(gòu),我又3個(gè)按鍵,上電后,我們需要先配置我們的時(shí)分秒,我的設(shè)計(jì)是一個(gè)按鍵來(lái)控制我們的時(shí),一個(gè)按鍵來(lái)控制我們的分,秒我沒(méi)有控制,因?yàn)槲冶容^懶,大家可以自己取設(shè)計(jì)控制一下我們的設(shè)計(jì),那么然后是這樣的,第三個(gè)按鍵來(lái)控制我們時(shí)鐘的運(yùn)行,也就是說(shuō)當(dāng)我們用2個(gè)那件配置好了我們的時(shí)鐘的時(shí)候,按下這個(gè)開(kāi)始按鍵,我們的時(shí)鐘就開(kāi)始工作了。

那么我們就在來(lái)討論一下我們的按鍵模塊,我們的按鍵模塊是這樣的,因?yàn)榘存I有抖動(dòng),我加入按鍵消抖,和邊沿檢測(cè)電路,這樣我們就實(shí)現(xiàn)了按鍵的消抖,用到的也就是我們前面設(shè)計(jì)的知識(shí)。

設(shè)計(jì)架構(gòu)圖:

image.png


寫(xiě)好一個(gè)模塊,我們可以任意例化幾次都是可以的,目前還不用考慮別的,三個(gè)按鍵就例化了三次我們的按鍵消抖和邊沿檢測(cè)。

設(shè)計(jì)代碼:

設(shè)計(jì)模塊

0moduletime_seg(clk,rst_n,sel,seg7,key_fen,key_shi,go);

1

2 inputclk;

3 inputrst_n;

4

5 inputkey_fen; //控制分的按鍵

6 inputkey_shi; //控制時(shí)的按鍵

7 inputgo; //控制時(shí)鐘運(yùn)行的按鍵

8 output[2:0]sel;

9 output[7:0]seg7;

10

11 wire[23:0]data_in;

12

13

14seg seg_dut( //例化我們的數(shù)碼管模塊

15 .clk(clk),

16 .rst_n(rst_n),

17 .sel(sel),

18 .seg7(seg7),

19 .data_in(data_in)

20 );

21 wiref_fen,f_shi,f_go;

22contol countol_dut( //例化我們的控制模塊

23 .clk(clk),

24 .rst_n(rst_n),

25 .data(data_in),

26 .key_fen1(f_fen),

27 .key_shi1(f_shi),

28 .go1(f_go)

29 );

30 wirefen_x,shi_x,go_x;

31key_xiaodou shi3( //例化3次消抖

32 .clk(clk),

33 .rst_n(rst_n),

34 .key(key_shi),

35 .key_x(shi_x)

36 );

37key_xiaodou fen3(

38 .clk(clk),

39 .rst_n(rst_n),

40 .key(key_fen),

41 .key_x(fen_x)

42 );

43

44key_xiaodou go3(

45 .clk(clk),

46 .rst_n(rst_n),

47 .key(go),

48 .key_x(go_x)

49 );

50

51edge_jiance shi2( //例化3次邊沿檢測(cè)電路

52 .clk(clk),

53 .rst_n(rst_n),

54 .signle(shi_x),

55 .nege_dge(f_shi),

56 .pose_dge()

57 );

58edge_jiance fen2(

59 .clk(clk),

60 .rst_n(rst_n),

61 .signle(fen_x),

62 .nege_dge(f_fen),

63 .pose_dge()

64 );

65edge_jiance go2(

66 .clk(clk),

67 .rst_n(rst_n),

68 .signle(go_x),

69 .nege_dge(f_go),

70 .pose_dge()

71 );

72

73endmodule

控制模塊:

0modulecontol(clk,rst_n,data,key_fen1,key_shi1,go1);

1

2 inputclk;

3 inputrst_n;

4 inputkey_fen1; //輸入端口

5 inputkey_shi1;

6 inputgo1;

7

8 outputreg[23:0]data; //輸出的端口

9

10

11 reg[26:0]count;

12

13 always@(posedgeclk ornegedgerst_n) //1秒的計(jì)數(shù)器

14 if(!rst_n)

15 begin

16 count <=26'd0;

17 end

18 else

19 begin

20 if(count ==50_000_000)

21 count <=26'd0;

22 else

23 begin

24 count <=count +1'd1;

25 end

26 end

27

28 wireflag;

29

30 assignflag =(count ==50_000_000)?1'b1:1'b0; //計(jì)數(shù)到了1S給一個(gè)高脈沖

31

32 reg[1:0]state;

33 always@(posedgeclk ornegedgerst_n)

34 if(!rst_n)

35 begin

36 data <=0;

37 state <=0;

38 end

39 else

40 case(state)

41 0:begin

42 if(key_fen1) //調(diào)節(jié)分

43 begin

44 data[11:8]<=data[11:8]+1;

45 if(data[11:8]==9)

46 begin

47 data[11:8]<=4'd0;

48 data[15:12]<=data[15:12]+1'b1;

49 if(data[15:12]==5)

50 data[15:12]<=0;

51 end

52 end

53 elseif(key_shi1) //調(diào)節(jié)時(shí)

54 begin

55 data[19:16]<=data[19:16]+1;

56 if(data[19:16]==9&&data[23:20]!=1)

57 begin

58 data[19:16]<=4'd0;

59 data[23:20]<=data[23:20]+1'b1;

60 if(data[23:20]==1)

61 data[23:20]<=0;

62 end

63 elseif(data[19:16]==2&&data[23:20]==1)

64 begin

65 data[19:16]<=0;

66 data[23:20]<=0;

67 end

68 end

69 elseif(go1) //讓我們的時(shí)鐘啟動(dòng)

70 begin

71 state <=1;

72 end

73 else

74 state <=0;

75 end

//一層一層的嵌套設(shè)計(jì),讓我們的秒一個(gè)一個(gè)的來(lái)驅(qū)動(dòng)

76 1:begin

77 if(flag )

78 begin

79 data[3:0]<=data[3:0]+1;

80 if(data[3:0]==9) //秒的個(gè)位

81 begin

82 data[3:0]<=4'd0;

83 data[7:4]<=data[7:4]+1'b1;

84 if(data[7:4]==5) //秒的時(shí)位

85 begin

86 data[7:4]<=4'd0;

87 data[11:8]<=data[11:8]+1'b1;

88 if(data[11:8]==9) //分的個(gè)位

89 begin

90 data[11:8]<=4'd0;

91 data[15:12]<=data[15:12]+1'b1;

92 if(data[15:12]==5) //分的十位

93 begin

94 data[15:12]<=4'd0;

95 data[19:16]<=data[19:16]+1'b1;

96 if(data[19:16]==9&&data[23:20]!=1)//時(shí)的計(jì)算

97 begin

98 data[23:20]<=4'd0;

99 data[23:20]<=data[23:19]+1'b1;

100 if(data[23:20]==1)

101 data[23:20]<=4'd0;

102 end

103 elseif(data[19:16]==2&&data[23:20]==1)//如果到12小時(shí)制

104 begin

105 data[19:16]<=0;

106 data[23:20]<=0;

107 end

108 end

109 end

110 end

111 end

112 end

113 end

114

115 default:;

116 endcase

117

118

19 endmodule

這邊我就不給大家仿真了,后續(xù)我會(huì)給大家發(fā)一個(gè)完整的工程,建議大家可以自己例化我的設(shè)計(jì)。


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1630

    文章

    21796

    瀏覽量

    605524
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于FPGA數(shù)字時(shí)鐘設(shè)計(jì)

    本次的設(shè)計(jì)的數(shù)字鐘思路描述如下,使用3個(gè)key按鍵,上電后,需要先配置數(shù)字時(shí)鐘的時(shí)分秒,設(shè)計(jì)一個(gè)按鍵來(lái)控制數(shù)字時(shí)鐘的時(shí),第二個(gè)按鍵來(lái)控制
    的頭像 發(fā)表于 01-21 10:29 ?100次閱讀
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>數(shù)字</b><b class='flag-5'>時(shí)鐘</b>設(shè)計(jì)

    時(shí)序約束一主時(shí)鐘與生成時(shí)鐘

    一、主時(shí)鐘create_clock 1.1 定義 主時(shí)鐘是來(lái)自FPGA芯片外部的時(shí)鐘,通過(guò)時(shí)鐘輸入端口或高速收發(fā)器GT的輸出引腳進(jìn)入
    的頭像 發(fā)表于 11-29 11:03 ?607次閱讀
    時(shí)序約束一主<b class='flag-5'>時(shí)鐘</b>與生成<b class='flag-5'>時(shí)鐘</b>

    FPGA加速深度學(xué)習(xí)模型的案例

    FPGA(現(xiàn)場(chǎng)可編程門(mén)陣列)加速深度學(xué)習(xí)模型是當(dāng)前硬件加速領(lǐng)域的一個(gè)熱門(mén)研究方向。以下是一些FPGA加速深度學(xué)習(xí)模型的案例: 一、基于FPGA
    的頭像 發(fā)表于 10-25 09:22 ?334次閱讀

    FPGA做深度學(xué)習(xí)能走多遠(yuǎn)?

    今天給大俠帶來(lái)在FPAG技術(shù)交流群里平時(shí)討論的問(wèn)題答疑合集(十四),以后還會(huì)多推出本系列,話(huà)不多說(shuō),上貨。 FPGA技術(shù)交流群目前已有十多個(gè)群,QQ和微信均覆蓋,有需要的大俠可以進(jìn)群,一起交流學(xué)習(xí)
    發(fā)表于 09-27 20:53

    FPGA如何消除時(shí)鐘抖動(dòng)

    FPGA(現(xiàn)場(chǎng)可編程門(mén)陣列)設(shè)計(jì)中,消除時(shí)鐘抖動(dòng)是一個(gè)關(guān)鍵任務(wù),因?yàn)?b class='flag-5'>時(shí)鐘抖動(dòng)會(huì)直接影響系統(tǒng)的時(shí)序性能、穩(wěn)定性和可靠性。以下將詳細(xì)闡述FPGA中消除
    的頭像 發(fā)表于 08-19 17:58 ?1607次閱讀

    源碼系列:基于FPGA數(shù)字電壓表(AD)設(shè)計(jì)

    今天給大俠帶來(lái)基于FPGA數(shù)字電壓表設(shè)計(jì),附源碼,獲取源碼,請(qǐng)?jiān)凇?b class='flag-5'>FPGA技術(shù)江湖”公眾號(hào)內(nèi)回復(fù)“數(shù)字電壓表設(shè)計(jì)源碼”,可獲取源碼文件。話(huà)不多說(shuō),上貨。 設(shè)計(jì)背景 模數(shù)轉(zhuǎn)
    發(fā)表于 05-28 17:29

    紫光同創(chuàng)PGL22G開(kāi)發(fā)板|盤(pán)古22K開(kāi)發(fā)板,國(guó)產(chǎn)FPGA開(kāi)發(fā)板,接口豐富,高性?xún)r(jià)比

    盤(pán)古22K開(kāi)發(fā)板是基于紫光同創(chuàng)Logos系列PGL22G芯片設(shè)計(jì)的一款FPGA開(kāi)發(fā)板,全面實(shí)現(xiàn)國(guó)產(chǎn)化方案,板載資源豐富,高容量、高帶寬,外圍接口豐富,不僅適用于高校教學(xué),還可以用于實(shí)驗(yàn)
    發(fā)表于 05-23 10:04

    FPGA時(shí)鐘電路結(jié)構(gòu)原理

    FPGA 中包含一些全局時(shí)鐘資源。以AMD公司近年的主流FPGA為例,這些時(shí)鐘資源由CMT(時(shí)鐘管理器)產(chǎn)生,包括DCM、PLL和MMCM等
    發(fā)表于 04-25 12:58 ?2010次閱讀
    <b class='flag-5'>FPGA</b>的<b class='flag-5'>時(shí)鐘</b>電路結(jié)構(gòu)原理

    FPGA學(xué)習(xí)筆記-入門(mén)

    大概10年前,大學(xué)同學(xué)建議我學(xué)習(xí)DSP。當(dāng)因?yàn)楣ぷ髅?,也只是?jiǎn)單學(xué)習(xí)了DSP的一些基礎(chǔ)知識(shí),沒(méi)有進(jìn)一步深入學(xué)習(xí)和時(shí)間。結(jié)果現(xiàn)在,好像DSP已經(jīng)不再是主流了,現(xiàn)在有了FPGA。 現(xiàn)在想想
    發(fā)表于 04-09 10:55

    FPGA初步學(xué)習(xí)印象

    在大學(xué)學(xué)習(xí)數(shù)字電路時(shí),還記得有時(shí)候會(huì)用TTL或者CMOS器件,搭建一些功能復(fù)雜的電路。后來(lái)隨著單片機(jī)的發(fā)展,TTL或者CMOS的器件和應(yīng)用似乎已經(jīng)沒(méi)落了。手里還有的一些器件基本上吃灰,沒(méi)什么大用
    發(fā)表于 04-09 09:46

    FPGA學(xué)習(xí)資料分享

    學(xué)習(xí)資源Verilog 教程,數(shù)字邏輯設(shè)計(jì) (點(diǎn)擊文字進(jìn)入鏈接). 具備一定硬件描述語(yǔ)言基礎(chǔ)是發(fā)開(kāi)FPGA通用的。此外就是根據(jù)廠家型號(hào)、環(huán)境和提供的資源,能有效使用組織起來(lái),實(shí)現(xiàn)目標(biāo)功能,這更傾向于實(shí)踐應(yīng)用。 大家有關(guān)于實(shí)踐應(yīng)
    發(fā)表于 03-31 13:23

    品讀《基于FPGA與RISC-V的嵌入式系統(tǒng)設(shè)計(jì)》

    PulseRainRTL庫(kù) 1.10 資料來(lái)源 1.11 代碼資源 第 2 章 FPGA 2.1 FPGA 背景概述 2.2 FPGA數(shù)字芯片的異同 2.2.1
    發(fā)表于 03-29 00:06

    fpga學(xué)習(xí)需要具備哪些課程

    FPGA(Field Programmable Gate Array)學(xué)習(xí)需要具備一系列的課程知識(shí)和實(shí)踐技能
    的頭像 發(fā)表于 03-14 15:51 ?1286次閱讀

    種草一塊國(guó)產(chǎn)FPGA開(kāi)發(fā)板,不用燒錄器,一根TypeC線即插即用,盤(pán)古EU22K開(kāi)發(fā)板

    和實(shí)驗(yàn)例程很豐富,以太網(wǎng)/DDR3/HDMI Test/Loop/串口收發(fā)/數(shù)字時(shí)鐘實(shí)驗(yàn)例程等都有,對(duì)于想嘗試國(guó)產(chǎn)FPGA平臺(tái)的友友們,墻裂推薦~~
    發(fā)表于 02-21 11:11

    FPGA輸入的時(shí)鐘信號(hào)必須是方波么?正弦波會(huì)有影響么?

    FPGA輸入的時(shí)鐘信號(hào)必須是方波么?正弦波會(huì)有影響么? FPGA是一種可編程邏輯器件,通常用于實(shí)現(xiàn)數(shù)字電路。輸入時(shí)鐘信號(hào)是
    的頭像 發(fā)表于 01-31 11:31 ?3732次閱讀