在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

FPGA學習系列:19. rom到數碼管顯示設計

FPGA學習交流 ? 2018-06-18 19:24 ? 次閱讀

設計背景:

rom是讀寫的的靜態存儲單元,在我們的設計中我們會經常用到,數碼管模塊同樣的大大小小的設計還是工程應用中都有這至關重要的作用。

設計原理:

前幾節我們學習了rom存儲器的設計,還有數碼管模塊的設計,為了我們聯系這兩個模塊的應用我們今天將設計一個按鍵來控制讀取rom中的數據,來顯示到數碼管上。

因為我們的數碼管模塊的顯示頻率是10K,所以我們應該小于10K的頻率給一個rom地址,從而出一個數據,我們的設計是0.5s出一個數據,這樣我們就能在數碼管上顯示隨著地址的增加,數據同樣也在變化。

第一步我們要先設計我們的.mif文件,我們在前10個地址是上寫入0 -- 10,然后建立一個rom 的ip核,添加進去從而便于后面的例化。

設計模塊,我們前面講過數碼管模塊,這樣就可以直接拿過來用了,今天我們將主要給大家展示我們的rom控制模塊。

設計架構圖:

image.png

設計代碼:

頂層模塊

0modulerom_seg (clk,rst_n,key,sel,seg_n);

1

2 inputclk,rst_n;

3 inputkey;

4 output[7:0]seg_n;//段選信號

5 output[2:0]sel;//位選信號

6

7 wire[3:0]data;

8 wire[23:0]hex;

9

10 //6個數碼管上顯示同樣的數據

11 assignhex[23:0]= {data[3:0],data[3:0],data[3:0],data[3:0],data[3:0],data[3:0]};

12

13 rom rom_inst ( //rom控制模塊的例化

14 .key(key),

15 .clk(clk),

16 .rst_n(rst_n),

17 .data(data)

18 );

19

20

21 seg SEG( //數碼管模塊的裂化

22 .clk(clk),

23 .rst_n(rst_n),

24 .sel(sel),

25 .seg7(seg_n),

26 .data_in(hex)

27 );

28

29

30endmodule

設計模塊

0modulerd_rom (key,clk,rst_n,addr);

1

2 inputclk;//輸入系統時鐘

3 inputrst_n;//輸入系統復位

4 inputkey;//按鍵控制

5

6 outputreg[3:0]addr;

7 reg[31:0]cnt;

8

9 always@(posedgeclk ornegedgerst_n)

10 begin

11 if(!rst_n)//異步復位

12 addr <=0;

13 elseif(addr <15&&key ==0&&cnt ==50000000/2-1)

14 addr <=addr +1'b1;//地址加1

15 else

16 addr <=addr;

17 end

18

19 always@(posedgeclk ornegedgerst_n)

20 begin

21 if(!rst_n)

22 begin

23 cnt<=0;

24 end

25 else

26 begin

27 if(cnt <50000000/2-1)// 50000000/10000/2 1hz的一 28 cnt <=cnt +1;

29 else

30 cnt <=0;

31 end

32 end

33endmodule

測試模塊

0`timescale1ns/1ps

1

2modulerom_seg_tb;

3

4 regclk;

5 regrst_n;

6 regkey;

7

8 wire[2:0]sel;

9 wire[7:0]seg_n;

10

11 initialbegin

12 clk =0;

13 rst_n =0;

14 key =1;

15

16 #200.1rst_n=1;

17 #200

18 forever

19 begin

20 #50key =1; //模擬按鍵

21 #50key =0;

22 end

23 end

24

25 always#10clk =~clk;

26

27 rom_seg rom_seg_dut( //例化頂層模塊

28 .clk(clk),

29 .rst_n(rst_n),

30 .key(key),

31 .sel(sel),

32 .seg_n(seg_n)

33 );

34

35endmodule

仿真:

image.png

在設計我們可以看到我們讀出了第一個數,然后下面的數我們可以調整我們的計數單元來通過顯示。

數碼管模塊我們可以用我們以前的 或者下面的:

0moduleseg(clk,rst_n,sel,seg7,data_in);//端口定義

1

2 inputclk;

3 inputrst_n;

4 input[23:0]data_in;//輸入6個燈的數據

5

6 outputreg[2:0]sel;

7 outputreg[7:0]seg7;

8

9 parameters0 =3'b000;

10 parameters1 =3'b001;

11 parameters2 =3'b010;

12 parameters3 =3'b011;

13 parameters4 =3'b100;

14 parameters5 =3'b101;

15

16 //`define T1ms 50_000 //定義1k的計數值

17 `defineT1ms 5

18 reg[15:0]count;

19 wireflag;

20 always@(posedgeclk ornegedgerst_n)

21 if(!rst_n)

22 begin

23 count <=15'b0;

24 end

25 else

26 if(count ==`T1ms-1)//計數到1MS

27 begin

28 count <=15'b0;

29 end

30 else

31 begin

32 count <=count +1'b1;

33 end

34

35 assignflag =(count ==`T1ms-1)?1'b1:1'b0;//標志位賦值

36

37 reg[2:0]state;

38 reg[3:0]num;

39 always@(posedgeclk ornegedgerst_n)

40 if(!rst_n)

41 begin

42 sel <=3'b0;

43 state <=3'b0;

44 num <=4'b0;

45 end

46 else

47 begin

48 case(state)

49 s0:begin

50 if(flag)

51 state <=s1;//亮第一個燈,給24位數據的 4

52 else

53 begin

54 sel <=3'b000;

55 num <=data_in[23:20];

56 end

57 end

58 s1:begin

59 if(flag) ////亮第2個燈,給24位數據 4

60 state <=s2;

61 else

62 begin

63 sel <=3'b001;

64 num <=data_in[19:16];

65 end

66 end

67 s2:begin

68 if(flag) //亮第3個燈,給24位數據的 4

69 state <=s3;

70 else

71 begin

72 sel <=3'b010;

73 num <=data_in[15:12];

74 end

75 end

76 s3:begin

77 if(flag) //亮第4個燈,給24位數據的4

78 state <=s4;

79 else

80 begin

81 sel <=3'b011;

82 num <=data_in[11:8];

83 end

84 end

85 s4:begin

86 if(flag) //亮第5個燈,給24位數據的4

87 state <=s5;

88 else

89 begin

90 sel <=3'b100;

91 num <=data_in[7:4];

92 end

93 end

94 s5:begin

95 if(flag) //亮第6個燈,給24位數據的4

96 state <=s0;

97 else

98 begin

99 sel <=3'b101;

100 num <=data_in[3:0];

101 end

102 end

103 default:state <=s0;

104 endcase

105 end

106

107 always@(*) //數碼管的譯碼模塊

108 begin

109 case(num)

110 0:seg7 =8'b1100_0000;

111 1:seg7 =8'b1111_1001;

112 2:seg7 =8'b1010_0100;

113 3:seg7 =8'b1011_0000;

114 4:seg7 =8'b1001_1001;

115 5:seg7 =8'b1001_0010;

116 6:seg7 =8'b1000_0010;

117 7:seg7 =8'b1111_1000;

118 8:seg7 =8'b1000_0000;

119 9:seg7 =8'b1001_0000;

120 10:seg7 =8'b1000_1000;

121 11:seg7 =8'b1000_0011;

122 12:seg7 =8'b1100_0110;

123 13:seg7 =8'b1010_0001;

124 14:seg7 =8'b1000_0110;

125 15:seg7 =8'b1000_1110;

126 default:;

127 endcase

128 end

129endmodule


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1630

    文章

    21777

    瀏覽量

    604706
  • 數碼管
    +關注

    關注

    32

    文章

    1883

    瀏覽量

    91283
收藏 人收藏

    評論

    相關推薦

    基于FPGA實現數碼管顯示

    本文介紹數碼管顯示譯碼基本工作原理及Verilog HDL驅動代碼編寫,進一步熟練掌握FPGA入門基礎知識。
    的頭像 發表于 10-24 14:44 ?1071次閱讀
    基于<b class='flag-5'>FPGA</b>實現<b class='flag-5'>數碼管</b><b class='flag-5'>顯示</b>

    數碼管的使用方法和接線步驟

    數碼管的基本單元是發光二極(LED),通過控制不同LED的亮滅來顯示數字和字符。根據段數,數碼管可分為七段和八段,其中八段數碼管比七段多一
    的頭像 發表于 08-29 18:22 ?3167次閱讀

    簡述led數碼管的類型和顯示原理

    LED數碼管是一種常見的顯示設備,廣泛應用于各種電子設備和系統中。本文將介紹LED數碼管的類型和顯示原理,以幫助讀者更好地了解這種設備。 LED數碼
    的頭像 發表于 08-29 09:11 ?1281次閱讀

    數碼管顯示屏的靜態顯示編程是什么

    ,要么全部熄滅不顯示任何內容,而不涉及動態掃描或快速切換來模擬多個數碼管同時顯示的效果。 在靜態顯示中,每個
    的頭像 發表于 08-28 17:14 ?634次閱讀

    數碼管顯示屏的作用和功能是什么

    數碼管顯示屏是一種廣泛應用于各種電子設備中的顯示技術,它具有多種作用和功能。 一、數碼管顯示屏的基本概念 1.1
    的頭像 發表于 08-28 17:11 ?1175次閱讀

    驅動器數碼管顯示不良原因

    驅動器數碼管顯示不良的原因可能有很多,涉及硬件、軟件、環境等多個方面。 一、引言 驅動器數碼管是一種廣泛應用于工業自動化、電子設備等領域的顯示
    的頭像 發表于 08-28 16:38 ?1025次閱讀

    什么原因造成數碼管顯示錯誤

    數碼管顯示錯誤是一個常見的問題,可能由多種原因引起。 一、引言 數碼管是一種常用的顯示設備,廣泛應用于各種電子設備中,如電子鐘、計算器、溫度計等。然而,在使用過程中,
    的頭像 發表于 08-28 16:36 ?1944次閱讀

    8位數碼管怎么不顯示數字

    8位數碼管是一種常見的電子顯示設備,用于顯示數字或字符。然而,有時8位數碼管可能無法正常顯示數字。 電源問題 電源是8位
    的頭像 發表于 08-28 16:34 ?1029次閱讀

    7段數碼管共陰共陽如何顯示數字

    7段數碼管是一種常見的顯示設備,用于顯示數字和部分字母。它由7個LED發光二極組成,每個LED可以獨立控制,從而實現數字和字母的顯示。 一
    的頭像 發表于 08-28 16:19 ?2709次閱讀

    數碼管驅動芯片引腳功能

    數碼管驅動芯片是一種用于驅動數碼管顯示數字或字符的集成電路。數碼管驅動芯片的引腳功能是實現數碼管正常顯示
    的頭像 發表于 08-28 16:08 ?1055次閱讀

    數碼管驅動芯片原理是什么

    數碼管驅動芯片是一種廣泛應用于數字顯示領域的電子元件,它能夠將數字信號轉換為可視的數字顯示。 一、數碼管驅動芯片概述 1.1 數碼管驅動芯片
    的頭像 發表于 08-28 16:07 ?1024次閱讀

    數碼管驅動芯片好壞判斷方法

    數碼管驅動芯片是數字顯示設備中的核心部件,其性能好壞直接影響數碼管顯示效果和使用壽命。 一、數碼管
    的頭像 發表于 08-28 15:57 ?1023次閱讀

    硬件模塊---數碼管基本原理與實現方法

    如果陽極連在一起,就是共陽極數碼管,陰極連在一起,就是共陰極數碼管。 如上圖,是一個共陰極數碼管,要使數碼管顯示不同的數字,只需點亮對應LE
    的頭像 發表于 05-11 09:20 ?4549次閱讀
    硬件模塊---<b class='flag-5'>數碼管</b>基本原理與實現方法

    【基于Lattice MXO2的小腳丫FPGA核心板】03數碼管顯示控制

    的信號都連接到FPGA的管腳,作為輸出信號控制。FPGA只要輸出這些信號就能夠控制數碼管的那一段LED亮或者滅。這樣我們可以通過開關來控制FPGA的輸出。通過組合邏輯的輸出來控制
    發表于 02-29 09:01

    51單片機數碼管靜態顯示

    ? 數碼管靜態顯示其實在實際應用中很少,除非項目中就只用到了一位數碼管顯示,否則的話靜態顯示非常占用IO口。但是,靜態
    的頭像 發表于 02-26 11:05 ?2177次閱讀
    51單片機<b class='flag-5'>數碼管</b>靜態<b class='flag-5'>顯示</b>
    主站蜘蛛池模板: 欧美成人aaa大片| 免费看欧美一级特黄α大片| 欧美日韩你懂的| 秋霞特色大片18入口私人高清| 色多多www网站| 美女隐私黄www视频| 69国产成人精品午夜福中文| 二级特黄绝大片免费视频大片| 午夜啪| 天天操天天射天天爽| av成人在线播放| 国内一级特黄女人精品毛片 | 一区不卡视频| 禁h粗大太大好爽好涨受不了了| 永久免费mv网站入口| 深爱五月激情五月| 中文字幕一区二区三区 精品| 国产自产视频在线观看香蕉| 插久久| 在线视频免费播放| 一本大道一卡二卡四卡| 伊人久久大香线蕉综合亚洲 | ggg成人| 免费免费啪视频视频观看| 国产精品午夜高清在线观看| 男女啪视频大全1000| 99亚洲自拍| 欧美另类激情| 亚洲二区在线| 轻点灬大ji巴太粗太长了h| 中国一级特黄aa毛片大片| 91福利社在线观看| 色月| 国产欧美亚洲精品第二区首页| 狠狠色丁香婷婷| 午夜免费影视| 456成人| 曰本又色又爽又黄三级视频| 欧美一级精品| 在线看片福利| 51xx嘿嘿午夜|