数码管的封装实验。显示使能信号置高才可以显示。对于小数点不用,故不显示。

数码管分为共阴数码管和共阳数码管,数码管不同,编码不同,下面是两种数码管显示0-F以及消隐的不同编码:

共阴数码管(高有效):

  1. parameter seg_H_0 = 'h3f, seg_H_1 = 8'h06, seg_H_2 = 'h5b,
  2. seg_H_3 = 'h4f, seg_H_4 = 8'h66, seg_H_5 = 'h6d,
  3. seg_H_6 = 'h7d, seg_H_7 = 8'h07, seg_H_8 = 'h7f,
  4. seg_H_9 = 'h67, seg_H_A = 8'h77, seg_H_B = 'h7c,
  5. seg_H_C = 'h39, seg_H_D = 8'h5e, seg_H_E = 'h79,
  6. seg_H_F = 'h71, seg_H_X = 8'h00;

共阳数码管(低有效):

  1. parameter seg_L_0 = 'hc0, seg_L_1 = 8'hf9, seg_L_2 = 'ha4,
  2. seg_L_3 = 'hb0, seg_L_4 = 8'h99, seg_L_5 = 'h92,
  3. seg_L_6 = 'h82, seg_L_7 = 8'hf8, seg_L_8 = 'h80,
  4. seg_L_9 = 'h98, seg_L_A = 8'h88, seg_L_B = 'h83,
  5. seg_L_C = 'hc6, seg_L_D = 8'ha1, seg_L_E = 'h86,
  6. seg_L_F = 'h8e, seg_L_X = 8'hff;

显示程序:

头文件

  1. /********************************Copyright**************************************
  2. **----------------------------File information--------------------------
  3. ** File name :seg_interface.v
  4. ** CreateDate :2015.04
  5. ** Funtions :数码管封装,6位,数据为23位,4位在一个数码管上显示
  6. ** Operate on :M5C06N3L114C7
  7. ** Copyright :All rights reserved.
  8. ** Version :V1.0
  9. **---------------------------Modify the file information----------------
  10. ** Modified by :
  11. ** Modified data :
  12. ** Modify Content:
  13. *******************************************************************************/
  14.  
  15. module seg_interface(
  16. clk,
  17. rst_n,
  18.  
  19. segdisplay_en,
  20. number_data,
  21.  
  22. seg_data,
  23. seg_bit
  24.  
  25. );
  26. input clk; /* clk = 24M */
  27. input rst_n;
  28. input [:] number_data; /* 输入的数据 */
  29. input segdisplay_en; /* 数码管显示使能 */
  30. output [:] seg_data;
  31. output [:] seg_bit;
  32.  
  33. wire [:] seg_data;
  34. wire [:] seg_bit;
  35.  
  36. wire [:] number_data_reg;
  37.  
  38. smg_control U1(
  39. .clk(clk),
  40. .rst_n(rst_n),
  41.  
  42. .segdisplay_en(segdisplay_en),
  43.  
  44. .number_data(number_data), //in 23位输入数据
  45. .seg_data_reg(number_data_reg), //数据的中间变量 out to U1
  46. .seg_bit(seg_bit) //output 6 位数码管的位数
  47. );
  48. smg_encode U2(
  49. .number_data_reg(number_data_reg), //In 要显示的数据的中间变量
  50. .seg_data(seg_data)
  51. );
  52.  
  53. endmodule

底层:

  1. /********************************Copyright**************************************
  2. **----------------------------File information--------------------------
  3. ** File name :smg_control.v
  4. ** CreateDate :2015.04
  5. ** Funtions :数码管的位码控制和数据控制,状态机控制,1ms转移一位数码管
  6. ** Operate on :M5C06N3L114C7
  7. ** Copyright :All rights reserved.
  8. ** Version :V1.0
  9. **---------------------------Modify the file information----------------
  10. ** Modified by :
  11. ** Modified data :
  12. ** Modify Content:
  13. *******************************************************************************/
  14.  
  15. module smg_control(
  16. clk,
  17. rst_n,
  18.  
  19. segdisplay_en,
  20. number_data,
  21. seg_data_reg,
  22. seg_bit
  23. );
  24. input clk;
  25. input rst_n;
  26. input [:] number_data; //共使用6个数码管,每个4位数据,共24位
  27. input segdisplay_en;
  28.  
  29. output [:] seg_data_reg;
  30. output [:] seg_bit;
  31. wire [:] seg_data_reg;
  32. wire [:] seg_bit;
  33.  
  34. parameter t1ms = 'd23999; /* reality */
  35.  
  36. // parameter t1ms = 15'd3; /* just fo test */
  37. reg [:] count1;
  38. always @(posedge clk or negedge rst_n)
  39. begin
  40. if(!rst_n)
  41. count1 <= 'd0;
  42. else if(segdisplay_en)
  43. begin
  44. if(count1 == t1ms) count1 <= 'd0;
  45. else count1 <= count1 + ;
  46. end
  47. else
  48. count1 <= 'd0;
  49. end
  50.  
  51. //****************************************
  52. reg [:] i;
  53. reg [:] rnumber;
  54. reg [:] rbit;
  55.  
  56. always @(posedge clk or negedge rst_n)
  57. begin
  58. if(!rst_n)
  59. begin
  60. i <= 'd0;
  61. rnumber <= 'd0;
  62. rbit <= 'b111111; /* 有消隐的作用 */
  63. end
  64. else if(segdisplay_en)
  65. begin
  66. case(i)
  67. 'd0:
  68. begin
  69. if(count1 == t1ms)
  70. i <= 'd1;
  71. else
  72. begin
  73. rnumber <= number_data[:];
  74. rbit <= 'b011111;
  75. end
  76. end
  77. 'd1:
  78. begin
  79. if(count1 == t1ms)
  80. i <= 'd2;
  81. else
  82. begin
  83. rnumber <= number_data[:];
  84. rbit <= 'b101111;
  85. end
  86. end
  87. 'd2:
  88. begin
  89. if(count1 == t1ms)
  90. i <= 'd3;
  91. else
  92. begin
  93. rnumber <= number_data[:];
  94. rbit <= 'b110111;
  95. end
  96. end
  97. 'd3:
  98. begin
  99. if(count1 == t1ms)
  100. i <= 'd4;
  101. else
  102. begin
  103. rnumber <= number_data[:];
  104. rbit <= 'b111011;
  105. end
  106. end
  107. 'd4:
  108. begin
  109. if(count1 == t1ms)
  110. i <= 'd5;
  111. else
  112. begin
  113. rnumber <= number_data[:];
  114. rbit <= 'b111101;
  115. end
  116. end
  117. 'd5:
  118. begin
  119. if(count1 == t1ms)
  120. i <= 'd0;
  121. else
  122. begin
  123. rnumber <= number_data[:];
  124. rbit <= 'b111110;
  125. end
  126. end
  127. default : i <= 'd0;
  128. endcase
  129. end
  130. else
  131. begin
  132. i <= 'd0;
  133. rnumber <= 'd0;
  134. rbit <= 'b111111; /* 有消隐的作用 */
  135. end
  136. end
  137.  
  138. assign seg_data_reg = rnumber;
  139. assign seg_bit = rbit;
  140.  
  141. endmodule
  1. /********************************Copyright**************************************
  2. **----------------------------File information--------------------------
  3. ** File name :smg_encode.v
  4. ** CreateDate :2015.04
  5. ** Funtions :数码管的编码文件,输入4位,输出8位
  6. ** Operate on :M5C06N3L114C7
  7. ** Copyright :All rights reserved.
  8. ** Version :V1.0
  9. **---------------------------Modify the file information----------------
  10. ** Modified by :
  11. ** Modified data :
  12. ** Modify Content:
  13. *******************************************************************************/
  14.  
  15. module smg_encode (
  16. number_data_reg,
  17. seg_data
  18. );
  19. input [:] number_data_reg;
  20.  
  21. output [:] seg_data;
  22. wire [:] seg_data;
  23.  
  24. //parameter seg_0 = 8'b1100_0000, seg_1 = 8'b1111_1001, seg_2 = 8'b1010_0100,
  25. // seg_3 = 8'b1011_0000, seg_4 = 8'b1001_1001, seg_5 = 8'b1001_0010,
  26. // seg_6 = 8'b1000_0010, seg_7 = 8'b1111_1000, seg_8 = 8'b1000_0000,
  27. // seg_9 = 8'b1001_0000;
  28. // ----
  29. // | |
  30. // | |
  31. // ----
  32. // | |
  33. // | |
  34. // ---- 。
  35.  
  36. parameter seg_H_0 = 'h3f, seg_H_1 = 8'h06, seg_H_2 = 'h5b,
  37. seg_H_3 = 'h4f, seg_H_4 = 8'h66, seg_H_5 = 'h6d,
  38. seg_H_6 = 'h7d, seg_H_7 = 8'h07, seg_H_8 = 'h7f,
  39. seg_H_9 = 'h67, seg_H_A = 8'h77, seg_H_B = 'h7c,
  40. seg_H_C = 'h39, seg_H_D = 8'h5e, seg_H_E = 'h79,
  41. seg_H_F = 'h71, seg_H_X = 8'h00;
  42.  
  43. /*
  44. parameter seg_L_0 = 8'hc0, seg_L_1 = 8'hf9, seg_L_2 = 8'ha4,
  45. seg_L_3 = 8'hb0, seg_L_4 = 8'h99, seg_L_5 = 8'h92,
  46. seg_L_6 = 8'h82, seg_L_7 = 8'hf8, seg_L_8 = 8'h80,
  47. seg_L_9 = 8'h98, seg_L_A = 8'h88, seg_L_B = 8'h83,
  48. seg_L_C = 8'hc6, seg_L_D = 8'ha1, seg_L_E = 8'h86,
  49. seg_L_F = 8'h8e, seg_L_X = 8'hff;
  50. */
  51. //*********************************************************
  52. reg [:] rsmg;
  53. always @(*)
  54. begin
  55. case(number_data_reg)
  56. 'h0: rsmg <= seg_H_0;
  57. 'h1: rsmg <= seg_H_1;
  58. 'h2: rsmg <= seg_H_2;
  59. 'h3: rsmg <= seg_H_3;
  60. 'h4: rsmg <= seg_H_4;
  61. 'h5: rsmg <= seg_H_5;
  62. 'h6: rsmg <= seg_H_6;
  63. 'h7: rsmg <= seg_H_7;
  64. 'h8: rsmg <= seg_H_8;
  65. 'h9: rsmg <= seg_H_9;
  66. 'ha: rsmg <= seg_H_A;
  67. 'hb: rsmg <= seg_H_B;
  68. 'hc: rsmg <= seg_H_C;
  69. 'hd: rsmg <= seg_H_D;
  70. 'he: rsmg <= seg_H_E;
  71. 'hf: rsmg <= seg_H_F;
  72. default : rsmg <= seg_H_X;
  73. endcase
  74. end
  75.  
  76. assign seg_data= rsmg;
  77.  
  78. endmodule

测试文件:

  1. /********************************Copyright**************************************
  2. **----------------------------File information--------------------------
  3. ** File name :seg_tb.v
  4. ** CreateDate :2015.04
  5. ** Funtions : 数码管的测试文件
  6. ** Operate on :M5C06N3L114C7
  7. ** Copyright :All rights reserved.
  8. ** Version :V1.0
  9. **---------------------------Modify the file information----------------
  10. ** Modified by :
  11. ** Modified data :
  12. ** Modify Content:
  13. *******************************************************************************/
  14.  
  15. `timescale ns/ ns
  16.  
  17. module seg_tb;
  18. reg clk; /* clk = 24M */
  19. reg rst_n;
  20. reg [:] number_data; /* 输入的数据 */
  21. reg segdisplay_en;
  22.  
  23. wire [:] seg_data;
  24. wire [:] seg_bit;
  25.  
  26. seg_interface seg_interface1(
  27. .clk,
  28. .rst_n,
  29. .number_data,
  30. .segdisplay_en(segdisplay_en),
  31.  
  32. .seg_data,
  33. .seg_bit
  34. );
  35.  
  36. parameter tck = ;
  37. parameter t = /tck;
  38.  
  39. always
  40. #(t/) clk = ~clk;
  41.  
  42. initial
  43. begin
  44. clk = ;
  45. rst_n = ;
  46. number_data = ;
  47. segdisplay_en = ;
  48.  
  49. #(*t) rst_n = ;
  50. #(*t) segdisplay_en = ;
  51. number_data = 'h123456;
  52.  
  53. #(*t) number_data = 'h789abc;
  54. end
  55. endmodule

仿真图:

注:

实验板上的数码管是共阳数码管:

但是实验板上驱动数码管使用的是PNP型的,所以驱动会相反,即是:共阳数码管的驱动是

位选择要为低,数据有效码值也为低(bit->0,segdata --> 8'hc0,则显示数值0).

数码管的封装实验 --- verilog的更多相关文章

  1. 1-ser2008系统封装实验报告

    系统封装实验 1.       封装系统的原因 直接克隆系统会导致克隆后的系统和原系统的SID号一致,在许多实验中会因为SID号相同而影响实验效果(如活动目录) 2.       实验 首先看一下se ...

  2. FPGA中将十进制数在数码管中显示(verilog版)--二进制转换为BCD码

    这周有朋友问怎样在fpga中用数码管来显示一个十进制数,比如1000.每个数码管上显示一位十进制数.如果用高级语言来分离各位,只需要分别对该数做1000,100,10对应的取商和取余即可分离出千百十个 ...

  3. 神州数码广域网Frame-Relay封装配置(即帧中继)

    实验要求:了解帧中继的配置方法 拓扑如下 R1 enable 进入特权模式 config 进入全局模式 hostname R1 修改名称 interface s0/1 进入端口 ip address ...

  4. 神州数码广域网PPP封装CHAP认证配置

    实验要求:掌握PPP封装协议下的CHAP认证 拓扑如下 R1 enable 进入特权模式 config 进入全局模式 hostname R1 修改名称 interface s0/1 进入端口 ip a ...

  5. 神州数码广域网PPP封装PAP认证配置

    实验要求:熟练掌握PAP认证配置(单向.双向) 拓扑如下: 单向 R1(验证方) enable 进入特权模式 config 进入全局模式  hostname R1 修改名称 interface s0/ ...

  6. SPI通信实验---verilog(FPGA作为从机,使用可读可写)

    本实验讲究实用性,故设计思想为:主机先向从机发送地址,若是向从机写入数据,则向从机发送数据,若是读取从机数据,则向从机发送时钟,然后在时钟下降沿读取数据即可.cs信号上升沿作为SPI通信的结束信号.r ...

  7. 2-ser2003系统封装实验报告

    Ser2003需要挂载系统镜像 至此,ser2003的母盘制作完成!!! 来自为知笔记(Wiz) 附件列表

  8. 《Java语言程序设计》上机实验

    实验一   Java环境演练   [目的] ①安装并配置Java运行开发环境: ②掌握开发Java应用程序的3个步骤:编写源文件.编译源文件和运行应用程序: ③学习同时编译多个Java源文件. [内容 ...

  9. CCNA CCNP CCIE所有实验名称完整版

    实验1:通过Console端口访问Cisco路由器  实验2:通过Telnet访问Cisco路由器  实验3:配置终端服务器  实验4:通过浏览器访问路由器  实验5:模式切换.上下文帮助及查看有关信 ...

随机推荐

  1. mysql 插入中文时出现ERROR 1366 (HY000): Incorrect string value: '\xC0\xEE\xCB\xC4' for column 'usern ame' at row 1

    1 环境: MySQL Server 6.0  命令行工具 2 问题 :  插入中文字符数据出现如下错误: ERROR 1366 (HY000): Incorrect string value: '\ ...

  2. CentOS下yum安装VNCserver

    VNC全称是Virtual Network Computing,属于远程控制类软件.其优点是支持跨操作系统的远程图形化控制.在日常工作中,服务器常常是存在机房,不可能每次需要图形界面操作就跑到机房,因 ...

  3. 转 vagrant package[打包命令]详解

    转 vagrant package[打包命令]详解   vagrant的一个非常重要的功能就是在你的同事之间分享你的box从而使大家的开发环境保持同步,打包[package]正是实现这一功能的关键所在 ...

  4. iframe 动态onload事件处理方式

    转自:http://w3help.org/zh-cn/causes/SD9022 标准参考 关于 HTML 4.01 规范中 BODY 标记的 onload 属性说明: http://www.w3.o ...

  5. .NET笔试面试题

    .NET 1.const和readonly的区别? 2.静态类和实例区别?什么时候使用? 3.接口和抽象类的区别?什么时候使用? 4.类和结构体的区别?什么时候使用? 5.文件操作 6.序列化 7.O ...

  6. [Asp.net Mvc]通过UrlHelper扩展为js,css静态文件添加版本号

    写在前面 在app中嵌入h5应用,最头疼的就是缓存的问题,比如你修改了一个样式,或者在js中添加了一个方法,发布之后,并没有更新,加载的仍是缓存里面的内容.这个时候就需要清理缓存才能解决.但又不想让w ...

  7. web_url、web_custom_request、web_submit_data、web_submit_form的使用实例

    业务:根据url获取图片用web_url()函数访问数据;请求方式:HTTP GET 请求;Action(){web_url("imageproxytest", "URL ...

  8. 使用python在SAE上搭建一个微信应用,使用有道翻译的api进行在线翻译

    1. 准备,先在使用python一步一步搭建微信公众平台(一)中基本实现自动回复的功能后,接着在有道词典上申请一个key,http://fanyi.youdao.com/openapi?path=da ...

  9. sql中文字符串获取拼音首字母

    SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO )) ) as begin ),) set @PY='' begin ) --如果非汉字字符,返回原字 ...

  10. Xen虚拟机克隆实战

    导读 在我们使用Xen虚拟化的时候,会经常创建虚拟机(VM),每次安装创建步骤比较繁琐,本文介绍通过virt-clone命令克隆xen虚拟机实战. 查看virt-clone命令是否存在 rpm -qa ...