1.问题重述:
用Verilog HDL设计一个4位LED显示器的动态扫描译码电路。要求:4个七段显示器共用一个译码驱动电路。

2.问题分析:
a.首先是,我们需要明确的是什么是动态扫描译码电路。译码器即是输入数字,将对应的数字显示在led灯上,一个数字对应一种led点亮的灯序号。那么要想进行扫描,可以静态扫描,每次接受一个数字,都更新一次led的点亮序号,对应led灯同时点亮。而动态扫描就是每次扫描只点亮一盏灯,利用人的视觉暂留效果,达到数字显示的功能。这个视觉暂留时间是大约0.1s,那么我们进行扫描的时间不能大于0.1s。
b.其次是,led灯的点亮方式分共阴极和共阳极。共阴极即led二极管的阴极共同接在gnd上,另外的引脚有信号控制,信号接高电平,则点亮;共阳极即led二极管的阳极共同接在vdd上,另外的引脚有信号控制,信号接低电平,则点亮。

c.对控制信号的分析:按照下面的图示进行编号,一个数字的显示需要七位的数据进行控制,具体的对应关系如下(暂时忽略顿号)。
4’d0: segment=7’b1111110;
4’d1: segment=7’b0110000;
4’d2: segment=7’b1101101;
4’d3: segment=7’b1111001;
4’d4: segment=7’b0110011;
4’d5: segment=7’b1011011;
4’d6: segment=7’b1011111;
4’d7: segment=7’b1110000;
4’d8: segment=7’b1111111;
4’d9: segment=7’b1111011;
题目要求四位的led显示,采用静态译码则需要4*7=28个输出控制位,采用动态译码则需要4位选位和7个数字译码信号。很显然,动态译码在这方面具有很大的优势。

按下图的方式进行选位编码:

d.程序设计如下:将通过一个模块来实现这个功能。输入4个10进制数(16位二进制数字),通过case语句译码为4位选通信号,通过另一个case语句译码为数字显示信号。另外有rst信号进行归零操作。

3.代码详细:
.v文件:

`timescale 1ns / 1ps
//
// Company:
// Engineer: jefferymodule led(number,segment,chip,clk,rst);input [15:0] number;
input clk,rst;
output reg [6:0] segment;
output reg [3:0] chip;//这个always语句是完成了选通信号的逐个开启,0,1,2,3四个状态
reg [1:0] cnt;
always @(posedge clk or negedge rst)//rst信号的下降沿将触发这个模块,是他们在任何条件都进行复位操作beginif(!rst)cnt=0;elsecnt=cnt+1;end//这个部分是对每次选择的数字,以及对应显示的片进行了选择
reg [3:0] number_reading;//number_reading是用来表示通过片选信号按顺序显示数字,这时正在读取的数字
always @(posedge clk or negedge rst)begin
if(!rst)beginnumber_reading=1'd0;endelsebegincase(cnt)2'b11: beginnumber_reading=number[3:0];chip=4'b0001;end2'b10: beginnumber_reading=number[7:4];chip=4'b0010;end2'b01: beginnumber_reading=number[11:8];chip=4'b0100;end2'b00: beginnumber_reading=number[15:12];//从左边的数开始输出chip=4'b1000;enddefault: beginnumber_reading=1'd0;chip=4'b0000;endendcaseendend//这个always语句是对segment进行了数字编码
always @(posedge clk or negedge rst)beginif(!rst)segment=7'b0;elsebegincase(number_reading)4'd0: segment=7'b1111110;4'd1: segment=7'b0110000;4'd2: segment=7'b1101101;4'd3: segment=7'b1111001;4'd4: segment=7'b0110011;4'd5: segment=7'b1011011;4'd6: segment=7'b1011111;4'd7: segment=7'b1110000;4'd8: segment=7'b1111111;4'd9: segment=7'b1111011;default: segment=7'b0;endcaseendendendmodule

Tb文件:

`timescale 1ns / 1psmodule tb();reg [15:0] number;
reg clk,rst;wire [6:0] segment;
wire [3:0] chip;led my_led(.number(number),.segment(segment),.chip(chip),.clk(clk),.rst(rst));initialbegin clk=0;rst=0;#2 rst=1;number=0;
#8 number[15:12]=4'd5;number[11:8]=4'd4;number[7:4]=4'd3;number[3:0]=4'd2;//测试信号为5432#8 number[15:12]=4'd9;number[11:8]=4'd9;number[7:4]=4'd9;number[3:0]=4'd9;//测试信号为9999#8 number[15:12]=4'd2;number[11:8]=4'd0;number[7:4]=4'd2;number[3:0]=4'd2;//测试信号为2022#8 number[15:12]=4'd0;number[11:8]=4'd9;number[7:4]=4'd1;number[3:0]=4'd3;//测试信号为0913#8 rst=0;#8 rst=1;#8 number[15:12]=4'd10;number[11:8]=4'd11;number[7:4]=4'd12;number[3:0]=4'd13;//测试信号溢出#8 rst=0;end//生成clk信号,周期和系统最小时钟周期的两倍
always begin#1 clk=~clk;endendmodule 

4.测试结果


1)通过观察测试信号发现,由于cnt的起始数字由于测试发生变化而不同,即显示数字的顺序不是从左往右显示,而是3—2—1—4的顺序,但选片信号与数字信号的对应关系没有改变,这部分在代码内是由同一个begin_end块实现的,所以对功能没有影响。
2)对给定的输入测试,其输出满足下列对应关系:
4’d0: segment=7’b1111110;
4’d1: segment=7’b0110000;
4’d2: segment=7’b1101101;
4’d3: segment=7’b1111001;
4’d4: segment=7’b0110011;
4’d5: segment=7’b1011011;
4’d6: segment=7’b1011111;
4’d7: segment=7’b1110000;
4’d8: segment=7’b1111111;
4’d9: segment=7’b1111011;
3)复位信号可以顺利的使输出为0,并且当输入数字超过范围时,也不会进行输出。
经过测试,以上代码的功能正常。

数字系统设计实验六:用verilog实现4位led译码器电路相关推荐

  1. 数字逻辑与数字系统设计实验大作业——4位密码锁

    课程名称:数字逻辑与数字系统设计 任课教师:李琼 作业题目:4位电子密码锁 完成人:HIT的柯小信 报告日期:2020年 12月 13日 设计要求 计一个开锁密码至少为4位数字(或更多)的密码锁. 当 ...

  2. Verilog设计4位CLA加法器电路,并仿真测试

    设计4位CLA加法器电路,并仿真测试 使用Quartus+modelsim完成本次设计 文章目录 设计4位CLA加法器电路,并仿真测试 分析 代码实现 Testbench 结果 分析 对于超前进位加法 ...

  3. 数字系统设计实验七(完结):verilog实现简易饮料贩售机

    1.问题重述: 自动售饮料机是一个典型的利用状态机进行电路设计的例子.要求采用有限状态机设计,使用case语句来描述各个状态之间的转移关系.假定每瓶饮料售价为2.5元,可使用 2 种硬市,即5角(ha ...

  4. VHDL||数字系统设计实验--基于VHDL的流水灯电路设计

    实验目的: 学习设计一个流水灯电路,并在实验板验证. 学习简单时序电路的设计和硬件测试. 学习使用VHDL语言方法进行逻辑设计输入. 实验内容: 实验VHDL程序: LIBRARY IEEE; USE ...

  5. 数字图像处理 实验六:方块编码(BTC)

    基于Matlab的图像方块编码(BTC) DIP实验6:方块编码(BTC) 实验目的 实验内容 参考代码 实验结果 DIP实验6:方块编码(BTC) 实验目的 掌握方块编码的基本方法及压缩性能. 实验 ...

  6. 数字系统设计实验三:查找真值表实现加法器

    1.问题重述: 试用查找真值表的方式实现真值表中的加法器,写出Verilog HDL代码. 2.问题分析: 本题要求是通过查找真值表的方式实现全加器,即三个输入,两个输出的加法器,要实现查找真值表,有 ...

  7. 数字系统设计Logsim实例 自主设计 学号音乐盒

    Logsim实例 自主设计 学号音乐盒 数字系统设计 数字电路 设计题目:学号音乐盒 数字系统概述 1.1数字系统概念 1.2数字系统设计实验环境 学号音乐盒的设计 2.1学号音乐盒的原理 根据c调整 ...

  8. EDA课设(数字系统设计)--数字密码锁

    目录 1,注意 2,可能遇到的问题 3,题目描述 4,实现前期准备 5,实现代码 6,引脚设置 7,部分验证 1,注意 该博客是根据自己的课设报告写的,所以大家不要抄袭,仅用作给大家提供实现思路以及一 ...

  9. 数字系统实验—第13周任务(3位数码管动态扫描显示实验含工程与优化)

    数字系统实验--第13周任务 任务书 0.简介 1. 实验操作:1周 2. 完成并在线提交文档(100%) 日志(系统功能描述) 报告(目的 设计 实现 总结) 3. 三位数码管数据显示实验在线验收 ...

最新文章

  1. Android 一个activity 加载一个Fragment
  2. WCF 第九章 诊断 系列文章
  3. 应用编排与管理:Job DaemonSet
  4. 提升用户体验,你不得不知道的事儿——三种提醒框的微技巧
  5. 为什么Python中整型不会溢出
  6. 数字媒体播放器行业调研报告 - 市场现状分析与发展前景预测
  7. HTTPS性能优化实践
  8. WinForm窗体及其控件的自适应
  9. MATLAB/Simulink系统建模与仿真
  10. 802.11a/b/g/n/ac速率表
  11. Spring Cloud Gateway服务网关
  12. Arnold材质节点篇-阴影遮罩Shadow matte、颜色转换、纹理着色器
  13. 打新股和打新债有什么区别?
  14. 【目标检测】英雄联盟能用YOLOv5实时目标检测了 支持onnx推理
  15. 恶趣味程序之《徒有其表》
  16. background 背景属性详解
  17. 华为 5700交换机ACL traffic behavior命令 deny permit
  18. js 拖拽元素 鼠标速度过快问题
  19. 纯css实现太极阴阳鱼动画
  20. Unity初级教程贪吃蛇实现(Snake)带工程源码

热门文章

  1. 【一篇文章搞懂】什么是分布式锁?为什么要用分布式锁?看这篇文章准没错!
  2. 台哥教你写计算机毕业设计论文
  3. mt6762添加gpio按键方法与问题调试
  4. 游戏技巧-《我的世界》地图存档简介及使用
  5. Codeigniter框架 添加守护进程
  6. [附源码]计算机毕业设计springboot汽车美容店管理系统
  7. 导数能不能通过除法 dy/dx 的求出?
  8. 【游戏】问题解决:光环进入不了游戏
  9. 高数【求导】--猴博士爱讲课
  10. 【MAFNet】 A Multi-Attention Fusion Networkfor RGB-T Crowd Counting解读