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

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

共阴数码管(高有效):

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

共阳数码管(低有效):

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

显示程序:

头文件

/********************************Copyright**************************************
**----------------------------File information--------------------------
** File name :seg_interface.v
** CreateDate :2015.04
** Funtions :数码管封装,6位,数据为23位,4位在一个数码管上显示
** Operate on :M5C06N3L114C7
** Copyright :All rights reserved.
** Version :V1.0
**---------------------------Modify the file information----------------
** Modified by :
** Modified data :
** Modify Content:
*******************************************************************************/ module seg_interface(
clk,
rst_n, segdisplay_en,
number_data, seg_data,
seg_bit );
input clk; /* clk = 24M */
input rst_n;
input [:] number_data; /* 输入的数据 */
input segdisplay_en; /* 数码管显示使能 */
output [:] seg_data;
output [:] seg_bit; wire [:] seg_data;
wire [:] seg_bit; wire [:] number_data_reg; smg_control U1(
.clk(clk),
.rst_n(rst_n), .segdisplay_en(segdisplay_en), .number_data(number_data), //in 23位输入数据
.seg_data_reg(number_data_reg), //数据的中间变量 out to U1
.seg_bit(seg_bit) //output 6 位数码管的位数
);
smg_encode U2(
.number_data_reg(number_data_reg), //In 要显示的数据的中间变量
.seg_data(seg_data)
); endmodule

底层:

/********************************Copyright**************************************
**----------------------------File information--------------------------
** File name :smg_control.v
** CreateDate :2015.04
** Funtions :数码管的位码控制和数据控制,状态机控制,1ms转移一位数码管
** Operate on :M5C06N3L114C7
** Copyright :All rights reserved.
** Version :V1.0
**---------------------------Modify the file information----------------
** Modified by :
** Modified data :
** Modify Content:
*******************************************************************************/ module smg_control(
clk,
rst_n, segdisplay_en,
number_data,
seg_data_reg,
seg_bit
);
input clk;
input rst_n;
input [:] number_data; //共使用6个数码管,每个4位数据,共24位
input segdisplay_en; output [:] seg_data_reg;
output [:] seg_bit;
wire [:] seg_data_reg;
wire [:] seg_bit; parameter t1ms = 'd23999; /* reality */ // parameter t1ms = 15'd3; /* just fo test */
reg [:] count1;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
count1 <= 'd0;
else if(segdisplay_en)
begin
if(count1 == t1ms) count1 <= 'd0;
else count1 <= count1 + ;
end
else
count1 <= 'd0;
end //****************************************
reg [:] i;
reg [:] rnumber;
reg [:] rbit; always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
i <= 'd0;
rnumber <= 'd0;
rbit <= 'b111111; /* 有消隐的作用 */
end
else if(segdisplay_en)
begin
case(i)
'd0:
begin
if(count1 == t1ms)
i <= 'd1;
else
begin
rnumber <= number_data[:];
rbit <= 'b011111;
end
end
'd1:
begin
if(count1 == t1ms)
i <= 'd2;
else
begin
rnumber <= number_data[:];
rbit <= 'b101111;
end
end
'd2:
begin
if(count1 == t1ms)
i <= 'd3;
else
begin
rnumber <= number_data[:];
rbit <= 'b110111;
end
end
'd3:
begin
if(count1 == t1ms)
i <= 'd4;
else
begin
rnumber <= number_data[:];
rbit <= 'b111011;
end
end
'd4:
begin
if(count1 == t1ms)
i <= 'd5;
else
begin
rnumber <= number_data[:];
rbit <= 'b111101;
end
end
'd5:
begin
if(count1 == t1ms)
i <= 'd0;
else
begin
rnumber <= number_data[:];
rbit <= 'b111110;
end
end
default : i <= 'd0;
endcase
end
else
begin
i <= 'd0;
rnumber <= 'd0;
rbit <= 'b111111; /* 有消隐的作用 */
end
end assign seg_data_reg = rnumber;
assign seg_bit = rbit; endmodule
/********************************Copyright**************************************
**----------------------------File information--------------------------
** File name :smg_encode.v
** CreateDate :2015.04
** Funtions :数码管的编码文件,输入4位,输出8位
** Operate on :M5C06N3L114C7
** Copyright :All rights reserved.
** Version :V1.0
**---------------------------Modify the file information----------------
** Modified by :
** Modified data :
** Modify Content:
*******************************************************************************/ module smg_encode (
number_data_reg,
seg_data
);
input [:] number_data_reg; output [:] seg_data;
wire [:] seg_data; //parameter seg_0 = 8'b1100_0000, seg_1 = 8'b1111_1001, seg_2 = 8'b1010_0100,
// seg_3 = 8'b1011_0000, seg_4 = 8'b1001_1001, seg_5 = 8'b1001_0010,
// seg_6 = 8'b1000_0010, seg_7 = 8'b1111_1000, seg_8 = 8'b1000_0000,
// seg_9 = 8'b1001_0000;
// ----
// | |
// | |
// ----
// | |
// | |
// ---- 。 parameter seg_H_0 = 'h3f, seg_H_1 = 8'h06, seg_H_2 = 'h5b,
seg_H_3 = 'h4f, seg_H_4 = 8'h66, seg_H_5 = 'h6d,
seg_H_6 = 'h7d, seg_H_7 = 8'h07, seg_H_8 = 'h7f,
seg_H_9 = 'h67, seg_H_A = 8'h77, seg_H_B = 'h7c,
seg_H_C = 'h39, seg_H_D = 8'h5e, seg_H_E = 'h79,
seg_H_F = 'h71, seg_H_X = 8'h00; /*
parameter seg_L_0 = 8'hc0, seg_L_1 = 8'hf9, seg_L_2 = 8'ha4,
seg_L_3 = 8'hb0, seg_L_4 = 8'h99, seg_L_5 = 8'h92,
seg_L_6 = 8'h82, seg_L_7 = 8'hf8, seg_L_8 = 8'h80,
seg_L_9 = 8'h98, seg_L_A = 8'h88, seg_L_B = 8'h83,
seg_L_C = 8'hc6, seg_L_D = 8'ha1, seg_L_E = 8'h86,
seg_L_F = 8'h8e, seg_L_X = 8'hff;
*/
//*********************************************************
reg [:] rsmg;
always @(*)
begin
case(number_data_reg)
'h0: rsmg <= seg_H_0;
'h1: rsmg <= seg_H_1;
'h2: rsmg <= seg_H_2;
'h3: rsmg <= seg_H_3;
'h4: rsmg <= seg_H_4;
'h5: rsmg <= seg_H_5;
'h6: rsmg <= seg_H_6;
'h7: rsmg <= seg_H_7;
'h8: rsmg <= seg_H_8;
'h9: rsmg <= seg_H_9;
'ha: rsmg <= seg_H_A;
'hb: rsmg <= seg_H_B;
'hc: rsmg <= seg_H_C;
'hd: rsmg <= seg_H_D;
'he: rsmg <= seg_H_E;
'hf: rsmg <= seg_H_F;
default : rsmg <= seg_H_X;
endcase
end assign seg_data= rsmg; endmodule

测试文件:

/********************************Copyright**************************************
**----------------------------File information--------------------------
** File name :seg_tb.v
** CreateDate :2015.04
** Funtions : 数码管的测试文件
** Operate on :M5C06N3L114C7
** Copyright :All rights reserved.
** Version :V1.0
**---------------------------Modify the file information----------------
** Modified by :
** Modified data :
** Modify Content:
*******************************************************************************/ `timescale ns/ ns module seg_tb;
reg clk; /* clk = 24M */
reg rst_n;
reg [:] number_data; /* 输入的数据 */
reg segdisplay_en; wire [:] seg_data;
wire [:] seg_bit; seg_interface seg_interface1(
.clk,
.rst_n,
.number_data,
.segdisplay_en(segdisplay_en), .seg_data,
.seg_bit
); parameter tck = ;
parameter t = /tck; always
#(t/) clk = ~clk; initial
begin
clk = ;
rst_n = ;
number_data = ;
segdisplay_en = ; #(*t) rst_n = ;
#(*t) segdisplay_en = ;
number_data = 'h123456; #(*t) number_data = 'h789abc;
end
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. 轻量级应用开发之(08)UITableView

    一  UITableView基本介绍 在众多移动应⽤用中,能看到各式各样的表格数据 . 在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView,UITableView继承自UISc ...

  2. PRML Chapter 1. Introduction

    PRML Chapter 1. Introduction 为了防止忘记,要把每章的重要内容都记下来,从第一章开始 2012@3@28 今天又回去稍微翻了一下第一章内容,发现第一次看的时候没有看透,每次 ...

  3. Linux下/proc目录简介

    文章转载至:http://blog.csdn.net/zdwzzu2006/article/details/7747977 1. /proc目录Linux 内核提供了一种通过 /proc 文件系统,在 ...

  4. 只能输入汉字js脚本

    <html> <head> <meta http-equiv="Content-Type" content="text/html" ...

  5. c3p0、dbcp<转>

    <!--读取文件jdbc.properties --> <bean id="config" class="org.springframework.bea ...

  6. winscp私钥如何生成

    问题1,我用SecureCRT 5.0的自带工具生成了密钥和公钥(分别是不带后缀名的密钥文件和.pub的公钥文件),传上服务器也可以正常使用.     但是我用其它一些客户端工具连接时需要的密钥文件是 ...

  7. 漫长Appium之路(二)——Appium安装与使用总结

    前面介绍了iOS自动化工具的Appium所需的虚拟机环境,接下来介绍下Appium的安装与使用方法,这个足足折腾我将近一个星期.网上没有什么详细的资料,对于遇到的各种各样问题也没用提供明确的解决方法. ...

  8. Currency Exchange(Bellman-ford)

    Currency Exchange Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 21349   Accepted: 765 ...

  9. java笔记--用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程

    用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程 ThreadLocal在我的笔记"关于线程同步"的第5种方式里面有介绍,这里就不多说了. ...

  10. [Effective JavaScript 笔记]第56条:避免不必要的状态

    API有时被归为两类:有状态的和无状态的.无状态的API提供的函数或方法的行为只取决于输入,而与程序的状态改变无关.字符串的方法是无状态的.字符串的内容不能被修改,方法只取决于字符串的内容及传递给方法 ...