FPGA_工程_按键控制的基于Rom数码管显示

一 信号

框图:

其中 key_filter seg_595_dynamic均为已有模块,直接例化即可使用,rom_8*256模块,调用rom ip实现。Rom_ctrl模块需要重新编写。

波形图:

二 代码

module key_fliter
#(
   parameter  CNT_MAX =24'd9_999_999
(
  input wire sys_clk,
  input wire sys_rst_n,
  input wire key1,
  input wire key2,
 
  output wire [7:0] addr
);
 
reg [2:0] cnt_200ms;//定义中间变量。
reg       key1_en;
reg       key2_en;

always@(posedge sys_clk or negedge sys_rst_n)
   if(sys_rst_n==1'b0)//异步复位。
       cnt_200ms<=24'd0;//赋初值。
   else   if(cnt_200ms ==CNT_MAX || key1_en ==1'b1 || key2_en == 1'b1)
       cnt_200ms<= 24'd0;//清零。
   else  
       cnt_200ms <= cnt_200ms + 1'b1;//计数。


always@(posedge sys_clk or negedge sys_rst_n)
   if(sys_rst_n==1'b0)//异步复位。
        key1_en_<=1'b0;//赋初值。
     else      if(key2 == 1'b1)
        key1_en<=1'b0;//取低电平。
     else      if(key1 ==1'b1)
        key1_en<=~key1_en;//取反。
     else 
        key1_en<=~key1_en;//保持。

always@(posedge sys_clk or negedge sys_rst_n)
   if(sys_rst_n==1'b0)//异步复位。
        key2_en_<=1'b0;//赋初值。
     else      if(key1 == 1'b1)
        key2_en<=1'b0;//取低电平。
     else      if(key2 ==1'b1)
        key2_en<=~key2_en;//取反。
     else 
        key2_en<=~key2_en;//保持。
        
always@(posedge sys_clk or negedge sys_rst_n)
   if(sys_rst_n==1'b0)//异步复位。
        addr <= 8'd0;//赋初值。
     else      if(addr == 8'd255 && cnt_200ms ==CNT_MAX)
        addr <= 8'd0;
     else      if(key1 == 1'b1)
        addr <= 8'd99;
     else      if(key2 == 1'b1)
        addr <= 8'd199;
     else      if(cnt_200ms ==CNT_MAX)
        addr <= addr + 1'b1;
      
endmodule
module  rom//工程顶层文件。
(
  input wire sys_clk,
  input wire key1,
  input wire sys_rst_n,
  input wire key2,
  
  output wire ds,
  output wire oe,
  output wire shcp,
  output wire stcp
);
wire key2_flag ;

wire key1_flag ;
wire [7:0] addr ;
wire [7:0] data ;

key_filter
#(
    .CNT_MAX (20'd9)
)
key_filter_inst1
(
    .sys_clk  (sys_clk),
    .sys_rst_n (sys_rst_n),
    .key_in (key1),
    
    .key_flag (key1_flag)
);//按键消抖模块实例化。

key_filter
#(
    .CNT_MAX (20'd9)
)
key_filter_inst1
(
    .sys_clk  (sys_clk),
    .sys_rst_n (sys_rst_n),
    .key_in (key2),
    
    .key_flag (key2_flag)
);//按键消抖模块实例化。

rom_ctrl_inst
(
    .sys_clk  (sys_clk),
    .sys_rst_n (sys_rst_n),
    .key1  (key1_flag),
    .key2  (key2_flag),
    
    .addr   (addr)
);//rom_ctrl模块实例化。

rom_8x236 rom_8x236_inst
(
    .address (addr),
    .clock   (sys_clk),
    .q       (data)
);//rom ip核实例化。

seg_595_dynamic  seg_595_dynamic
(
    .sys_clk  (sys_clk),
    .sys_rst_n (sys_rst_n),
    .data ({12'b0,data}),
    .point (6'b000_000),
    .sign  (1'b0),
    .seg_en (1'b1),
    
    .ds     (ds ),
    .oe     (oe ),
    .shcp   (shcp),
    
);//数码管显示模块,实例化。

代码编译通过,对顶层文件进行仿真验证。

'timescale 1ns/1ns
module  tb_rom()

reg  sys_clk;
reg  sys_rst_n;
reg  key1;
reg  key2;

wire ds;
wire oe;
wire shcp;
wire stcp;

initial
   begin
       sys_clk =1'b1;
       sys_rst_n <= 1'b0;
       key1 <= 1'b1;
       key2 <= 1'b1;
       #20
       sys_rst_n <= 1'b1;
       #700000
//key1
       key1 <= 1'b0;
       #20
       key1 <= 1'b1;
       #20
       key1 <= 1'b0;
       #20
       key1 <= 1'b1;
       #20
       key1 <= 1'b0;
       #20
       key1 <= 1'b1;
       #20
       key1 <= 1'b0;
       #20
       key1 <= 1'b1;
       #20
       key1 <= 1'b0;
       #20
       key1 <= 1'b0;
//key2
       #20000
       key2 <= 1'b0;
       #20
       key2 <= 1'b1;
       #20
       key2 <= 1'b0;
       #20
       key2 <= 1'b1;
       #20
       key2 <= 1'b0;
       #200
       key2 <= 1'b1;
       #20
       key2 <= 1'b0;
       #20
       key2 <= 1'b1;
       #20
       key2 <= 1'b0;
       #20
       key2 <= 1'b0;
    end

always #10 sys_clk = ~sys_clk;

rom rom_inst
(
     .sys_clk    (sys_clk),
     .sys_rst_n  (sys_rst_n),
     .key1       (key1),
     .key2       (key2),

     .ds         (ds),
     .oe         (oe),
     .shcp       (shcp),
     .stcp       (stcp)
);

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/378794.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于微信小程序的新生报到系统的研究与实现,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

分布式springboot 3项目集成mybatis官方生成器开发记录

文章目录 说明实现思路实现步骤第一步&#xff1a;创建generator子模块第二步&#xff1a;引入相关maven插件和依赖第三步&#xff1a;编写生成器配置文件第四步&#xff1a;运行查看结果 说明 该文章为作者开发学习记录&#xff0c;方便以后复习和交流主要内容为&#xff1a;…

Zoho Mail企业邮箱商业扩展第3部分:计算财务状况

在Zoho Mail商业扩展系列的压轴篇章中&#xff0c;王雪琳利用Zoho Mail的集成功能成功地完成了各项工作&#xff0c;并顺利地建立了自己的营销代理机构。让我们快速回顾一下她的成功之路。 一、使用Zoho Mail成功方法概述 首先她通过Zoho Mail为其电子邮件地址设置了自定义域…

如何开始深度学习,从实践开始

将“如何开始深度学习”这个问题喂给ChatGPT和文心一言&#xff0c;会给出很有专业水准的答案&#xff0c;比如&#xff1a; 要开始深度学习&#xff0c;你可以遵循以下步骤&#xff1a; 学习Python编程语言的基础知识&#xff0c;因为它在深度学习框架中经常被使用。 熟悉线性…

2023年出版的新书中提到的《人月神话》(202402更新)(2)共8本

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 《人月神话》于1975年出版&#xff0c;1995年出二十周年版。自出版以来&#xff0c;该书被大量的书籍和文章引用&#xff0c;直到现在热潮不退。 2023年&#xff0c;清华大学出版社推…

嵌入式学习之Linux入门篇笔记——13,Linux第一个程序HelloWorld

配套视频学习链接&#xff1a;http://【【北京迅为】嵌入式学习之Linux入门篇】 https://www.bilibili.com/video/BV1M7411m7wT/?p4&share_sourcecopy_web&vd_sourcea0ef2c4953d33a9260910aaea45eaec8 1.什么是 gcc&#xff1f; gcc 全称&#xff08;gun compiler…

【Docker进阶】镜像制作-用Dockerfile制作镜像(一)

进阶一 docker镜像制作 文章目录 进阶一 docker镜像制作用dockerfile制作镜像dockerfile是什么dockerfile格式为什么需要dockerfileDockerfile指令集合FROMMAINTAINERLABELCOPYENVWORKDIR 用dockerfile制作镜像 用快照制作镜像的缺陷&#xff1a; 黑盒不可重复臃肿 docker…

设计模式3-责任链模式

责任链模式是一种行为设计模式&#xff0c;它允许你创建一个对象链。请求沿着这条链传递&#xff0c;直到有一个对象处理它为止。这种模式通常用于需要以某种方式动态地决定处理请求的顺序或方式的情况。 类图&#xff1a; 从图中可见最大的特点是AbstractHandler它自己聚合了自…

【多模态大模型】BridgeTower:融合视觉和文本信息的多层语义信息,主打复杂视觉-语言任务

BridgeTower 核心思想子问题1&#xff1a;双塔架构的局限性子问题2&#xff1a;不同层次的语义信息未被充分利用子问题3&#xff1a;模型扩展性和泛化能力 核心思想 论文&#xff1a;https://arxiv.org/pdf/2206.08657.pdf 代码&#xff1a;https://github.com/microsoft/Bri…

《剑指 Offer》专项突破版 - 面试题 30 和 31:详解如何设计哈希表以及利用哈希表设计更加高级、复杂的数据结构

目录 一、哈希表的基础知识 二、哈希表的设计 2.1 - 插入、删除和随机访问都是 O(1) 的容器 2.2 - 最近最少使用缓存 一、哈希表的基础知识 哈希表是一种常见的数据结构&#xff0c;在解决算法面试题的时候经常需要用到哈希表。哈希表最大的优点是高效&#xff0c;在哈希表…

【图形图像的C++ 实现 01/20】 2D 和 3D 贝塞尔曲线

目录 一、说明二、贝塞尔曲线特征三、模拟四、全部代码如下 一、说明 以下文章介绍了用 C 计算和绘制的贝塞尔曲线&#xff08;2D 和 3D&#xff09;。    贝塞尔曲线具有出色的数学能力来计算路径&#xff08;从起点到目的地点的曲线&#xff09;。曲线的形状由“控制点”决…

可达鸭二月月赛——入门赛第四场T1题解

姓名 王胤皓 AC 记录 题意 有一个圆桶&#xff0c;底面半径为 r r r &#xff0c;高为 h h h。 问&#xff1a;小可每天都需要喝水 20 20 20 升&#xff0c;请问小可至少需要用这个桶接几杯水呢&#xff1f; 思路 首先求出圆桶能装的水&#xff0c;也就是这个圆桶的体…

上下固定中间自适应布局

实现上下固定中间自适应布局 1.通过position:absolute实现 定义如下结构 <body> <div class="container"> <div class="top"></div> <div class="center"></div> <div class="bottom"&…

Unity BuffSystem buff系统

Unity BuffSystem buff系统 一、介绍二、buff系统架构三、架构讲解四、框架使用buff数据Json数据以及工具ShowTypeBuffTypeMountTypeBuffOverlapBuffShutDownTypeBuffCalculateType时间和层数这里也不过多说明了如何给生物添加buff 五、总结 一、介绍 现在基本做游戏都会需要些…

springboot167基于springboot的医院后台管理系统的设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

【JS逆向五】逆向模拟某网站的生成的【jsonKey】值 仅供学习

逆向日期&#xff1a;2024.02.07 使用工具&#xff1a;Node.js 加密方法&#xff1a;AES 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 可使用AES进行解密处理&#xff08;直接解密即可&#xff09;&#xff1a;在线AES加解密工具 1、打开…

作业2.8

1、选择题 1.1、以下选项中,不能作为合法常量的是 ____B______ A&#xff09;1.234e04 B&#xff09;1.234e0.4 C&#xff09;1.234e4 D&#xff09;1.234e0 1.2、以下定义变量并初始化错误的是_____D________。 A) char c1 ‘H’ &#xff1b; B) char c…

MPLS VPN功能组件

VPN实例 VPN实例即为VPN路由转发表VRF&#xff0c;不同VPN之间的路由隔离通过VPN实例实现&#xff0c;PE上存在多个路由转发表&#xff0c;包括一个公网路由转发表&#xff0c;以及一个或多个VPN路由转发表。 PE为每个直接相连的Site建立并维护专门的VPN实例&#xff0c;VPN实…

JavaScript表单:事件和方法提交

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 表单 是 web 开发中不可或缺的一部分&#xff0c;用于收集用户输入的…

Bootstrap学习三

Bootstrap学习三 文章目录 前言四、Bootstrap插件4.1. 插件概览4.1.1. data属性4.1.2. 编程方式的API4.1.3. 避免命名空间冲突4.1.4. 事件 4.2. 模态框4.2.1. 引入4.2.2. 基本结构4.2.3. 基本使用4.2.4. 触发模态框的方法 4.3. 下拉菜单和滚动监听4.3.1. 下拉菜单4.3.2. 滚动监…