四位数码管3641AS的FPGA实现

2023-11-07

       一、数码管介绍

         四位数码管3641AS为一款共阴极的四位八段数码管,其具体的每一段为单个二极管,可通过压降实现点亮,通过控制单位多段二极管的点亮实现数字或字母等字符。

        共阴极:八段发光二极管的阴极端连接在一起,阳极端分开控制,使用时候公共端接地,要使哪个发光二极管亮,则对应的阳极端接高电平;
        共阳极:八段发光二极管的阳极端连接在一起,阴极端分开控制,使用时候公共端接电源,要使哪个发光二极管亮,则对应的阴极端接低地。

此处为共阴极,其具体原理图如下:

         如图所示:A—DP为输入端,全部在二极管的正极,二极管的负极共同接地。只有当A—DP输入为高电平的时候,二极管才导通,然后对应的段发亮。

二、实验功能

        点亮后两位数码管,通过按键实现数据的自加,即按下一次按键,数码管显示的数据加一。

三、代码讲解

1、顶层top文件

`timescale 1ns / 1ps
module top_seg_key(
input       sys_clk,            //时钟信号
input       sys_rst_n,          //复位信号
input       key,                //按键信号
output wire [3:0]    sel,       //输出四位位选
output wire [7:0]    seg_data   //输出八位段选
);

key key_inst(                   //按键模块
    .sys_clk       (sys_clk),
    .sys_rst_n     (sys_rst_n),
    .key           (key),
    .key_flag      (key_flag)
    );

seg seg_inst(                    //数码管显示模块
    .sys_clk        (sys_clk),
    .sys_rst_n      (sys_rst_n),
    .key_flag       (key_flag),
    .sel            (sel),
    .seg_data       (seg_data)
    );

endmodule

     此模块为顶层模块,例化了按键模块,数码管显示模块,输入了时钟信号,复位信号及按键信号,输出了四位位选信号及八位段选信号。

 2、数码管显示模块

`timescale 1ns / 1ps

module seg(
input               sys_clk,
input               sys_rst_n,
input               key_flag,
output reg [3:0]    sel,
output reg [7:0]    seg_data
    );

parameter       cnt_1ms = 50_000; //1ms;
reg     [31:0]  cnt;
reg     cnt_flag;   //1ms标志
reg     [2:0]   cnt_sel;   //位选计数
reg        state = 0;

//--------------计数1ms------------------//
always @(posedge sys_clk or negedge sys_rst_n)
if(!sys_rst_n)
    cnt <= 0;
else
begin
    if(cnt >= cnt_1ms - 1)
        cnt <= 0;
    else
        cnt <= cnt + 1;
end

always @(posedge sys_clk or negedge sys_rst_n)
if(!sys_rst_n)
    cnt_flag <= 1'b0;
else 
begin
    if(cnt == cnt_1ms - 1)
        cnt_flag <= 1'b1;
    else
        cnt_flag <= 1'b0;
end

always @(posedge sys_clk or negedge sys_rst_n)    //如想实现四位数码管显示,可改变state的值
if(!sys_rst_n)
    state <= 1'b0;
else
begin
    if(cnt_flag == 1)
        state <= ~state;
    else
        state <= state;
end
reg [15:0]  num;
reg [15:0]  cnt_s = 0;

always @(posedge sys_clk or negedge sys_rst_n)
if(!sys_rst_n)
    cnt_s <= 0;
else 
begin
    if(key_flag == 1 && cnt_s == 19)
        cnt_s <= 0;
    else if(key_flag == 1)
        cnt_s <= cnt_s + 1;
    else
        cnt_s <= cnt_s;
    
end

always @(posedge sys_clk or negedge sys_rst_n)
if(!sys_rst_n)
    sel <= 4'b1111;
else
begin
    case(state)                            //两个值实现两位数码管显示,四位可依此改变
        0:
            begin
                sel <= 4'b1110;
                num <= cnt_s % 10;
            end
        1:
            begin
                sel <= 4'b1101;
                num <= cnt_s /10 % 10;
            end
    default: sel <= 4'b1111;
    endcase
end

always @(posedge sys_clk or negedge sys_rst_n)
if(!sys_rst_n)
    seg_data <= 8'b0000_0000;
else
begin
    case(num)
        0:seg_data <= 8'b0011_1111; //dp g f e d c b a
        1:seg_data <= 8'b0000_0110;
        2:seg_data <= 8'b0101_1011;
        3:seg_data <= 8'b0100_1111;
        4:seg_data <= 8'b0110_0110;
        5:seg_data <= 8'b0110_1101;
        6:seg_data <= 8'b0111_1101;
        7:seg_data <= 8'b0000_0111;
        8:seg_data <= 8'b0111_1111;
        9:seg_data <= 8'b0110_1111;
    default:seg_data <= 8'b0000_0000;
    endcase
end

endmodule 

        数码管显示模块,动态显示,通过一个1ms计数器进行位选,即每一位之间的位选间隔为1ms。此处数码管显示原理为视觉暂留效应及余晖效应。此外有数码管的静态显示为基础,不做更多原理赘述。

3、按键模块

`timescale 1ns / 1ps

module key(
input               sys_clk,
input               sys_rst_n,
input               key,
output  reg         key_flag            //按键标志信号
    );
parameter       cnt_10ms =  500_000;    //10ms
reg [31:0]  cnt = 0;

always @(posedge sys_clk or negedge sys_rst_n)
if(!sys_rst_n)
    cnt <= 0;
else
begin
    if(key)
        cnt <= 0;
    else if(cnt >= cnt_10ms - 1)
        cnt <= cnt;
    else
        cnt <= cnt + 1;
end

always @(posedge sys_clk or negedge sys_rst_n)
if(!sys_rst_n)
    key_flag <= 1'b0;
else
begin
    if(cnt == cnt_10ms - 2)
        key_flag <= 1'b1;
    else
        key_flag <= 1'b0;
end
    
endmodule

        按键模块的主要部分为按键消抖。由于机械按键的物理特性,按键被按下的过程中,存在一段时间的抖动,同时在释放按键的过程中也存在抖动,这就导致在识别的时候可能检测为多次的按键按下,而通常检测到一次按键输入信号的状态为低电平,就可以确认按键被按下了,所以我们在使用按键时往往需要消抖,以确保按键被按下一次只检测到一次低电平。此处通过计数10ms,输出正确的按键标志信号。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

四位数码管3641AS的FPGA实现 的相关文章

  • verilog 基本语法 {}大括号的使用

    的基本使用是两个 一个是拼接 一个是复制 下面列举了几种常见用法 基本用法 表示拼接 第一位 第二位 表示复制 4 a 等同于 a a a a 所以 13 1 b1 就表示将13个1拼接起来 即13 b1111111111111 拼接语法详
  • BUCK电路分析(二)

    BUCK电路分析 二 PSIM仿真同步BUCK电路 在上片文章中 初步的分析了BUCK电路的工作原理 本章使用PSIM软件仿真BUCK电路 观察分析BUCK电路器件关键波形 图1是同步BUCK电路图 开关频率设置为200K 固定占空比 在仿
  • Lattice Diamond安装

    1 下载 到Lattice官网 http www latticesemi com 注册一个lattice的账号后就可以去下载Diamond 登陆后如下图 根据自己系统情况选择对应的版本 我用的是32位win8 Diamond软件安装包和La
  • FPG—VGA显示器字符显示(附代码)

    目录 1 实操 1 1 字符取模 1 2 顶层模块 1 3 图像数据生成模块 1 3 1 模块框图 1 3 2 波形图绘制 1 3 3 代码编写 1 3 4 仿真验证 2 总结 本例程大部分与VGA显示驱动内容相同 只是显示部分改变了 故此
  • 蓝桥杯真题:迷宫

    目录 题目描述 运行限制 dfs bfs 结果 题目描述 本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 下图给出了一个迷宫的平面图 其中标记为 11 的为障碍 标记为 00 的为可以通行的地方 010000 000
  • FPGA学习笔记(一)__电平知识

    常见电平标准 文章目录 1 TTL电平标准 2 LVTTL电平标准 1 LVTTL3V3 2 LVTTL2V5 3 CMOS电平标准 4 LVCOMS电平标准 1 LVCOMS3V3 2 LVCOMS2V5 3 LVCOMS1V8 4 LV
  • ALLEGRO等长时如何将PIN DELAY和VIA长度计算在内

    在PCB设计中 对于时序要求严格的线路 Via和IC pin delay的长度必须得到重视 通过下面的操作 可将Via和Pin delay加入到线路长度的计算中 1st 计算Pin delay 打开Constraint Manager 选择
  • FPGA功耗估计(二)

    针对于Altera的Cyclone III 做出了静态功耗 对于Altera 其提供了一个功耗早期估计工具 可以在官网上下到 首先需要将宏设置为安全 在excel选型中选择文件 之后便可看到 根据相应的选择 红框部分 可以查看静态功耗 对于
  • 【ZYNQ学习】PL第一课

    这节课讲什么 这节课的名字本来是想写为LED 但这一课里除了LED也有按键 又想换为GPIO控制 但关于PL的GPIO控制 不应该这么草率和简单 而且这一课有很多和ZYNQ或者PL关联性不强的东西要说 所以我写了删删了写改了好几遍 终于定为
  • 串口通信知识点总结

    串口是串行接口 serial port 的简称 也称为串行通信接口或COM接口 串口通信是指采用串行通信协议 serial communication 在一条信号线上将数据一个比特一个比特地逐位进行传输的通信模式 串口按电气标准及协议来划分
  • 异步FIFO设计之格雷码

    目录 二进制转格雷码 格雷码转二进制 相邻的格雷码只有1bit的差异 因此格雷码常常用于异步fifo设计中 保证afifo的读地址 或写地址 被写时钟 或读时钟 采样时最多只有1bit发生跳变 在不考虑路径延时的情况下 因为源数据 读写地址
  • 用于 Verilog 或 SystemVerilog 的 TAP(测试任何协议)模块

    是否有 TAP 测试任何协议 http testanything org Verilog 的实现 那就太好了 因为这样我就可以使用证明来自动检查我的结果 更新 10 9 09 有人问为什么不使用断言 部分 TAP 为我提供了一些很好的报告
  • 如何生成异步复位verilog总是阻塞凿子

    Chisel 始终生成敏感度列表中仅包含时钟的块 always posedge clk begin end 是否可以将模块配置为使用异步重置并生成这样的始终块 always posedge clk or posedge reset begi
  • 同时读取和写入寄存器

    我计划在 FPGA 上用 VHDL 设计一个类似 MIPS 的 CPU CPU 将具有经典的五级管道 没有转发和危险预防 在计算机体系结构课程中 我了解到第一个 MIPS CPU 用于在时钟上升沿读取寄存器文件并在时钟下降沿写入 我使用的F
  • Matlab图像处理系列——图像复原之噪声模型仿真

    微信公众号上线 搜索公众号 小灰灰的FPGA 关注可获取相关源码 定期更新有关FPGA的项目以及开源项目源码 包括但不限于各类检测芯片驱动 低速接口驱动 高速接口驱动 数据信号处理 图像处理以及AXI总线等 本节目录 一 图像复原的模型 二
  • UIO 设备上的 mmap EINVAL 错误

    在尝试使用 UIO 而不是直接映射后 我在 Xilinx Zynq 上映射物理内存时遇到问题 dev mem 虽然计划是以普通用户身份运行应用程序 而不是root这仍在运行root 显然 第一个映射成功 其余映射到同一个文件描述符12 de
  • VHDL 中的 BRAM_INIT

    我正在模拟基于处理器的设计 其中程序存储器内容保存在 BRAM 中 我正在使用 VHDL 推断 BRAM 实现程序存储器 我试图避免使用 CoreGen 因为我想保持设计的可移植性 最终该设计将进入 FPGA 我想看看是否有一种方法可以使用
  • verilog $readmemh 对于 50x50 像素 RGB 图像花费太多时间

    我正在尝试编译用于 FPGA 编程的 verilog 代码 我将在其中实现 VGA 应用程序 我使用 QuartusII 和 Altera 我正在尝试正确使用 readmemh 来逐像素获取图片 现在 我已经使用 matlab 将图片转换为
  • 从 OpenCV 代码到 FPGA 代码的转换是否比 Matlab 代码更容易? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想做一个关于图像处理的项目 我想知道如果我想在FPGA上实现这个项目 我应该在第一阶段选择Matla
  • 无符号和 std_logic_vector 之间的区别

    谁能告诉我以下书面陈述之间的区别 signal A unsigned 3 downto 0 signal B std logic vector 3 downto 0 Both std logic vector and unsigned ar

随机推荐

  • 优先队列(堆)应用:动态维护可变序列的中位数

    思考下面一道题 数据流中的中位数 如何得到一个数据流中的中位数 如果从数据流中读出奇数个数值 那么中位数就是所有数值排序之后位于中间的数值 如果从数据流中读出偶数个数值 那么中位数就是所有数值排序之后中间两个数的平均值 我们使用Insert
  • lua中通过debug.sethook()动态跟踪脚本当前执行的情况,包括运行到哪行、哪个函数、哪个文件

    本文参考了 这篇博客 Lua语法小贴士 十一 debug库 凯奥斯的博客 CSDN博客 debug sethook 当执行lua脚本时 为了跟踪调试当前的运行情况 可以通过debug sethook和debug getinfo这2个函数来实
  • 解读电感和电容在交流电路中的作用

    解读电感和电容在交流电路中的作用 山东 司友毓 一 电感 1 电感对交变电流的阻碍作用 交变电流通过电感线圈时 由于电流时刻都在变化 因此在线圈中就会产生自感电动势 而自感电动势总是阻碍原电流的变化 故电感线圈对交变电流会起阻碍作用 前面我
  • 跨站脚本攻击 XSS原理

    个人对XSS攻击的笔记 原理 对可以控制传参的位置 比如url链接中 输入框中 首先闭合输出参数位置前后网页标签 在闭合的中间加上JavaScript代码或者其他的html标签 使得网页能够执行你添加的参数功能 危害 凡是js能做的 大部分
  • 【友盟+】专访:手游寒冬当下 数据运营如何让产品”活”起来

    11月17日 19日 GMGC2016第五届全球游戏开发者大会在成都东郊记忆举办 今年大会的核心版块之一 名为 生存 前两年涌出过千手游团队的成都手游圈如今继续萎缩 中小团队大量解散 人才匮乏 留下来的公司普遍也缺乏拿得出手的成功产品 拥有
  • R语言入门纪

    前几天在图书馆看书 打算找了统计类的书本补充统计学和数据分析的知识 无意中看到了这本书 菜鸟侦探跳帧数据分析 我一向喜欢看基础和应用类的入门书籍 一打开就爱不释手地看了一般 并借回家继续阅读 这是一本日本教授撰写的R语言统计应用小说 情节贴
  • 数组定义及使用

    文章目录 一 数组基本用法 1 数组的定义 2 数组的使用 二 数组作为方法的参数 1 基本用法 2 理解引用类型 3 数组作为方法的返回值 4 数组拷贝 三 二维数组 一 数组基本用法 在编写代码的过程中 有的时候会发现当需要的变量少的时
  • kubernetes域名

    验证一下重新删除并建立pod和svc pod ip和svc ip会变 1 新建rc文件 root master cat nginx test yml apiVersion v1 kind ReplicationController meta
  • js数据类型--object

    系列文章 1 从数据类型讲原型原型链 内容回顾 在JavaScript中 数据类型可以分为原始类型以及引用类型 其中原始类型包括string number boolean null undefined symbol ES6新增 表示独一无二
  • 什么是“理解”?如何在人工智能中定义“理解”?(what is understanding ?)

    这篇文章主要不是解释哲学上的 理解 而是在计算或者人工智能或是数学上定义 理解 对于人而言 理解似乎是一件简单的事情 在我们上课的时候我们能确切的知道是否理解老师所讲的内容 在我们看书的时候我们能确切的知道书中的内容我们是否理解 在我们与人
  • javascript使用方括号([])引用对象的属性和方法

    在JavaScript中 每个对象可以看作是多个属性 方法 的集合 引用一个属性 方法 很简单 即 对象名 属性 方法 名除此之外 还可以用方括号的形式来引用 对象名 属性 方法 名 注意 这里的方法名和属性名是一个字符串 而非原先点号后面
  • oday-------------powered by discuz! 7.2

    利用google搜索关键字 intxt powered by discuz 7 2 找到一个论坛 注册一个账号注册好后 使用exp http 此处为论坛地址 misc php action imme binding response res
  • 一种简单快速有效的低照度图像增强方法

    一种简单快速有效的低照度图像增强方法 一 本文介绍的是一种比较实用并且去阴影效果很好的方法 选自2004年Tao的一篇论文 名称是 An Integrated Neighborhood Dependent Approach for Nonl
  • 采编系统服务器架构,遂宁日报新闻采编系统的设计与实现

    摘要 新闻稿件采编系统是现今报社现代化办公的必备工具 它对于提高新闻报社工作效率和网络接轨有着重要的意义 随着现代社会中网络化 数字化的不断进步 单凭传统的系统加上纯手工的劳动已经越来越难以满足日报社新闻采编管理工作的需求 1 新闻稿件采编
  • python中csv、json文件的写入和读取

    txt文本文件读取 txt文本文件读取 def txt writter 写文件 函数说明文档 with open data txt w encoding utf 8 as f f write hi n 写一行 lines hello n w
  • Python 爬虫入门的教程(1小时快速入门、简单易懂、快速上手)

    这是一篇详细介绍 Python爬虫入门的教程 从实战出发 适合初学者 读者只需在阅读过程紧跟文章思路 理清相应的实现代码 30 分钟即可学会编写简单的 Python 爬虫 这篇 Python 爬虫教程主要讲解以下 5 部分内容 了解网页 使
  • Velodyne VLP16 激光雷达使用(遇到问题要学会看文档)

    VLP 16激光雷达是Velodyne公司出品的最小型的3维激光雷达 保留了电机转速可调节的功能 实时上传周围距离和反射率的测量值 VLP 16具有100米的远量程测量距离 精巧的外观设计使得安装非常方便 重量轻 只有830g 非常适合安装
  • ChatGPT帮助一名儿童确诊病因,之前17位医生无法确诊

    9月13日 Today消息 一位名叫Alex的4岁儿童得了一种浑身疼痛的怪病 每天需要服用Motrin 美林 才能止痛 3年的时间 看了17名医生无法确诊病因 新闻地址 https www today com health mom chat
  • C++ vector容器

    1 vector基本概念 vector 的数据结构和数组非常相似 也称为单端数组 不同之处在于数组是静态空间 而 vector 可以动态扩展 动态扩展 不是在原空间之后续接新空间 而是找更大的内存空间 然后将原数据拷贝新空间 释放原空间 使
  • 四位数码管3641AS的FPGA实现

    一 数码管介绍 四位数码管3641AS为一款共阴极的四位八段数码管 其具体的每一段为单个二极管 可通过压降实现点亮 通过控制单位多段二极管的点亮实现数字或字母等字符 共阴极 八段发光二极管的阴极端连接在一起 阳极端分开控制 使用时候公共端接