03_led_horse_run_v1 跑马灯

devtools/2024/9/21 0:09:09/

03_led_horse_run_v1

在Verilog中实现跑马灯通常涉及到使用一个计数器来控制LED灯的亮灭顺序。
跑马灯是一种常见的电子显示方式,它通过控制多个LED灯的顺序点亮,形成一种动态的视觉效果,看起来就像灯在“跑”一样。

更新

使用dip开关控制跑马灯的速度和方向

知识点:

  • 循环移位寄存器的使用
  • 两种不同的组合逻辑赋值风格(assign, always(*))
  • 灵活利用参数设计可复用模块(模块级参数,局部参数)
module led_horse_run #(parameter LED_ON  = 1'b0,  //led active lowparameter CLK_FREQ  = 50*1000*1000 //frequency of input clock
)(input  clk,input  rst_n,input wire [5:0] dip_u6,output reg [5:0] led
);//
//Local parameter, same as const in c/c++
//For 50Mhz clock, 
//one second count to 50*1000*1000 
//one millisecond count to 50*1000 
//localparam ONE_SECOND = CLK_FREQ;
localparam HALF_SECOND = ONE_SECOND / 2;
localparam ONE_MSECOND = ONE_SECOND / 1000;//-------------------------------------------
//control the running speed and direction 
//according to the status of dip keys
wire [1:0] speed = dip_u6[1:0];
wire direct = dip_u6[5];//First style of assignment for combinational logic, (not for sequential logic)
//Note: left value must be wire type, here 'wire [31:0] count_max;'
wire [31:0] count_max;  
assign count_max =  (speed == 0) ? ONE_MSECOND * 2000 :(speed == 1) ? ONE_MSECOND * 1000 :(speed == 2) ? ONE_MSECOND * 500 : ONE_MSECOND * 200;
/*
//another style of assignment of combinational logic
//Note: left value must be reg type, here 'reg [31:0] count_max;'
reg [31:0] count_max;  
always @(*) begincount_max =     (speed == 0) ? ONE_MSECOND * 2000 :(speed == 1) ? ONE_MSECOND * 1000 :(speed == 2) ? ONE_MSECOND * 500  : ONE_MSECOND * 200;
end
*///---------------------------------------------------------
reg [31:0] count; 
wire time_on = (count == count_max-1);always @(posedge clk) beginif(~rst_n) count <= 0;else if(time_on) count <= 0;else count <= count + 1;
endwire [5:0] init_led_status = (LED_ON == 1'b1) ? 6'b000001 : 6'b111110;always @(posedge clk) beginif(~rst_n) led <= init_led_status;else if(time_on) beginif(direct == 1'b1) led <= {led[4:0], led[5]} ;  //shift leftelse led <= {led[0],led[5:1]} ;                 //shift rightend//else led <= led;
endendmodule

扩展思维

适了解流水灯和跑马灯的区别,适当修改上面的跑马灯代码实现流水灯的效果。


http://www.ppmy.cn/devtools/34240.html

相关文章

sklearn和torch计算的r2 score不一样

检查一下函数参数的位置&#xff0c;预测值和真实值位置不一样&#xff0c;可以参考函数定义 torch_r2score torch_r2(pred, y) sklearn_r2score r2_score(y, pred) https://pytorch.org/torcheval/main/generated/torcheval.metrics.functional.r2_score.html Parameters: …

贪心算法入门

. - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/split-a-string-in-balanced-strings/description/ 一旦满足条件就进行…

【4087】基于小程序实现的电影票订票小程序软件

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;ssm 【…

解决Maven本地仓库存在依赖包还需要远程下载的问题

背景 公司有自己maven私服&#xff0c;正在在私服可以使用的情况&#xff0c;打包是没问题的。但是这次是由于公司大楼整体因电路检修而停电&#xff0c;所有服务器关机&#xff0c;包括maven私服服务器。然后当天确有一个包需要打&#xff0c;这个时候发现死活打不了&#xf…

等保建设技术建议书(Word原件)

1信息系统详细设计方案 1.1安全建设需求分析 1.1.1网络结构安全 1.1.2边界安全风险与需求分析 1.1.3运维风险需求分析 1.1.4关键服务器管理风险分析 1.1.5关键服务器用户操作管理风险分析 1.1.6数据库敏感数据运维风险分析 1.1.7“人机”运维操作行为风险综合分析 1.2…

8086 汇编学习 Part 6

用 MUL 指令做乘法 格式 MUL 寄存器MUL 寄存单元 8 位乘法16 位乘法被乘数&#xff08;默认&#xff09;ALAX乘数8 位寄存器或内存单元16 位寄存器或内存字单元结果AXDX &#xff08;高位&#xff09; 和 AX &#xff08;低位&#xff09; 模块化程序设计 调用子程序 &…

第07-6章 应用层详解

HTTP、SSL&#xff1a;基于TCP&#xff0c;HTTP端口:80、HTTPS&#xff08;加密&#xff09;端口&#xff1a;443&#xff1b;FTP:基于TCP&#xff0c;两类端口&#xff1a;21、20&#xff08;数据传输之前需要建立连接此时是21&#xff0c;真正传输数据时用20&#xff09;TFTP…

小白入门 CSS 语法规则

文章导读&#xff1a;AI 辅助学习前端&#xff0c;包含入门、进阶、高级部分前端系列内容&#xff0c;当前是 CSS 的部分&#xff0c;瑶琴会持续更新&#xff0c;适合零基础的朋友&#xff0c;已有前端工作经验的可以不看&#xff0c;也可以当作基础知识回顾。 这篇文章给大家…