数字电路之Verilog红绿灯设计

  • 一、题目要求
  • 二、分析题目
  • 三、开始设计
  • 四、结果分析
  • 五、最后的话

写在前面:以下仿真实验设计应用的是Xilinx Vivado。

一、题目要求

题目要求应用Verilog语言设计一个红绿灯,规则为红灯亮15秒,然后黄灯亮3秒,然后绿灯亮12秒,然后红灯亮15秒,以这个规律往复下去,具体要求为展示相应的仿真结果(用波形图表示),并且结果用三个灯中哪个灯亮、倒计时和两个七段数码管(共阴共阳自选)显示数值(用波形图表示),最终提交整个工程文件以及波形图的分析。

二、分析题目

首先,我们分析题目,主要要求就是一个简单的红绿灯设计以及用数码管显示数字并且循环,所以,我们先找到循环周期,既然是15s -> 12s -> 3s,我们可以将周期设置为30s(15s + 12s + 3s),然后第一个周期就是从14s开始倒退至0s,然后从12s开始倒退至0s,然后从2s开始倒退到0s,然后只要对应数字显示数字即可,这种分析思路读者日后在写其他的设计时候也可以应用。

三、开始设计

在正式设计之前,我们需要知道输入输出是什么,从分析题目的结果来,看我们的输入除了时间(单位:s)找不到其他的输入了,输出即为我们需要验证的波形图,对于这一道题而言我们的输出即为三个灯,倒计时数字,以及倒计时数码管显示。
       分析完输入输出之后,我们就要正式开始设计了,在时钟(clk)进行变化的时候(在这里我们设置上升沿触发),我们的timenum需要从0开始每次都自加1,我们首先先判断是否时间大于等于30s,如果是那么让timenum = 0,然后重新开始判断,废话不多说直接上代码:

if (timenum >= 30)timenum = 0;
if (timenum < RedTime)
beginRYG <= 3'b100;num <= RedTime - timenum - 1;
end
else if (timenum < GreenTime + RedTime)
beginRYG <= 3'b001;num <= GreenTime + RedTime - timenum - 1;
end
else if (timenum < YellowTime + GreenTime + RedTime)
beginRYG <= 3'b010;num <= YellowTime + GreenTime + RedTime - timenum - 1;
end
timenum = timenum + 5'd1;

以上代码中RYG用来表示三个灯,timenum用来记录次数,num用来倒计时,就这样第一个问题就设计完了。
       接下来是段码的表示,我们只需要给断码赋值即可,但是这个时候问题来了,这一道题是最多也就到14s,我们暴力枚举就完全可以,万一你要设计红灯50s呢?这个时候再用枚举就不是很合适了,这时候我们可以通过分别对十位和各位进行单独赋值,我们应用两个case语句,进行段码的显示,到这里我们就要开始选数码管了,这里笔者选择共阴数码管进行设计,我们要开始进行漫长的计算0到9分别对应什么了,以下是笔者所计算,不一定全部正确,如果有错误,欢迎评论改正:

    0: 7'b1111110;1: 7'b0110000;2: 7'b1101101;3: 7'b1111001;4: 7'b0110011;5: 7'b1011011;6: 7'b1011111;7: 7'b1110000;8: 7'b1111111;9: 7'b1111011;

逻辑设计已经结束,之后就是测试代码的书写了,由于只有一个输入所以测试代码是比较好写的,如下:

`timescale 1ns / 1psmodule sim_RYG();reg clk;wire[2:0] RYG;wire[3:0] num;wire[13:0] NumericDisplay;RYG U1(.clk(clk),.RYG(RYG),.num(num),.NumericDisplay(NumericDisplay)    );initial clk = 0;always #5 clk = ~clk;
endmodule

四、结果分析

对于结果分析,笔者不多做解释,直接贴上仿真实验波形图,读者自行分析即可。

从上升沿触发开始有红灯变化为绿灯从绿灯变化为黄灯,再变化为红灯,形成循环

五、最后的话

此设计笔者未贴出整个代码以及整个傻瓜式教程,是因为笔者认为这种东西只有自己实际的做一遍才算掌握,对于这一道类型的题目,如果还有问题的话,欢迎联系笔者QQ:2428425170,查看整个工程文件。

数字电路之Verilog红绿灯设计相关推荐

  1. Verilog HDL设计方法

    Verilog HDL设计方法 一.采用Verilog HDL设计复杂数字电路的优点 1.1.传统设计方法--电路原理图输入法 1.2.Verilog HDL的标准化与软核的重用 1.3.软核.固核和 ...

  2. 主次干道红绿灯设计(数电综设)

    一.前言 综述: 本设计是基于74LS系列芯片设计的主次干道红绿灯设计.随着生活水平的提高,家庭汽车拥有量越来越多,城市交通堵塞问题越来越严重,解决城市的交通拥挤问题越来越紧迫.交通灯在这个交通环境中 ...

  3. 移位寄存器专题(verilog HDL设计)

    目录 移位寄存器简介 分类 4位右移位寄存器工作原理 1. 16位右移位寄存器 2. 16位左移寄存器 3. 串行输入并行输出寄存器 4. 并行输入串行输出移位寄存器 移位寄存器简介 移位寄存器内的数 ...

  4. 为什么在 Verilog HDL 设计中一定要用同步而不能用异步时序逻辑?

    本博文内容来源于:<从算法设计到硬件逻辑的实现>,仅供学习交流使用! 同步时序逻辑是指表示状态的寄存器组的值只可能在唯一确定的触发条件发生时刻改变.只能由时钟的正跳沿或负跳沿触发的状态机就 ...

  5. FIR滤波器设计(包括Verilog HDL设计以及MATLAB设计)

    FIR滤波器设计 滤波器原理:滤波器就是对特定的频率或者特定频率以外的频率进行消除的电路,被广泛用于通信系统和信号处理系统中.从功能角度,数字滤波器对输入离散信号的数字代码进行运算处理,以达到滤除频带 ...

  6. 巴克码相关器的verilog HDL设计

    巴克码相关器 巴克码相关器原理:巴克码相关器能够检测巴克码序列峰值,并且能够在1bits错误情况下检测巴克码序列峰值. 巴克码是20世纪50年代初R.H巴克提出的一种具有特殊规律的二进制码组.它是一个 ...

  7. 序列信号产生器的verilog HDL 设计

    一.状态转移型的序列信号产生器的verilog HDL 设计 用一个不断循环的状态机,循环产生序列信号001011.过程过于简单,我就不画状态图了. 直接给出verilog HDL设计代码: //有限 ...

  8. (19)System Verilog模块设计示例

    (19)System Verilog模块设计示例 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog模块设计示例 5)结语 1.2 FPG ...

  9. Verilog自顶向下设计24进制和60进制计数器(FPGA)

    提供Verilog自顶向下设计24进制和60进制计数器(1Hz,频率可调)并用数码管动态显示的代码,且两个程序皆在Basys2开发板上验证通过.程序思路: 首先将程序分为4部分:分频程序.计数程序.数 ...

最新文章

  1. ICML 2021杰出论文奖“临时更换”,上海交大校友田渊栋陆昱成等获提名
  2. 【转】深入了解CPU两大架构ARM与X86
  3. python django升级安装sqlite3后在python命令行还是显示旧版本的解决办法
  4. Gym - 101755G Underpalindromity (树状数组)
  5. 要和解?盒马集市已入驻微信小程序
  6. Google,一切皆为 AI!
  7. 研究理解lanproxy实现内网穿透
  8. 用户调用机房收费下机中用到的策略与职责链解析
  9. ttl接地是高电平还是低电平_TTL 门电路输入端分别接大电阻接地,小电阻接地,或空接,输入的是什么电平???跟是什么类型的门电路......
  10. 用MATLAB解决实际数学问题,利用MATLAB解决高等数学问题.doc
  11. 机动车车牌分类及命名规则总结
  12. python如何更新pip_[Python] 如何更新 PIP 到最新版本?
  13. 计算机排版系统程序,《计算机排版系统.doc
  14. 程序人生 - BD 电影 HD 电影有什么区别啊?哪个好啊?
  15. HUNNU 11786 Sir Charles Antony Richard Hoare
  16. SDN基础入门学习一
  17. 以推理游戏开始2007年吧!
  18. dump和coredump
  19. P4使用Ubuntu中安装教程
  20. C++中的new和delete运算符(内存管理)

热门文章

  1. 抓取、下载某位博主的豆瓣日记
  2. java中web错误返回码,关于在java程序里调用webservice报500返回码的有关问题
  3. 同济大学计算机系拿奖学分绩点,同济大学绩点换算(同济大学绩点多少算高)
  4. 华为百度导航Sdk黑屏
  5. 分部积分法的快速运算:表格法
  6. 面试flink开发岗位,看这些就够啦
  7. python代码审查规则_python代码检查
  8. Android 如何获取手机内存大小,内置存储空间大小
  9. 问题解决:Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist:...
  10. oracle rman crosscheck,rman 之crosscheck 与delete expired