led跑马灯(模糊时钟ambiguous color,非法字符 non printable character,寄存器初值,计数器计数注意事项)
1.设计定义
让8个led以100ns的速度循环闪烁。
2.设计输入
循环闪烁,还是周期问题,用时钟驱动,所以需要一个时钟信号clk。再给一个复位输入reset,八个输出led信号。
每100ns只有一个led亮,其它灭,顺序循环,所以一个周期有800ns。用条件语句来判断可以实现每次只亮一个且循环。
开发板的时钟脉冲信号周期为20ns,故引入计数变量counter,每计数满5则换状态。根据5的倍数来确定哪个灯亮。
需要注意的是,每一次时钟沿上升沿到来都要保证计数器+1才能正常运行,如果得不到保证,就会困在某个状态里面出不来,如果是复位信号时钟沿到来则无需保证,因为是异步的,异步要第一个执行。
module led_run(
clk,
reset,
led
); input clk;
input reset;
output reg[7:0]led;//8个灯 reg [5:0]counter;//程序员计数器确定宽度 always@(posedge clk or negedge reset)begin
if ( reset == 1'b0 ) begin //复位信号
counter <= 6'd0;
end
else if ( counter == 6'b0 )begin
led <= 8'b0000_0001;
counter <= counter + 1'b1; end
else if ( counter == 6'b00_0101 ) begin
led <= 8'b0000_0010;
counter <= counter + 1'b1; end
else if ( counter == 6'b00_1010 )begin
led <= 8'b0000_0100;
counter <= counter + 1'b1; end
else if ( counter == 6'b00_1111 )begin
led <= 8'b0000_1000;
counter <= counter + 1'b1; end
else if ( counter == 6'b01_0100 )begin
led <= 8'b0001_0000;
counter <= counter + 1'b1; end
else if ( counter == 6'b01_1001 )begin
led <= 8'b0010_0000;
counter <= counter + 1'b1; end
else if ( counter == 6'b01_1110 )begin
led <= 8'b0100_0000;
counter <= counter + 1'b1; end
else if ( counter == 6'b10_0011 )begin
led <= 8'b1000_0000;
counter <= counter + 1'b1; end
else if ( counter == 6'b10_1000 )begin
led <= 8'b0000_0001;
counter <= 6'd1 ; //这里要加1,不然第一个灯就不再是周期100ns,而是120ns end
else
counter <= counter + 1'b1;
end endmodule
下面是分开写的,要十分注意的是,两者的always触发条件最好相同,第一个语句也要是复位信号条件语句。在这如果第二个always删了negedge 和 led=00000000的话,那么上一个always执行复位,下一个always并行执行counter==0,会使灯亮着,不符合要求。应该在复位时让灯全熄灭。如果是上面的合并写法,就不需要额外加led=00000000,因为只进入一个always,只判断一次,下面写法并行进入了两个always,判断两次。
module led_run(
clk,
reset,
led
); input clk;
input reset;
output reg[7:0]led; reg [5:0]counter; always@(posedge clk or negedge reset)begin
if ( reset == 1'b0 ) begin
counter <= 6'd0;
counter <= counter + 1'b1; end
else if ( counter == 6'b0 )begin
counter <= counter + 1'b1; end
else if ( counter == 6'b00_0101 ) begin
counter <= counter + 1'b1; end
else if ( counter == 6'b00_1010 )begin
counter <= counter + 1'b1; end
else if ( counter == 6'b00_1111 )begin
counter <= counter + 1'b1; end
else if ( counter == 6'b01_0100 )begin
counter <= counter + 1'b1; end
else if ( counter == 6'b01_1001 )begin
counter <= counter + 1'b1; end
else if ( counter == 6'b01_1110 )begin
counter <= counter + 1'b1; end
else if ( counter == 6'b10_0011 )begin
counter <= counter + 1'b1; end
else if ( counter == 6'b10_1000 )begin
counter <= 6'd1 ;
end
else
counter <= counter + 1'b1;
end always@(posedge clk or negedge reset )begin
if ( reset == 1'b0 ) begin
led <= 8'b0000_0000; end
else if ( counter == 6'b0 )begin
led <= 8'b0000_0001; end
else if ( counter == 6'b00_0101 ) begin
led <= 8'b0000_0010; end
else if ( counter == 6'b00_1010 )begin
led <= 8'b0000_0100; end
else if ( counter == 6'b00_1111 )begin
led <= 8'b0000_1000; end
else if ( counter == 6'b01_0100 )begin
led <= 8'b0001_0000; end
else if ( counter == 6'b01_1001 )begin
led <= 8'b0010_0000; end
else if ( counter == 6'b01_1110 )begin
led <= 8'b0100_0000; end
else if ( counter == 6'b10_0011 )begin
led <= 8'b1000_0000; end
else if ( counter == 6'b10_1000 )begin
led <= 8'b0000_0001;
end end endmodule
- 遇到的错误
自己不看视频写就容易遇到许多错误。
1.syntax error near non-printable character with the hex value“0xa3“ 出现非法字符
说明符号半角全角,中英文出错了。这种情况可能出现在1.写错。2.从别的网站复制代码过来出错。
这次我把代码从vivoda复制到博客园,再复制回去就出错了,说明不同的地方可能编码不同,容易出错,最好是出错的地方自己先打一遍,看看错误会不会消失,再看其它情况。

2.ambiguous clock in event control 事件控制中的模糊时钟
2.1always中的时钟信号变量没有初始化,没有用上。

在这里不会在编辑器中出现语法报错,但综合时会出错。如图,因为我触发条件写了reset下降沿,但是下文都没提及reset。只要把 negedge reset删了或者把//删了就可以解决。
2.2赋值冲突。多个if满足条件,且他们都对同个变量处理。由于fpga硬件的处理是并行的,电路会不知道应该进行哪个处理,就出现了错误。
3.寄存器初始值问题
寄存器的初始值有多种情况。
3.1不赋初值不复位:初始值为0
3.2不赋初值复位:初始值为复位语句值
3.3赋初值不复位:初始值为初值
3.4赋初值复位:初始值为初值。
总结:有赋初值则为初值,没赋则为复位值,都没有则为0。
注:初始值查看方法:

4.计数器计数注意事项
每一次时钟沿上升沿到来都要保证计数器+1才能正常运行,如果得不到保证,就会困在某个状态里面出不来,如果是复位信号时钟沿到来则无需保证,因为是异步的,异步要第一个执行。
led跑马灯(模糊时钟ambiguous color,非法字符 non printable character,寄存器初值,计数器计数注意事项)的更多相关文章
- ARM开发(1) 基于STM32的LED跑马灯
一 跑马灯原理: 1.1 本实验实现2个led的跑马灯效果,即2个led交替闪烁. 1.2 实验思路:根据电路图原理,给led相关引脚赋予高低电平,实现电路的导通,使led灯发光. 1.3 开发 ...
- 【雕爷学编程】Arduino动手做(56)---8路LED跑马灯模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...
- 基于am3358的led跑马灯測试
#include <sys/ioctl.h> #include<stdio.h> #include <fcntl.h> #include <sys/types ...
- led跑马灯多种方法(移位法,位拼接法,调用模块法,位移及位拼接语法,testbench的理解,源文件的存储路径,计数器的个数,调用模块的方式)
跟着教程写了几种方法,才发现自己写的虽然能实现,但比较繁琐.教程有三种方法: 1.移位法,每次左移一位,相比我自己写的,优点是不用把每一种情况都写出来.但是需要考虑左移到最后一位时需要自己再写个赋值语 ...
- 安卓LED跑马灯 超炫酷的表白神器破解版
链接:https://pan.baidu.com/s/11Wxll4iLdcEPq0wUBK6Ong 提取码:all4
- STM32F407 跑马灯 寄存器版 个人笔记
更多原理请参考跑马灯 库函数版 个人笔记 步骤 使能IO口时钟.配置相关寄存器寄存器RCC->AHB1ENR 初始化IO口模式.配置四个配置寄存器 GPIOx_MODER/ GPIOx_OTYP ...
- 【STM32H7教程】第18章 STM32H7的GPIO应用之跑马灯
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第18章 STM32H7的GPIO应用之跑马灯 本 ...
- 嵌入式02 STM32 实验04跑马灯
开学STM32 跑马灯的实验主要就是了解GPIO口的配置及使用,我这里是使用库函数进行编程,主要需要设置以下两方面: 1.使能需要使用的IO口的时钟,一共有A.B.C.D.E.F.G七组IO口 2.初 ...
- GPIO原理与配置(跑马灯,蜂鸣器,按键)
一.STM32 GPIO固件库函数配置方法 1. 根据需要在项目中删掉一些不用的固件库文件,保留有用的固件库文件 2. 在stm32f10x_conf.h中注释掉这些不用的头文件 3. STM32的I ...
随机推荐
- 查重工具Jplag的使用
目录 前言 一.Jplag是什么? 二.使用步骤 1.下载包 2.java环境配置 3.如何使用 三.总结 前言 说明一下本文章针对最新版本Jplag3.0使用JplagAPI 一.Jplag是什么? ...
- 字符编码,存储引擎,MySQL字段类型,MySQL字段约束条件
字符编码 查看MySQL默认编码命令:\s """ 如果是5.X系列 显示的编码有多种 latin1 gbk 如果是8.X系列 显示的统一是utf8mb4 utf8mb4 ...
- GO 语言入门(一)
GO 语言入门(一) 本文写于 2020 年 1 月 18 日 Go 由 Google 工程师 Robert Griesemer,Rob Pike 和 Ken Thompson 设计的一门编程语言,第 ...
- 理解 Object.defineProperty
理解 Object.defineProperty 本文写于 2020 年 10 月 13 日 Object.defineProperty 用于在一个对象上定义新的属性或修改现有属性并返回该对象. 什么 ...
- 流量治理神器-Sentinel 究竟是怎么做到让业务方接入简单?
大家好,我是架构摆渡人,这是流量治理系列的第10篇原创文章,如果有收获,还请分享给更多的朋友. 做业务开发,需要考虑业务的扩展性.做基础框架开发,需要考虑如何让业务方接入,使用简单,尽量不要耦合在业务 ...
- visio 画泳道图
参考
- Vue2-组件通讯传值
Vue2组件通讯传值 方法 Slot插槽--父向子内容分发,子组件只读 mixin混入--定义公共变量或方法,mixin数据不共享,组件中mixin实例互不影响 provide+inject--依赖注 ...
- 什么事JAVA
1.什么是Java Java是一门面向对象的高级编程语言,不仅吸收了C++语言的各种优点,比如继承了C++语言面向对象的 技术核心.还摒弃了C++里难以理解的多继承.指针等概念,,同时也增加了垃圾回收 ...
- 软件构造Lab1实验要点总结
本实验通过解决三个问题,训练了基本的Java编程技能,并给出了Eclipse+Jdk+Junit的配置方案,以及对使用git进行项目管理的方式. 1.因此,本实验的第一个要点是配置环境.具体配置环境过 ...
- DataX异构数据源离线同步工具json文件配置说明
DataX 是阿里开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL.Oracle等).HDFS.Hive.ODPS.HBase.FTP等各种异构数据源之间稳定高效的数据同步功能 ...