Verilog 学习第二节(设计一个以1s频率闪烁的LED灯)

这篇具有很好参考价值的文章主要介绍了Verilog 学习第二节(设计一个以1s频率闪烁的LED灯)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

设计一个以1s频率闪烁的LED灯(亮灭各500ms)

思考步骤:fpga开发板上默认的时钟频率是50MHz,就是20ns闪烁一次,若要完成500ms闪烁一次的话就需要进行计数,500ms/20ns=25000000次,需要设置一个计数变量cnt进行记录,其位数应该等于25位,然后需要注意的是从0开始计数到25000000-1次的时候就可以了,不要记到整,因为它还需要进行个归零状态也需要一次时钟计数
eg:如果要计数4次,则需要的是0-1,1-2,2-3,3-0,0-1这样的循环;
同时不要忘记设置复位按钮,有了以上的思考就可以开始编写代码了~
verilog实现led灯闪烁程序,FPGA学习,学习,fpga开发
注:虽然以下的代码仿真验证都有效,但是我个人觉得还是不是最完美的代码,自己还需要学习,因为if后面没有else,以及if else后面没有else感觉会生成多余的电路元件,自己进行了测试见文末好像也没有很大区别(再议)


module Led_1s(
    input clk,
    input reset_n,//低电频有效
    output reg led
    );
    reg [24:0]cnt;
    //这种方法是小梅哥推荐的方法说把变量cnt和led分开写比较有利于硬件的识别
    //自己也不是很懂,但是就先学着这种方法
        // always@(posedge clk or negedge reset_n)
    // if(!reset_n)
    //   cnt<=0;
    // else if(cnt==25000000-1)
    //    cnt<=0;
    // else
    //    cnt<=cnt+1'd1;

    // always@(posedge clk or negedge reset_n)
    // if(!reset_n)
    //   led<=0;
    // else if(cnt==25000000-1)
    //    led<=!led; 
  
//下面这个是我最开始写的版本~  
    always@(reset_n)begin
    if(!reset_n)begin
      cnt=0;//这里要不要写else呢?
      led=0;
     end
    end
    //注意时序电路中要使用非阻塞赋值
    always@(posedge clk)begin
    if(cnt<25'd25000000)
    cnt<=cnt+1;
    else
    begin
    cnt<=0;
    led<=!led;
    end
    end
endmodule

测试文件

`timescale 1ns / 1ns


module Led_1s_tb();
    reg clk;
    reg reset_n;
    wire led;

    Led_1s Led_1s(
    .clk(clk),
    .reset_n(reset_n),
    .led(led)
    );
    initial begin
        clk=1;
        reset_n=0;
        #200
        reset_n=1;
        #2000000000//表示2s
        $stop;
    end
    always#10 clk=!clk;
    
endmodule

verilog实现led灯闪烁程序,FPGA学习,学习,fpga开发

我自己写的方法的电路模拟(以及填了else 以后没啥区别都是这个图)
verilog实现led灯闪烁程序,FPGA学习,学习,fpga开发
小梅哥方法的电路图
verilog实现led灯闪烁程序,FPGA学习,学习,fpga开发

D触发器能够保存一定时间的数据,所以在设置的时候要设置成reg模式
verilog实现led灯闪烁程序,FPGA学习,学习,fpga开发文章来源地址https://www.toymoban.com/news/detail-527743.html

到了这里,关于Verilog 学习第二节(设计一个以1s频率闪烁的LED灯)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++学习——第二节课-输入输出

    大家好,我是涵子。今天我们来学习C++中的输入输出。 目录 一、电脑中的输入输出 二、C++中的输入输出 2.1.输入并输出 2.2.cin的用法 2.3.多个输入  三、变量 3.1.声明 3.2.赋值 四、总结 日常生活中常见的电脑、手机、电视机外部接口,也就是I/O(输入/输出)接口部分,其样式

    2024年02月09日
    浏览(39)
  • 【学习记录】STM32中断进阶任务:按键控制指示灯闪烁频率

    采用德飞莱STM32板,主控芯片STM32F103ZET6。 任务内容 :利用按键B1控制指示灯LD2的闪烁频率,闪烁频率设置为3档:初始状态时,LD2按照2Hz的频率闪烁;第一次按键后,LD2按照10 Hz的频率闪烁;第二次按键后,LD2按照20Hz的频率闪烁。再次按键后让LD2恢复以2Hz的频率闪烁,并重复

    2024年02月07日
    浏览(59)
  • 【JavaEE进阶】——第二节.Spring核心和设计思想

    文章目录 前言 一、Spring是什么? 二、什么是容器? 三、什么是IoC? 3.1 初始loC 3.2 举例解释loC 3.3 Spring IoC思想的体现 四、什么是DI? 4.1DI的概念 4.2 Ioc和DI的区别 总结 今天我们将进入到有关spring的认识当中,要使用它的前提就是要认识并熟悉它,上一节我们介绍了有关mave

    2023年04月18日
    浏览(41)
  • 第二节 3-8译码器设计实现与相关语法基础

    目录 前言 一、三八译码器基本理论 1.3-8译码器框图 2.3-8译码器真值表 二、fpga实现步骤 1.设计输入 2.功能仿真 1.testbench编写 2.仿真结果 1.3-8译码器基本理论 2.fpga设计实现三八译码器 3.基本语法:always 语句/数字表示形式/位拼接{} 提示:以下是本篇文章正文内容,下面案例可

    2024年02月11日
    浏览(34)
  • uni-app的学习【第二节】

    uni-app页面路由全部交给框架统一管理,需要在pages.json里配置每个路由页面的路径以及页面样式(类似小程序在app.json中配置页面路由)   接着第一节的文件,在pages里面新建三个页面 将之前的首页替换为下面的内容,其他页面如下图 然后打开pages.json文件 如果会自动生成的

    2024年02月02日
    浏览(39)
  • 【机器学习sklearn】第二节:线性回归和线性分类

    作者 🕵️‍♂️:让机器理解语言か   专栏 🎇:机器学习sklearn 描述 🎨:本专栏主要分享博主学习机器学习的笔记和一些心得体会。 寄语 💓:🐾没有白走的路,每一步都算数!🐾          监督学习(英语:Supervised learning)是机器学习中最为常见、应用最为广泛的

    2023年04月26日
    浏览(61)
  • Linux学习第二十二节-网卡IP设置

    1. 修改网卡IP地址 方式一:通过修改 网卡配置文件 修改 网卡配置文件位置: /etc/sysconfig/network-scripts/网卡名 #ifconfig   表示用于显示和设置网卡的参数 #ip addr   表示用于显示和设置网卡的参数   #systemctl restart network 表示重启网络 #ifup 网卡名 表示启动该网卡设备 #ifdown 网卡

    2024年02月17日
    浏览(58)
  • 【Python零基础学习入门篇②】——第二节:Python的常用语句

    ⬇️⬇️⬇️⬇️⬇️⬇️ ⭐⭐⭐Hello,大家好呀我是陈童学哦,一个普通大一在校生,请大家多多关照呀嘿嘿😁😊😘 🌟🌟🌟 技术这条路固然很艰辛,但既已选择,该当坚毅地走下去,加油! 🌤️PUA: ” 你所看到的惊艳都曾平庸历练 **“**🚀🚀🚀 🍉🍉🍉 最后让我

    2024年02月04日
    浏览(38)
  • STM32使用定时器更新中断使LED亮灭交替1S闪烁

    在向上计数模式中,计数器从0计数到自动加载值(TIMx_ARR(自动装载寄存器)计数器的内容),然后重新从0开始计数并且产生一个计数器溢出事件。每次计数器溢出时可以产生更新事件,当使能了更新中断以后,计数器溢出时则产生更新中断。 上图源自一位b站up主的定时器中断

    2024年02月05日
    浏览(51)
  • Verilog学习二:设计一个一位全加器

    本部分将不再介绍Vivado工程的整体流程,将主要精力放在代码上面,具体的流程可参考:https://blog.csdn.net/crodemese/article/details/130438348 本部分代码也已上传到github:https://github.com/linxunxr/VerilogStudy 那么什么是全加器呢?我们都知道加法,即1+1=2,当个位数相加大于9时就需要进位。

    2024年02月08日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包