数字系统设计实验六:用verilog实现4位led译码器电路
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译码器电路相关推荐
- 数字逻辑与数字系统设计实验大作业——4位密码锁
课程名称:数字逻辑与数字系统设计 任课教师:李琼 作业题目:4位电子密码锁 完成人:HIT的柯小信 报告日期:2020年 12月 13日 设计要求 计一个开锁密码至少为4位数字(或更多)的密码锁. 当 ...
- Verilog设计4位CLA加法器电路,并仿真测试
设计4位CLA加法器电路,并仿真测试 使用Quartus+modelsim完成本次设计 文章目录 设计4位CLA加法器电路,并仿真测试 分析 代码实现 Testbench 结果 分析 对于超前进位加法 ...
- 数字系统设计实验七(完结):verilog实现简易饮料贩售机
1.问题重述: 自动售饮料机是一个典型的利用状态机进行电路设计的例子.要求采用有限状态机设计,使用case语句来描述各个状态之间的转移关系.假定每瓶饮料售价为2.5元,可使用 2 种硬市,即5角(ha ...
- VHDL||数字系统设计实验--基于VHDL的流水灯电路设计
实验目的: 学习设计一个流水灯电路,并在实验板验证. 学习简单时序电路的设计和硬件测试. 学习使用VHDL语言方法进行逻辑设计输入. 实验内容: 实验VHDL程序: LIBRARY IEEE; USE ...
- 数字图像处理 实验六:方块编码(BTC)
基于Matlab的图像方块编码(BTC) DIP实验6:方块编码(BTC) 实验目的 实验内容 参考代码 实验结果 DIP实验6:方块编码(BTC) 实验目的 掌握方块编码的基本方法及压缩性能. 实验 ...
- 数字系统设计实验三:查找真值表实现加法器
1.问题重述: 试用查找真值表的方式实现真值表中的加法器,写出Verilog HDL代码. 2.问题分析: 本题要求是通过查找真值表的方式实现全加器,即三个输入,两个输出的加法器,要实现查找真值表,有 ...
- 数字系统设计Logsim实例 自主设计 学号音乐盒
Logsim实例 自主设计 学号音乐盒 数字系统设计 数字电路 设计题目:学号音乐盒 数字系统概述 1.1数字系统概念 1.2数字系统设计实验环境 学号音乐盒的设计 2.1学号音乐盒的原理 根据c调整 ...
- EDA课设(数字系统设计)--数字密码锁
目录 1,注意 2,可能遇到的问题 3,题目描述 4,实现前期准备 5,实现代码 6,引脚设置 7,部分验证 1,注意 该博客是根据自己的课设报告写的,所以大家不要抄袭,仅用作给大家提供实现思路以及一 ...
- 数字系统实验—第13周任务(3位数码管动态扫描显示实验含工程与优化)
数字系统实验--第13周任务 任务书 0.简介 1. 实验操作:1周 2. 完成并在线提交文档(100%) 日志(系统功能描述) 报告(目的 设计 实现 总结) 3. 三位数码管数据显示实验在线验收 ...
最新文章
- Android 一个activity 加载一个Fragment
- WCF 第九章 诊断 系列文章
- 应用编排与管理:Job DaemonSet
- 提升用户体验,你不得不知道的事儿——三种提醒框的微技巧
- 为什么Python中整型不会溢出
- 数字媒体播放器行业调研报告 - 市场现状分析与发展前景预测
- HTTPS性能优化实践
- WinForm窗体及其控件的自适应
- MATLAB/Simulink系统建模与仿真
- 802.11a/b/g/n/ac速率表
- Spring Cloud Gateway服务网关
- Arnold材质节点篇-阴影遮罩Shadow matte、颜色转换、纹理着色器
- 打新股和打新债有什么区别?
- 【目标检测】英雄联盟能用YOLOv5实时目标检测了 支持onnx推理
- 恶趣味程序之《徒有其表》
- background 背景属性详解
- 华为 5700交换机ACL traffic behavior命令 deny permit
- js 拖拽元素 鼠标速度过快问题
- 纯css实现太极阴阳鱼动画
- Unity初级教程贪吃蛇实现(Snake)带工程源码