Verilog HDL那些事_建模篇笔记(实验七:数码管电路驱动)

时间:2022-09-22 10:42:05

1.同步动态扫描

多个数码管的显示采用的是同步动态扫描方法,同步动态扫描指的是:行信号和列信号同步扫描,是一种并行操作。

2.数码管驱动电路实现思路

    Verilog HDL那些事_建模篇笔记(实验七:数码管电路驱动)

如果要求数码管显示我们想要的数字,首先需要写一个数据接收模块,这个模块接收数据之后需要做什么样的处理呢?这时候我们会想到两个数码管,其中一个显示十位数字,另一个显示各位数字,即把这个数据的十位传给其中一个数码管,各位数字传给另一个数码管来显示。这样我们就会明确了:数据接收模块需要将接收的数据进行拆分,分别输出其十位数据与个位上的数据

Verilog HDL那些事_建模篇笔记(实验七:数码管电路驱动)

程序风格:

1.always块语句中,总是先写出复位信号到来时候的情况,即输出全部置零。

2.always块语句中的变量都是reg型,因此在写always块语句前需要事先定义好,定义好reg型变量的位宽与名字。

3.尽管always块语句里面是对输出量的处理,但reg型的变量名最好不用输出量的名字,应先用其它的变量名代替,最后通过assign语句传递给输出量。(以后的工作中需要弄清楚为什么是这种编码风格)。

    注意:

    1.给变量赋值时,应带上数据的位宽与进制,总之,在编码的过程中,时刻注意变量的位宽与进制。多敲代码,养成良好的编码习惯。

    2.写条件语句时,注意里面的代码,通常是以begin开头,end结尾,很重要,即使逻辑正确,少了这些,都无法通过编译。

Verilog HDL那些事_建模篇笔记(实验七:数码管电路驱动)     当我们获得输入数据的十位与个位信号后,我们并不能直接传输给数码管,让其显示。当然八段数码管的显示方式并不陌生,因此十位与个位信号需要经过一个翻译的过程,把这两个信号翻译成数码管能识别的代码,这是一个加码的过程。

Verilog HDL那些事_建模篇笔记(实验七:数码管电路驱动)

Verilog HDL那些事_建模篇笔记(实验七:数码管电路驱动)

以上为八段数码管的显示编码,在程序中以参数的形式给出,方便以后调用。其中,当复位信号到来时,给输出信号赋值为“8’b1111_1111”此时八段数码管处于熄灭状态。

 注意:似乎有大量参数的程序,都会用到case/endcase程序段,类似一个查表的过程,当case(输入量),在以下的代码中找到相匹配的输入量后,执行对应的语句(对输出量进行操作,赋值等)。

Verilog HDL那些事_建模篇笔记(实验七:数码管电路驱动)

在我们获得了数码管的显示代码后,为什么不直接传给数码管呢,直接显示应该没问题呀,但为什么需要加一个行扫描模块与列扫描模块,希望有看到这篇博客的人能告诉为原因。

Verilog HDL那些事_建模篇笔记(实验七:数码管电路驱动)

先说说列扫描,扫描频率制定为50Hz,即周期为0.02s,即从左至右,把两个灯扫一遍需要20ms,分配给两个灯,一个灯亮10ms,即每隔10ms换一个数码管使能。列扫描的工作机制如下:无需额外的输入,内部需要计数器,产生10ms的时间,然后通过内部逻辑控制数码管的使能。输出的列扫描信号即为数码管的片选信号,在实际的引脚分配中要注意。

Verilog HDL那些事_建模篇笔记(实验七:数码管电路驱动)     以下为计数器的典型写法。

Verilog HDL那些事_建模篇笔记(实验七:数码管电路驱动)     写完计数器之后,就应该写对输出语句的操作了。结合两个always块语句来看,前一个always块语句里面的变量t用在了下一个always块语句里面的case里面。

这其中涉及到一个状态机的编码技巧(哈哈,前几天看视频才弄明白的)。

     分析:

            输出信号有两种状态0:rColumn_Scan <= 2’b10; 个位数码管使能

                                      1: rColumn_Scan <= 2b01;十位数码管使能

            前一个always块语句专门用来控制状态变量t的跳变,即在什么条件下由一个状态跳变到另外一个状态中呢?绘制如下状态图:

Verilog HDL那些事_建模篇笔记(实验七:数码管电路驱动)

Verilog HDL那些事_建模篇笔记(实验七:数码管电路驱动)

状态机与相应的操作分开写,会让程序更加清晰。

最后是行扫描模块,数码管的十位与个位显示代码是传给行扫描模块的,最后模块输出一个行扫描信号。行扫描模块的工作机制如下:

  因为行扫描与列扫描是同步进行的,因此也需要一个10ms的计数器,假设初始时间是0,过了10ms后,十位的数码管被使能,这时候,行扫描模块应该把十位上的数据传给十位数码管,再过10ms,个位的数码管被使能,这时候,行扫描模块应该把个位上的数据传给个位数码管。这其中也有一个状态的跳变过程,需要写状态机。

Verilog HDL那些事_建模篇笔记(实验七:数码管电路驱动)

    至此,数码管驱动电路各个模块已经完成,最后只需要通过一个顶层文件用wire将各个模块连接起来。

Verilog HDL那些事_建模篇笔记(实验七:数码管电路驱动)的更多相关文章

  1. Verilog HDL那些事&lowbar;建模篇笔记(实验一,实验二)

    实验一:永远的流水灯 扫描频率配置为100Hz,即是说扫描周期为10ms.这里需要注意的是扫描周期的概念.流水灯嘛,顾名思义,扫描周期指的是流水灯扫一轮所需要的时间.听到说周期,就应该想到在建模的时候 ...

  2. Verilog HDL那些事&lowbar;建模篇笔记(实验九:VGA驱动)

    1.了解VGA协议 VGA协议有5个输入信号,列同步信号(HSYNC Signal),行同步信号(VSYNC Signal),红-绿-蓝,颜色信号(RGB Signal). 一帧屏幕的显示是由行从上至 ...

  3. Verilog HDL那些事&lowbar;建模篇笔记(实验八:键盘解码)

    1.PS2接口与协议时序图 对于PS2的接口来说,需要额外关注的是PIN5与PIN1,一个是时钟,一个是数据.PS2协议对数据的移位是“CLOCK下降沿”有效,其CLOCK的频率通常在10KHz左右. ...

  4. Verilog HDL那些事&lowbar;建模篇笔记(实验三:按键消抖)

    实验三:按键消抖 首先将按键消抖功能分成了两个模块,电平检查模块和10ms延迟模块.电平检测模块用来检测按键信号的变化(是否被按下),10ms延迟模块用来稳定电平检查模块的输入,进而稳定按键信号,防止 ...

  5. 【黑金教程笔记之008】【建模篇】【Lab 07 数码管电路驱动】—笔记

    实验七的目的是设计实现最大为99数字在2个数码管上.采用同步动态扫描.即行信号和列信号同步扫描.这里数码管是共阳极的.选择端口也是共阳极的. 模块: /************************ ...

  6. 基于Verilog HDL 的数字时钟设计

    基于Verilog HDL的数字时钟设计 一.实验内容:     利用FPGA实现数字时钟设计,附带秒表功能及时间设置功能.时间设置由开关S1和S2控制,分别是增和减.开关S3是模式选择:0是正常时钟 ...

  7. 【黑金教程笔记之003】【建模篇】akuei2的Verilog hdl心路

    Verilog hdl不是“编程”是“建模” Verilog hdl语言是一种富有“形状”的语言. 如果着手以“建模”去理解Verilog hdl语言,以“形状”去完成Verilog hdl语言的设计 ...

  8. 【转】Verilog HDL常用建模方式——《Verilog与数字ASIC设计基础》读书笔记&lpar;四&rpar;

    Verilog HDL常用建模方式——<Verilog与数字ASIC设计基础>读书笔记(四) Verilog HDL的基本功能之一是描述可综合的硬件逻辑电路.所谓综合(Synthesis) ...

  9. Verilog HDL实用教程笔记

    Verilog HDL实用教程笔记 DRC - Design Rule Check 几何规则检查ERC - Electrical Rule Check 电学规则检查自动参数提取LVS - Logic ...

随机推荐

  1. &lbrack;翻译&rsqb; Android是怎样绘制视图的

    原文:How Android Draws Views 当一个Activity获取到焦点的时候,它的布局就开始被绘制. 绘制的过程由Android framework处理.但布局层级的根节点必须由Act ...

  2. super 要点

    class Grandparent { public Grandparent() { System.out.println("GrandParent Created."); } p ...

  3. 2014年亚洲区域赛北京赛区现场赛A&comma;D&comma;H&comma;I&comma;K题解&lpar;hdu5112&comma;5115&comma;5119&comma;5220&comma;5122&rpar;

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud 下午在HDU上打了一下今年北京区域赛的重现,过了5题,看来单挑只能拿拿铜牌,呜呜. ...

  4. cocos2d-x 颜色

    ccBlendFunc cbl = {GL_SRC_ALPHA, GL_ONE}; Sprite *sprite = Sprite::create("128_00002.png") ...

  5. ajax-post请求

    一般来说字符串读取不出来查看下面这行代码是否加上: xmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencode ...

  6. swift 分组tableview 设置分区投或者尾部,隐藏默认间隔高度

    1.隐藏尾部或者头部,配套使用 //注册头部id tv.register(JYWithdrawalRecordSectionView.self, forHeaderFooterViewReuseIde ...

  7. GCC&amp&semi;&amp&semi;GDB在OI中的介绍

    序言 这本来是用Word写的,但是后来我换了系统所以只能用markdown迁移然后写了...... $\qquad$本文主要投食给那些在Windows下活了很久然后考试时发现需要用命令行来操作时困惑万 ...

  8. 数据结构与算法之Stack(栈)的应用——用stack实现一个计算器-&sol;bin&sol;calc&period;dart

    计算器的bin/calc.dart 可执行代码: import 'dart:io'; import 'package:data_struct/stack/sample/calculator.dart' ...

  9. mysql学习(4)python操作数据库

    整理了一下前面3期学的内容后,现在练习使用python去操作数据库 #!python3# coding:utf-8import pymysqlclass mysql_option(): def __i ...

  10. 一个java程序员的年终总结

    年底了,该给自己写点总结了! 从毕业到现在已经快4年啦,一直在Java的WEB开发行业混迹.我不是牛人,但是自我感觉还算是个合格的程序员,有必要写下自己将近4年来的经历,给自我以提示,给刚入行的朋友提 ...