【IC设计】Verilog线性序列机点灯案例(一)(小梅哥课程)

文章目录

  • 设计目标
  • 思路
  • 仿真结果
    • 时间点一:201ns
    • 时间点二:220ns
    • 时间点三:250,000,220ns
    • 时间点四:1,000,000,200ns
    • 时间点五:1,000,000,220ns
  • 总结:

案例和代码来自小梅哥课程,本人仅对知识点做做笔记,如有学习需要请支持官方正版。

设计目标

让主频50MHz的FPGA每0.25s亮,0.75s灭,如图所示:
可以看到其中1s对应50,000,000个周期,即50MHz,每个周期20ns
50MHz时钟下度过的周期和时间对应关系如下:

周期数量对应时间
12,500,0000.25秒
50,000,0001秒
37,500,0000.75秒

在这里插入图片描述

思路

由于需要计数到50,000,000-1,那么我们计数器的位宽可以设置为26位,2^26=67,108,864,足够计数到50,000,000-1。

reg [25:0] count;

我们的核心目标其实是让led亮12,500,000个周期,然后灭37,500,000个周期,如此反复。
想象下现实中的秒表,从0开始计时,到59,再变为0,刚好是60秒,同理,我们的计数器也是从0开始计数,当上升沿检测到50,000,000-1时,说明已经经历了1秒,所以复位为0

Led灯按照0.5秒闪烁的代码如下,我们在这个基础上改一改
在这里插入图片描述

module led_ctrl0(clk,rst_n,led_out
);input clk;input rst_n;output reg led_out;reg [25:0] counter;//第一个always负责counter计数器always@(posedge clk or negedge rst_n) beginif(!rst_n) begincounter <= 0;end else if(counter == 50_000_000-1) begincounter <= 0 ;end else begincounter <= counter + 1'd1;endend//第二个always负责led_out亮灭always@(posedge clk or negedge rst_n) beginif(!rst_n) beginled_out <= 1'b0;end else if(counter == 0 ) beginled_out <= 1'd1;end else if(counter == 1250_0000) beginled_out <= 1'd0;endend
endmodule
`timescale 1ns / 1psmodule led_ctrl_tb();reg clk;reg rst_n;wire led;led_ctrl0 led_ctrl0_inst0(.clk(clk),.rst_n(rst_n),.led_out(led));initial clk = 1;always #10 clk = ~clk;initial beginrst_n = 0;#201rst_n = 1;#2000000000;$stop;endendmodule

仿真结果

我们把变量转换的几个时间点看一遍,请注意我截图中黄色的marker:

时间点一:201ns

在这里插入图片描述
201ns时rst_n低电平复位信号由0变成1,即在此之后复位信号就无效了。

时间点二:220ns

在这里插入图片描述
在220ns,
第一个always负责counter计数器,检测到counter为0,自增为1
第二个always负责led_out亮灭,检测到counter为0,令led为1
后面每次上升沿时检测到的counter的值就是led亮了多久

时间点三:250,000,220ns

在这里插入图片描述在250,000,220ns
第一个always负责counter计数器,检测到counter为12,500,000,还没到1秒对应的50,000,000-1,所以继续自增。
第二个always负责led_out亮灭,检测到counter为12,500,000,说明已经亮了0.25秒,所以直接灭掉。

时间点四:1,000,000,200ns

在这里插入图片描述
第一个always负责counter计数器,检测到counter到了50,000,000-1,所以counter归零。

第二个always负责led_out亮灭,counter为49999999,不是0,所以继续灭。

时间点五:1,000,000,220ns

在这里插入图片描述
第一个always负责counter计数器,检测到counter为0,自增为1
第二个always负责led_out亮灭,counter为0,所以点亮led

总结:

从时间点五这个图中可以看出counter计数器当检测到49999999时,实际上已经计数完1秒了,原因是上升沿检测的时候49999999已经持续了一个周期。
led从counter为0到counter为12,500,000刚好亮0.25秒,因为检测到0时实际上会立刻跳变为1,0时刻并不是一个周期,而12,500,000是完整地过了一个周期。然后从12,500,001到49999999,再加上0时刻刚好是0.75秒。所以功能是没问题的。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ansible】ansible的介绍和安装

前言运维自动化 云计算核心职能 搭建平台架构 日常运营保障 性能效率优化 相关工具 代码管理&#xff08;SCM&#xff09;&#xff1a;GitHub、GitLab、BitBucket、SubVersion 构建工具&#xff1a;maven、Ant、Gradle 自动部署&#xff1a;Capistrano、CodeDeploy 持续…

代码+视频,R语言使用BOOT重抽样获取cox回归方程C-index(C指数)可信区间

bootstrap自采样目前广泛应用与统计学中&#xff0c;其原理很简单就是通过自身原始数据抽取一定量的样本&#xff08;也就是取子集&#xff09;&#xff0c;通过对抽取的样本进行统计学分析&#xff0c;然后继续重新抽取样本进行分析&#xff0c;不断的重复这一过程N&#xff0…

针对BSV区块链新推出的网络访问规则NAR和警报系统AS的解释与问答

​​发表时间&#xff1a;2024年2月22日 BSV区块链社区团队最近开设了一个Twitter&#xff08;X&#xff09;话题空间&#xff0c;讨论BSV区块链协会最新推出的网络访问规则和警报系统的相关问题。 本次讨论由BSV区块链社区负责人Brett Banfe主持&#xff0c;以便社区成员更好…

【PTA】L1-039 古风排版(C++)

题目链接&#xff1a;L1-039 古风排版 - 团体程序设计天梯赛-练习集 (pintia.cn) 目录&#xff1a; 目录&#xff1a; 题目要求&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 思路&#xff1a; 代码&#xff1a; 测试结…

AMRT 3D 数字孪生引擎(轻量化图形引擎、GIS/BIM/3D融合引擎):智慧城市、智慧工厂、智慧建筑、智慧校园。。。

AMRT3D 一、概述 1、提供强大完整的工具链 AMRT3D包含开发引擎、资源管理、场景编辑、UI搭建、项目预览和发布等项目开发所需的全套功能&#xff0c;并整合了动画路径、精准测量、动态天气、视角切换和动画特效等工具。 2、轻量化技术应用与个性化定制 AMRT3D适用于快速开…

基于GA优化的CNN-GRU-Attention的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1卷积神经网络&#xff08;CNN&#xff09;在时间序列中的应用 4.2 长短时记忆网络&#xff08;LSTM&#xff09;处理序列依赖关系 4.3 注意力机制&#xff08;Attention&#xff09; 4…

matplotlib绘图如何处理日期数据如“x月x日”

问题描述 数据文件如下图所示&#xff1a; 想要绘制横坐标为Date&#xff0c;纵坐标为Height的折线图&#xff08;其他类型的图也是类似的&#xff09;。关键的问题在于如何处理这种日期数据&#xff0c;正常绘图&#xff0c;并设置横坐标每隔x天显示刻度。 本文提供一个解决…

STM32初识2

复位和时钟控制&#xff08;RCC&#xff1a;reset clock control&#xff09; 系统复位 当发生以下任一事件时&#xff0c;产生一个系统复位&#xff1a; 1. NRST 引脚上的低电平 ( 外部复位 ) 2. 窗口看门狗计数终止 (WWDG 复位 ) 3. 独立看门狗计数终止 (IWDG 复位 ) …

服务器遭遇挖矿病毒syst3md及其伪装者rcu-sched:原因、症状与解决方案

01 什么是挖矿病毒 挖矿病毒通常是恶意软件的一种&#xff0c;它会在受感染的系统上无授权地挖掘加密货币。关于"syst3md"&#xff0c;是一种特定的挖矿病毒&#xff0c;它通过在受感染的Linux系统中执行一系列复杂操作来达到其目的。这些操作包括使用curl从网络下载…

我的尝试:Codigger + Vim

若您愿意耐心投入&#xff0c;学习 Vim 的过程其实远比想象中轻松。我对 Vim 产生兴趣&#xff0c;主要是源于它对提升生产力的巨大潜力。我尝试了 Neovim、NvChad 以及 Codigger Vim 插件&#xff0c;如今我的工作效率已远超从前。 那么&#xff0c;Vim 究竟是什么呢&#xff…

linux之权限管理和组

一&#xff0c;ACL权限 1.1&#xff0c;什么是acl权限&#xff1f; ACL是Access Control List的缩写&#xff0c;即访问控制列表。可以通过下列的实例来理解ACL的作用&#xff1a; 思考如何实现如下的权限控制&#xff1a; 每个项目成员在有一个自己的项目目录&#xff0c;…

MySQL MHA故障切换

目录 一、案例分析 1.1、案例概述 1.2、案例前置知识点 1&#xff09;什么是 MHA 2&#xff09;MHA 的组成 3&#xff09;MHA 的优势 4&#xff09;MHA 现状 1.3、案例环境 1&#xff09;本案例环境 ​编辑 2&#xff09;案例需求 3&#xff09;案例实现思路…