led跑马灯多种方法(移位法,位拼接法,调用模块法,位移及位拼接语法,testbench的理解,源文件的存储路径,计数器的个数,调用模块的方式)
跟着教程写了几种方法,才发现自己写的虽然能实现,但比较繁琐。教程有三种方法:
1.移位法,每次左移一位,相比我自己写的,优点是不用把每一种情况都写出来。但是需要考虑左移到最后一位时需要自己再写个赋值语句重新回到第一位。
2.位拼接法,循环左移,每一次都把最后一位放到第一位,其他六位左移一位,克服了移位法的问题,简化了代码。
3.调用已有模块法,调用4-16译码器刚好可以实现流水灯,需要额外的counter作为译码器的输入。
- 移位法
module led_run1( //移位法
clk,
reset,
led
);
input clk;
input reset;
output reg [7:0]led; reg [5:0]counter1;
always@( posedge clk or negedge reset )begin
if( reset == 1'd0)
counter1 <= 1'd0;
else if(counter1 == 4 ) 这两个虽然赋值语句一样,但是不能把判断语句合并。
counter1 <=1'd0;
else
counter1 <= counter1 + 1'd1;
end always@(posedge clk or negedge reset) begin
if( reset == 1'd0)
led <= 8'b0000_0001;
else if(counter1 == 4 )begin
if(led == 8'b1000_0000)
led <= 8'b0000_0001; //最后一位的处理
else
led <= led << 1'd1 ; //注意左移几位的语法,应该怎么写
end
end
endmodule
- 位拼接法
module led_run2( //位拼接法
clk,
reset,
led
);
input clk;
input reset;
output reg [7:0]led; reg [5:0]counter1;
always@( posedge clk or negedge reset )begin
if( reset == 1'd0)
counter1 <= 1'd0;
else if(counter1 == 4 )
counter1 <=1'd0;
else
counter1 <= counter1 + 1'd1;
end always@(posedge clk or negedge reset) begin
if( reset == 1'd0)
led <= 8'b0000_0001;
else if(counter1 == 4 )begin
led <= {led[6:0],led[7]}; //位拼接的语法,十分注意
end
end
endmodule
- 调用模块法
module led_run4( //调用模块4-16译码器法
clk,
reset,
led
);
input clk;
input reset;
output wire [15:0]led; reg [2:0]counter1;
reg [3:0]counter4; 一个用来计数,一个用来译码
always@( posedge clk or negedge reset )begin
if( reset == 1'd0)
counter1 <= 1'd0;
else if(counter1 == 4 )
counter1 <=1'd0;
else
counter1 <= counter1 + 1'd1;
end always@(posedge clk or negedge reset) begin
if( reset == 1'd0)
counter4 <= 8'd1;
else if(counter1 == 4 )begin
counter4 <= counter4 + 1'b1;
end
end decoder_4_16 decoder_4_16_run( //调用的方法类似于仿真时的例化,存储电路与组合逻辑电路相结合。
.a(counter4[3]),
.b(counter4[2]),
.c(counter4[1]),
.d(counter4[0]),
.out(led)
); endmodule
注意:
1.左移/右移的语法:led=led << n / led=led >> n
2.位拼接的语法:led={led[6:0],led[7]} 注意花括号,中括号,数组表达方式。定义时中括号放名字前,引用时放名字后。逗号隔开位。
3.一个testbench可以用来测试验证多个模块,需要修改的是tb里面例化的模块名,激励如果一样可以不修改。(testbench差不多就是个激励产生器用来验证性能)
4.在工程中创建的design sources的源文件的路径为:.srcs->sources->new->xx.v
5.时序电路自少需要一个计数器来控制开发板时钟信号和我们实际需要的周期信号的关系。但是不是说只能有一个,可以根据需求增加。
6.报错:ordered port connections cannot be mixed with named port connections 目标端口连接不能与命名端口连接混合

原因:最后一个变量后面加了逗号,删掉即可。
7.调用子模块的方式:
7.1把子模块的文件复制到当前工程的design源文件目录下,路径上面有写。
7.2在vivado中添加该文件进design sources,作为子模块。
7.3在顶层文件(即要调用该子文件的文件)调用子模块,方式是类似于testbench的例化。注意,在子模块(底层)中定义了输出为reg型,在顶层应该定义输出为wire型。
效果

led跑马灯多种方法(移位法,位拼接法,调用模块法,位移及位拼接语法,testbench的理解,源文件的存储路径,计数器的个数,调用模块的方式)的更多相关文章
- 【雕爷学编程】Arduino动手做(56)---8路LED跑马灯模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...
- ARM开发(1) 基于STM32的LED跑马灯
一 跑马灯原理: 1.1 本实验实现2个led的跑马灯效果,即2个led交替闪烁. 1.2 实验思路:根据电路图原理,给led相关引脚赋予高低电平,实现电路的导通,使led灯发光. 1.3 开发 ...
- led跑马灯(模糊时钟ambiguous color,非法字符 non printable character,寄存器初值,计数器计数注意事项)
1.设计定义 让8个led以100ns的速度循环闪烁. 2.设计输入 循环闪烁,还是周期问题,用时钟驱动,所以需要一个时钟信号clk.再给一个复位输入reset,八个输出led信号. 每100ns只有 ...
- 基于am3358的led跑马灯測试
#include <sys/ioctl.h> #include<stdio.h> #include <fcntl.h> #include <sys/types ...
- 安卓LED跑马灯 超炫酷的表白神器破解版
链接:https://pan.baidu.com/s/11Wxll4iLdcEPq0wUBK6Ong 提取码:all4
- C# 模拟跑马灯效果(2种)
#region 跑马灯效果方法 /// <summary> /// 文字进入左侧后从右侧出来 /// </summary> private void LabelRun() { ...
- html跑马灯效果
实现跑马灯的方法很多,其中最简单的是采用一句Html代码来实现,我们在需要出现跑马灯效果的地方插入“<marquee>滚动的文字</marquee>”语句,它的效果如下所示: ...
- html跑马灯/走马灯效果
实现跑马灯的方法很多,其中最简单的是采用一句Html代码来实现,我们在需要出现跑马灯效果的地方插入“<marquee>滚动的文字</marquee>”语句,它的效果如下所示: ...
- Android 文字自动滚动(跑马灯)效果的两种实现方法[特别好使]
有时候在xml中写的跑马灯效果不滚动:原因有以下 Android系统中TextView实现跑马灯效果,必须具备以下几个条件: 1.android:ellipsize=”marquee” 2.TextV ...
随机推荐
- 【Python情感分析】用python情感分析李子柒频道视频热门评论
一.事件背景 今天是2021.12.2日,距离李子柒断更已经4个多月了,这是我在YouTube李子柒油管频道上,观看李子柒2021年7月14日上传的最后一条视频,我录制了视频下方的来自全世界各国网友的 ...
- UDP协议,多道技术,进程,同步与异步,阻塞与非阻塞
UDP协议 简介 UDP叫做用户数据报协议,是OSI七层参考模型中传输层使用的协议,他提供的是不可靠传输,既它在传输过程 中不保证数据的完整性! 端口号 UDP使用IP地址和端口号进行标识,以此将数据 ...
- 多线程05:unique_lock详解
unique_lock详解 一.unique_lock取代lock_guard unique_lock是个类模板,实际应用中,一般lock_guard(推荐使用):lock_guard取代了mutex ...
- 每日一题20180401-Linux
一.题目 1.1 在mysql命令行临时开启自动补全 1.2 通过shell脚本打印乘法口诀表 二.答案 2.1 # auto-rehash:读取表信息和列信息,可以在连上终端后开启tab补齐功能 # ...
- 138_Power BI&Power Pivot特殊半累加度量
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 半累加度量(semi-additive measure),在DAX建模分析的时候经常遇见:应用场景诸如银行存款. ...
- MIT 6.824(Spring 2020) Lab1: MapReduce 文档翻译
首发于公众号:努力学习的阿新 前言 大家好,这里是阿新. MIT 6.824 是麻省理工大学开设的一门关于分布式系统的明星课程,共包含四个配套实验,实验的含金量很高,十分适合作为校招生的项目经历,在文 ...
- 2021.03.20【NOIP提高B组】模拟 总结
区间 DP 专场:愉快爆炸 T1 题目大意 有 \(n\) 个有颜色的块,连续 \(k\) 个相同颜色的就可以消掉 现在可以在任意位置插入任意颜色的方块,问最少插入多少个可以全部抵消 题解 先把连续的 ...
- Camunda开源流程引擎快速入门——Hello World
市场上比较有名的开源流程引擎有osworkflow.jbpm.activiti.flowable.camunda.由于jbpm.activiti.flowable这几个流程引擎出现的比较早,国内人用的 ...
- 不忍了,快速下载Visual Studio Code
更新记录 本文迁移自Panda666原博客,原发布时间:2021年5月2日. 奇怪的原因 因为一些众所周知的原因,在国内下载Visual Studio Code的速度比较慢,所以我们需要一些方法来加快 ...
- 关于使用 koa路由与mysql模块, ctx.body获取不到值的问题
var Koa = require('koa');var Router = require('koa-router' );var bodyParser = require('koa-bodyparse ...