![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Verilog
筱羊冰冰
这个作者很懒,什么都没留下…
展开
-
从一个记忆游戏来说明Verilog——4、输出显示模块(8个七段数码管的控制)
前言之前的第一篇博客讲到了我们这个小游戏的内容和分工,前几个博客也谈到了几个重要的子模块,到现在我们已经实现了所有的底层模块,剩下的还有输出显示模块和顶层模块了。为什么说这两个模块是顶层模块呢?我们对顶层模块的定义为实现多个模块交互的模块这可不是简单的调用模块,输入一个时钟信号,得到一个时钟信号(指除颤或者分频)...原创 2020-12-24 17:49:35 · 1323 阅读 · 3 评论 -
从一个记忆游戏来说明Verilog——3、读入地址和数据模块
前言我们已经在第一篇博客中谈到了我们的目标和具体的分工,也在上一篇博客中谈到了基于LSFR的随机数生成方式。接下来的目标是读入部分。开始在整个游戏中,读入部分虽然不是很难,也不是很重要,但其准确性还是很重要的。要求&细节我们希望的输出显示模块需要的是8个四位二进制数作为输入,所以需要让这两个模块进行对齐;在输出显示中我们已经有了一个分频控制数码管使能信号和分段的时钟信号,但是我们在匹配数据还需要一个2HZ的闪烁信号,如果还是放在输出显示模块很明显不合适,所以我们需要在数据模块中直接添加原创 2020-12-24 17:48:58 · 1496 阅读 · 0 评论 -
从一个记忆游戏来说明Verilog——2、15位随机数生成(基于LFSR)
前言上一篇博客我们讲述了游戏的基本原理和具体的模块分工,这篇博客开始就要详细的说明每一个模块的功能了。按照游戏顺序来,我们应该先说随机数;从实现的难度上来说,我们也应该先声明一下随机数模块的问题。随机数? 伪随机数?学过C的都知道C的随机数虽然是叫做随机数,但是实际上完全就是通过一个种子进行不断的计算实现的伪随机数,或者我们添加一个时间种子。在上一篇博客中我们提到了两种实现随机数的方式:实现方法参考:取计数器的输出或使用线性反馈移位寄存器(LFSR)生成伪随机数);这两种方法的本质上和C的时间原创 2020-12-24 17:48:20 · 1900 阅读 · 1 评论 -
Moore和mealy序集(并行输入的例子,三段式实现)
前言之前的那个讲解配的是一个八位串行输入,总感觉怪怪的,这次我们看一个并行输入的例子。原创 2020-12-22 09:06:28 · 433 阅读 · 0 评论 -
moore&mealy状态机区分(附例子&代码)&三段式描述方式
在状态机部分,moore和mealy也算是老生常谈了吧。什么是状态?说白了就是通过时钟信号不断改变当前的状态,可能是根据输入的数据,也可能是自身发生改变(比如一些计时器),所以少不了触发器,虽然我们有功能十分多的JK,有RS,但是我们一般采用的触发器类型都是D触发器。状态机的设计实际电路的设计和verilog设计还不大相同。因为verilog好歹还不是那么底层,不需要自己进行搭线(除非采用结构化描述),也就是我们可以省略一些步骤。好了么,基本上省了很多了,只需要将状态找出来,进行分配,然后给出原创 2020-12-21 11:32:13 · 16015 阅读 · 1 评论 -
从一个记忆游戏来说明Verilog——1、总起,介绍和分工
写在前面当我们在小规模的Verilog书写的过程中,每一个模块的功能都是很明确的,也不需要什么分工,比如常见的分频流水灯或者是七段数码管的使用,每一个模块的构思都是很简单的,但在实际中Verilog可不仅仅是写这些小玩意,当形成一个大型状态机——CPU,还是其他的大型项目,模块多起来了就会变得十分棘手。那么当我们遇到一个相对比较大的Verilog项目时,我们应该怎么处理呢?一些建议我们一般有几种常见的构思方式,比如从一个个小模块开始,然后构思整体的框架,或者是自顶向下。一般来说自顶向下的方式是最合理的原创 2020-12-19 17:08:44 · 433 阅读 · 1 评论 -
vivado搭配vscode,让Verilog编程更有趣(包括乱码问题的解决)
开始我们的表演准备工作:安装vivado和vscdoe(这两个没有那玩个鬼)将vivado中的默认编译器改为vscode(文件路径+code.exe+[file name] -[line number])可以考虑对快捷方式使用文件所在路径快速查找安装vscode插件:在GitHub上下载CTsgs,我选择了图中的最后一个然后解压,我是扔到了D盘。打开扩展设置,进行修改:修改荧光笔这两项:开始使用吧再次打开,没有了怎么办?貌似是对一个新的项目,我们只能重新来过,不过第一次整好了之后原创 2020-12-19 15:25:36 · 4923 阅读 · 1 评论 -
verilog实现按键开关的消抖(通过延时的方式)
在按键开关使用过程中,我们难免会遇到开关抖动的问题,原理图:不同于拨码开关,按键开关是通过按下来实现高低电平转换的,那么就难免在按下的过程中会发生抖动(这个自己想象一下么,对一个铁片使劲按一下,然后突然松开,是很容易发生抖动的。处理方式截图其实就很明显了,就是使用两个寄存器分别存储第一次变化和一段时间变化之后的信号,如果两个信号一致说明确实是发生了改变,而这个时间大约是在5-15ms。好了么,首先,我们需要一个分频,这里采用的是1ms,也即是1khz(原理介绍)`timescale 1ns /原创 2020-12-18 19:17:57 · 2521 阅读 · 0 评论 -
七段数码管的使用(使能端分时控制)
题目描述在板子上的七段数码管上的八个数字分别显示:计时器(两位)、按照拨码开关的输入(两位)、班级(两位)、学号(两位)其中计时器为从10到到0,当倒计时为0时,从10重新开始计数;当按下开关s0,立即变化为10重新计数。拨码开关共有八个,分为两组,前四个控制第一个显示,后四个控制第二个的显示,从0到F都有。班级学号为常数,但是班级和学号的第二位要显示小数点。分析数码管的显示...原创 2020-12-18 18:48:11 · 12236 阅读 · 0 评论 -
Verilog设计流水灯(分频)
题目描述在开发板中,有一个内置的时钟周期,为100MHZ,我们需要使用这样一个时钟信号来设计一个1HZ的流水灯(使用8个led灯),也就是一秒钟有一个灯是亮起的,依次从左到右。另外还有一个低有效的复位使能端、一个同步保持使能(有效时流水灯亮起状况不变)分析首先,1HZ和100MHZ的时钟周期需要进行转换,然后利用新的时钟信号进行led灯信号变更即可。分频部分思路是这样的,既然是100MHZ,也就是10-8s的时钟周期,那么我们就需要进行计数,当计数到108时,才是一个新的时钟信号的一个周期;但是原创 2020-12-17 21:36:34 · 5849 阅读 · 6 评论 -
Verilog知识点整理
可能不是十分详细,缺少一部分东西,但是可以说我在学习的过程中写过的工程当中常用的基本上就这些了,欢迎大家指正补充,process on文件,可以私聊要xmind版本原创 2020-12-17 21:03:54 · 1146 阅读 · 0 评论 -
多个八位寄存器的选择问题
题目描述首先,我们原创 2020-12-17 18:58:11 · 1392 阅读 · 2 评论 -
使用D触发器完成带有异步清零clrn和同步使能wen的8位寄存器
要求:看到这个题,首先我们应该先考虑D触发器的实现:`timescale 1ns / 1psmodule dffe( input clk, input clrn,wen, input d, output reg q); always@(posedge clk or negedge clrn) //因为是异步清零,也需要加到always中 begin if(clrn == 1'b0) //如原创 2020-12-17 11:33:28 · 8424 阅读 · 1 评论 -
Verilog——38译码器(包括仿真文件和约束文件的格式)
描述方式之前说过,verilog属于高级语言,需要软件设计硬件结构来实现,也说过描述方式是有很多种的,下面介绍一下。结构描述十分底层,相当于自己搭电路;行为描述最简单,只需要写出输入对应的输出就行,例子中需要case语句。数据流描述比较玄学,还需要找关系,感觉也不太好。对于题目38译码器这样一个简单的器件,我们选择行为描述的方式最简单(要是有个十几个输入,case语句直接爆炸,所以这种方式也是有限制的)代码:`timescale 1ns / 1ps //时钟信号的精度和周期.原创 2020-12-17 10:51:59 · 27961 阅读 · 1 评论 -
vivado工程创建(从新建到下板)
这里就不给出下载资源了,在网上稍微找一下就行。新建项目双击软件,注意是三个菱形的快捷方式,有时可能会看到两个不一样的vivado,长这样的(我们要第二个)然后是:选一个地址和项目名称,注意项目名称和路径不要有中文。接下来是选择项目类型,这里注意在导入不源文件(Do not specify sources at this time)要选上然后需要选择器件类型,也就是使用的FPGA板子的类型。按自己的板子选,不要照抄然后搜索和选项卡的筛选会在这个环节帮你省下不少时间。然后一路继续就行了原创 2020-12-17 09:32:20 · 8886 阅读 · 0 评论