《FPGA学习》->流水灯设计

2023-05-16

🍎 与其担心未来,不如现在好好努力。在这条路上,只有奋斗才能给你安全感。你若努力,全世界都会为你让路。

用verilog HDL语言设计一个FPGA的流水灯程序,要求时序满足下图所示,自定义流水间隔。

设计先确定好流水间隔,我这里设置为500ms,换算成时钟周期公式为 (流转间隔时间/1S)*50MHz,单位为ns,那500ms的流转间隔得到的时钟周期为(500000/1000000000)*50000000 = 25000000(ns) 。

module waterfall_light                //模块开始,定义名称为waterfall_light
#( 
    parameter    CNT_MAX = 25'd24_999_999  //定义全局变量,时间周期为500ms      (500000/1000000000)*50000000 = 25000000(ns)  
)
(
    input    wire    sys_clk   ,      //定义sys_clk为输入模式   (时钟)
    input    wire    sys_rst_n ,      //定义sys_rst_n为输入模式 (复位)
                
    output  reg[3:0]led_out          //定义led_out为寄存器类型的输出模式
);            
                
    reg  [24:0] cnt            ;        //定义cnt为25位宽的寄存器类型
    
always@(posedge sys_clk or negedge sys_rst_n)
    begin  
        if(sys_rst_n == 1'b0)      //复位信号到来
            begin  
                cnt <= 25'd0;      //使cnt清零
            end
        else    if(cnt == CNT_MAX) //cnt计数到最大值
            begin  
                cnt <= 25'd0;      //使cnt清零
            end
        else  
            begin
                cnt <= cnt + 25'd1;//时钟信号到来,cnt的值+1
            end
    end
    
always@(posedge sys_clk or negedge sys_rst_n)
    begin 
        if(sys_rst_n == 1'b0)         //复位信号到来
            begin
                led_out <= 4'b1110; //使led_out的值改为4'b1110
            end
        else    if(cnt == CNT_MAX)    //cnt计数到最大值
            begin
                led_out <= {led_out[2:0],led_out[3]}; //1110 -> 1101 -> 1011 -> 0111 -> 1110
                                                       // a = 10; b = 01;  {a,b}= 1001
            end
        else
            begin
                led_out <= led_out; //led_out保持不变
            end
    end

endmodule    //模块结束

运行后的仿真波形如下:

从图中可以看出,运行后的仿真波形与设计需求保持一致,任务完成。仿真文件代码如下:

`timescale 1ns/1ns               //时间尺度预编译指令      时间单位/时间精度
                               
module tb_waterfall_light();     //定义模块名称为tb_waterfall_light
reg                sys_clk    ;     //定义sys_clk为reg型
reg                sys_rst_n  ;     //定义sys_rst_n为reg型
                                 
wire    [3:0]    led_out    ;     //定义led_out为reg型
                                 
initial                          //初始化
    begin                        
        sys_clk   = 1'b1  ;      //使sys_clk初始化为高电平状态
        sys_rst_n = 1'b0  ;      //使sys_clk初始化为低电平状态
        #20                      //延时20ns
        sys_rst_n = 1'b1  ;      //使sys_rst_n电平拉高
    end                          
                                 
always #10 sys_clk = ~sys_clk;   //使sys_clk电平10ns电平状态反转一次
                                 
waterfall_light                  //例化对象名称
#(                               
    .CNT_MAX (25'd24)            //改变parameter定义的参数
)                                
waterfall_light_inst             //实例化名称
(                                
    .sys_clk      (sys_clk),       //使sys_clk信号端口例化为sys_clk
    .sys_rst_n    (sys_rst_n),     //使sys_rst_n信号端口例化为sys_rst_n
                                 
    .led_out      (led_out)        //使led_out信号端口例化为led_out
);                               
                                
endmodule                        //模块结束

🔥🔥🔥本系列文章持续更新,喜欢的话可以关注收藏~🔥🔥🔥

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

《FPGA学习》->流水灯设计 的相关文章

随机推荐

  • 51安居安防手电筒拆解

    51安居安防手电筒拆解 相遇就是缘分 xff0c 欢迎 51安居这款手电筒有照明LED灯 安全锤 强力磁铁 手摇发电机 应急闪光灯 FM收音机 警报喇叭等非常多的功能 xff0c 但是自己维修比较困难 我的长辈在外面买了51安防的手电筒 x
  • 关于keil和proteus联调失败的原因探究

    1 没有在两个软件文件夹下放置 dll文件 没有在C51的INI文件中修改 2 没有安装某个 exe文件 3 在proteus中建好电路 xff0c 把keil生成的hex文件导入芯片 xff0c debug xff0c 打开远程调试 xf
  • 富斯遥控器/接收机的PWM/PPM/iBUS/SBUS通道设置

    富斯遥控器FS i6X拥有10通道输出 xff0c 富斯接收机FS iA10B拥有10通道输入 xff0c 两者都有PWM PPM iBUS SBUS协议 xff0c 但是PPM和iBUS协议最高只支持8通道 xff0c 而SBUS协议可以
  • 线程同步的四种方式

    一 xff0c 什么是线程同步和互斥 同步就是协同步调 xff0c 按预定的先后次序进行运行 如 xff1a 你说完 xff0c 我再说 这里的同步千万不要理解成那个同时进行 xff0c 应是指协同 协助 互相配合 线程同步是指多线程通过特
  • python使用cv2库、下载opencv库

    cv2库在opencv库内 xff0c 因此需要下载opencv python 1 打开windows命令行 xff1a win 43 R cmd 2 更新pip版本 xff08 不一定要 xff09 xff1a python m pip
  • PX4学习笔记(1)

    无人机飞控硬件采用Pixhawk 2 4 8 xff0c 软件采用PX4 xff0c 机架使用F450 1 安装PX4环境 1 1 安装虚拟机 VMware虚拟机 16 Pro 1 2 安装Ubuntu Ubuntu 18 04 amd64
  • PX4学习笔记(1-补)

    PX4学习笔记 xff08 1 xff09 中的1 6 安装PX4和gazebo9环境中有一条命令 sudo bash Tools setup ubuntu sh 处于对这个 sh文件的好奇 xff0c 并想分析一下内容 xff0c 于是将
  • 卡片电脑 鲁班猫ZeroW——入门笔记(1)

    由于树莓派价格过于昂贵 xff0c 且无人机又需要机载电脑 xff0c 因此一直在物色便宜好用的卡片电脑 无意中发现了野火的这款鲁班猫 xff0c 想着才260块钱 xff0c 于是买回来试试手 1 硬件结构 鲁班猫采用的是瑞芯微公司设计的
  • PX4学习笔记(2)

    1 PX4编译和仿真 1 1 第一次使用PX4 1 1 1 打开jMAVSim 找到PX4 Autopilot文件夹 xff08 2023 02 13 xff0c 新版本的PX4找不到Firmware了 xff0c 只有PX4 Autopi
  • 关于SKYDROID图传接收机无法在win10电脑上显示图像的问题分析

    因为此前图传接收机无法在win10电脑上显示图像 xff0c 多次尝试后 xff0c 我重新安装了WIN10系统 xff0c 发现禁用笔记本摄像头头 xff0c 在相机内能看到图像 xff0c 了 因此以为问题解决了 xff0c 继续安装其
  • PX4 ulg文件转换为csv(WPS或Excel打开)

    介绍 ulg文件为PX4的飞行日志文件 xff0c 可以通过python的pyulog库转换成scv格式 xff0c 用表格工具打开 下载pyulog 首先保证你的windows电脑内安装了python 3 win 43 R打开cmd 输入
  • Ubuntu18.04虚拟机MQTT服务器(1)——安装宝塔服务器面板与MQTT服务器

    1 虚拟机安装ubuntu18 04 使用VMware安装Ubuntu 18 04 64位系统 2 Ubuntu修改镜像源 在Software amp Update内修改镜像源为清华源 更新 3 安装ssh 输入以下命令 xff0c 安装远
  • ESP-01S烧录及使用,连接本地MQTT服务器

    网上的教程大多无法正常烧录与使用 xff0c 因此在这里进行总结 1 ESP 01S烧录 固件烧录建议使用专用的烧录器 xff0c 十分省心 本文讨论的是使用普通的CH340串口模块进行烧写 必须使用的工具 xff1a 杜邦线 CH340串
  • Qt学习笔记(2)——添加串口程序与调试

    1 串口调试程序总体布局 Qt版本大于5 1 1 1 在pro文件内添加serialport QT 43 61 serialport 1 2 在 h文件内添加库文件 include lt QtSerialPort gt 1 3 添加实例 h
  • AES CBC和CTR加解密实例

    AES xff08 Advanced Encryption Standard xff0c 高级加密标准 xff09 又叫Rijndael加密法 xff0c 用来替代DES算法 常见AES加密模式有ECB CBC CFB OFB和CTR等五种
  • 关于vuex使用常量替代 Mutation 事件类型的好处

    官方文档有说常量的好处 xff0c 但是的确没用过 xff0c 也不怎么懂 xff0c 就我目前有用的了解来说 在后面项目中使用了常量有如下好处 1 常量更容易避免程序出现错误 如果把一个值赋给程序中的一个常量 xff0c 而该常量已经有一
  • 多传感器融合及其应用

    后续会更新部分算法详细内容 多传感器融合及其应用 1 引言 现代雷达信息处理技术 现代雷达信息处理技术分为三个层次 xff1a 雷达信号处理与目标检测 但不雷达数据处理和多部雷达系统数据融合 有时也分别称为雷达信息一次处理 雷达信息二次处理
  • 《结构化编程》— LED灯为例

    你有过看很久以前项目代码看不太懂的情况吗 xff1f 你有过做一个项目就要从零重构代码的烦恼吗 xff1f 你有过那种遇到项目后无从入手编写的困扰吗 xff1f 诸君且看 xff0c 我是如何用一个LED灯代码去做结构化编程的 xff0c
  • 《FPGA学习》->点亮一颗LED灯

    x1f34e 与其担心未来 xff0c 不如现在好好努力 在这条路上 xff0c 只有奋斗才能给你安全感 你若努力 xff0c 全世界都会为你让路 大家刚开始接触硬件编程的话 xff0c 我想大多都是从点亮一颗LED灯开始 xff0c 学习
  • 《FPGA学习》->流水灯设计

    x1f34e 与其担心未来 xff0c 不如现在好好努力 在这条路上 xff0c 只有奋斗才能给你安全感 你若努力 xff0c 全世界都会为你让路 用verilog HDL语言设计一个FPGA的流水灯程序 xff0c 要求时序满足下图所示