数字IC设计学习笔记_8位7段数码管1
数字IC设计学习笔记
8位7段数码管1
1 原理图
2 Verilog 代码
3 Modelsim仿真
1. 原理图
8位数码管
数码管内部结构图
- 数码管分为共阴极数码管和共阳极数码管;本文采用共阳极数码管。每个数码管内部的led灯的所有阳极连在一起,给正电压;当三极管的基极为高电平,三极管导通,VCC通过电阻,三极管加载到led灯的阳极。当led灯阴极为低电平,led灯点亮;当led灯阴极为高电平,led灯灭。
由于无法同时点亮8个数码管中单一的一个led灯,故采用动态扫描实现。
动态扫描:将操作平均共分为不同的时间段,如:8个数码管,分为8ms,则:
1ms: sel0 = 1, sel1 = 0; sel2 = 0;…sel7 = 0, a=0; 数码管0的led0亮;
2ms: sel0 = 0, sel1 = 1; sel2 = 0;sel7 = 0, b=0; 数码管1的led1亮;
3ms: sel0 = 0, sel1 = 0; sel2 = 1; sel7 = 0, c=0; 数码管2的 led2亮;
…
8ms: sel0 = 0, sel1 = 0; sel2 = 0; sel7 = 1, c=0; 数码管7的led7亮;
每1ms切换一次,故需要分频,得到一个1KHzd的时钟clk_1k,当clk_1k的第一个上升沿到来时,数码管0亮,第二个上升沿到来时数码管1亮…。
–>div - 控制端a,b,c,d,e,f,g段码需要由显示数据控制,显示数据通过对输入数据译码得到。第1毫秒的时候a,b,c,d,e,f,g,h对应1段码组合;第2毫秒的时候a,b,c,d,e,f,g,h对应2的段码组合…,涉及到显示内容的切换,每一毫秒,显示内容都是不一样的,如:
数码管0,显示1:1ms, 9ms, 17ms, 25ms, 33ms, 41ms, 49ms, 57ms -->a,b,c,d,e,f,g,h呈现1对应的段码;
数码管1,显示2:2ms, 10ms, 18ms, 26ms, 34ms, 42ms, 50ms, 58ms -->a,b,c,d,e,f,g,h呈现2对应的段码;
数码管2,显示3:3ms, 11ms, 19ms, 27ms, 35ms, 43ms, 51ms, 59ms -->a,b,c,d,e,f,g,h呈现3对应的段码;
…
数码管7,显示3:8ms, 16ms, 24ms, 32ms, 40ms, 48ms, 56ms, 64ms -->a,b,c,d,e,f,g,h呈现3对应的段码;
段码的状态每1ms也要切换一次–>带显示内容切换每1ms也要切换一次
每个数码管的显示数据:4位的输入数据data[3:0];
8个数码管的显示数据:8 * 4位的输入数据data[3:0] = 32位的输入数据data[31:0];
–>MUX8-1 - MUX8-1的选择控制端为当前扫描的数码管位置,sel[7:0],依次循环左移1位。
–>shift8
低功耗时,控制数码管显示与否<=>控制sel的状态,如果sel的值为全0,则数码管处于全灭状态;
–>MUX2-1
单一数码管工作原理
–>LUT, 4位输入,8位输出
原理图
实验现象:
在Quartus中,使用in system source and probes editor, 输入需要显示在数码管上的数据,数码管显示对应的数字。
2 Verilog 代码
//----top module---------------------------------
module hex8(input clk,input rst_n,input en,input [31:0] data,output reg [6:0] seg,output [7:0] sel
);reg [14:0] cnt_d;reg clk_1k;reg [7:0] sel_reg;reg [3:0] data_reg;
//----div----------------------------------always@(posedge clk or negedge rst_n)if(!rst_n)cnt_d <= 15'd0;else if(!en)cnt_d <= 15'd0;else if(cnt_d == 15'd24_999)cnt_d <= 0;elsecnt_d <= cnt_d + 15'd1;always@(posedge clk or negedge rst_n)if(!rst_n)clk_1k <= 0;else if(cnt_d == 15'd24_999)clk_1k <= ~clk_1k;elseclk_1k <= clk_1k;//----shift8-------------------------------always@(posedge clk_1k or negedge rst_n)if(!rst_n)sel_reg <= 8'b0000_0001; else if(sel_reg == 8'b1000_0000)sel_reg <= 8'b0000_0001;elsesel_reg <= sel_reg << 1;
//----MUX8-1-------------------------------always@(*)begincase(sel_reg)8'b0000_0001: data_reg <= data[3:0];8'b0000_0010: data_reg <= data[7:4];8'b0000_0100: data_reg <= data[11:8];8'b0000_1000: data_reg <= data[15:12];8'b0001_0000: data_reg <= data[19:16];8'b0010_0000: data_reg <= data[23:20];8'b0100_0000: data_reg <= data[27:24];8'b1000_0000: data_reg <= data[31:28];default: data_reg <= 4'd0;endcaseend
//----LUT-----------------------------------always@(*)begincase(data_reg)4'd0: seg <= 7'b000_0001;4'd1: seg <= 7'b100_1111;4'd2: seg <= 7'b001_0010;4'd3: seg <= 7'b000_0110;4'd4: seg <= 7'b100_1100;4'd5: seg <= 7'b010_0100;4'd6: seg <= 7'b010_0000;4'd7: seg <= 7'b000_1111;4'd8: seg <= 7'b000_0000;4'd9: seg <= 7'b000_0100;4'd10: seg <= 7'b000_1000;4'd11: seg <= 7'b110_0000;4'd12: seg <= 7'b011_0001;4'd13: seg <= 7'b100_0010;4'd14: seg <= 7'b011_0000;4'd15: seg <= 7'b011_1000;// default: seg <= 000_0000;endcase end
//----MUX2-1---------------------------------assign sel = (en)? sel_reg:8'd0;endmodule
//-------------------------------------------------
//----testbench--------------------------------
`timescale 1ns/1ns
`define clock_period 20
module tb_hex8;reg clk;reg rst_n;reg en;reg [31:0] data;wire [6:0] seg;wire [7:0] sel;hex8 uut(.clk(clk),.rst_n(rst_n),.en(en),.data(data), .seg(seg),.sel(sel)
);initial clk = 1;always #(`clock_period/2) clk = ~clk;initial beginrst_n = 0;en = 1;data = 32'h12345678;#(`clock_period*20);rst_n = 1;#(`clock_period*20); #20000000;data = 32'h87654321; #20000000;data = 32'h89abcdef; #20000000;$stop;endendmodule
3. Modelsim仿真
内容源自对小梅哥FPGA自学笔记的总结^^
【注】:个人学习笔记,如有错误,望不吝赐教,这厢有礼了~~~
数字IC设计学习笔记_8位7段数码管1相关推荐
- 数字IC设计学习笔记_Formality 形式验证
数字IC设计学习笔记 Formality 形式验证 1. 基本特点 2. Reference Design 和Implementation Design 3. container 4. 读入共享技术库 ...
- 数字IC设计学习笔记_静态时序分析STA_ PrimeTime 基本概述
数字IC设计学习笔记 PrimeTime 基本概述 1. PrimeTime 基本概述 2. 运行模式 1. PrimeTime 基本概述 PrimeTime,Synopsys公司提出的,针对于复杂的 ...
- 数字IC设计学习笔记_静态时序分析STA_伪路径False Paths
数字IC设计学习笔记 半周期路径Half Cycle Path 1. 伪路径False Paths 2. 如何处理False Paths 1. 伪路径False Paths 在设计中,有些路径是不可能 ...
- 数字IC设计学习笔记_静态时序分析STA_ STA基本概念
数字IC设计学习笔记 STA基本概念 1. STA基本概念 2. 时序弧概念 Timing Arc 3. 建立时间和保持时间概念 4. 时序路径概念Timing Path 5. 时钟域概念clock ...
- 数字IC设计学习笔记(一)——逻辑综合简介
目录 综合的抽象层次 逻辑级(RTL)综合流程 参考资料 综合的抽象层次 根据不同的抽象层次,综合可分为电路级综合.逻辑级综合.行为级综合 电路综合将电路的逻辑翻译成满足性能要求的晶体管网表,包括使用 ...
- Cadence IC设计学习笔记一
Virtuoso Schematic Editor学习 启动 建立新库.新单元及新视图 添加元件 添加管脚 添加电源和地 摆放元件并加网线 层次化设计-symbol生成 电路仿真 创建激励信号电路模块 ...
- 数字IC前端学习笔记:LSFR(线性反馈移位寄存器)
引言 LSFR(线性反馈移位寄存器)用于产生可重复的伪随机序列PRBS(Pseudo-Random Binary Sequence),结构包括n级D触发器和一些异或门(或同或门)组成,在每个时钟沿,后 ...
- 模拟IC设计学习笔记(1)---恒流源负载的共源极放大器极点的观察与计算
一.电路设计 1.恒流源负载的共源极放大器模型 2.在本次电路仿真中我们设定的参数: pmos:W=L=5um nmos:W=L=2um 输出点放置1pF电容(较大,即忽略两个MOS管的漏端电容) ...
- 笔试题-2023-燧原-数字IC设计【个人解答版】
回到首页:2023 数字IC设计秋招复盘--数十家公司笔试题.面试实录 推荐内容:数字IC设计学习比较实用的资料推荐 题目背景 笔试时间:2022.07.07 应聘岗位:数字IC设计 题目评价 难易程 ...
- 笔试题-2023-思远半导体-数字IC设计【纯净题目版】
回到首页:2023 数字IC设计秋招复盘--数十家公司笔试题.面试实录 推荐内容:数字IC设计学习比较实用的资料推荐 题目背景 笔试时间:2022.08.20 应聘岗位:数字IC设计工程师 笔试时长: ...
最新文章
- SQL中的循环语句_类似FOR循环
- linux命令tree
- 【解决方案】Windows10局域网内配置文件夹共享(附网络中没有找到的情况解决方案)
- myisam 表锁优化参考
- onCreateOptionsMenu
- 第五届省赛(软件类)真题----Java大学C组答案及解析
- Pandas Index 转换排序联表选取
- Angular2 指令
- Color.js增强你对颜色的控制
- Android内存泄漏检测利器:LeakCanary
- android之去掉actionbar
- MySQL集群(四)之keepalived实现mysql双主高可用
- 芯片制造工艺中的衡量指标
- UI 手势 点击
- C# 在wpf中如何使用image
- 团队协作工具--worktile
- 2017年18岁的北京文科状元父母都是外交官,关于高考,他说出了我们竭力回避的戳心真相
- python批量修改图片名
- 知云文献翻译打不开_科研星火 | 基础技能——翻译篇
- revi怎么弄插件能够使附件发生一定角度的旋转?
热门文章
- 从一位前阿里P7被裁员,聊技术人的第二职业!
- VS Code 中常用的 (前端)PHP 编程插件(2018)
- Java 的 FileInputStream 是否需要 close
- 基于深度学习模型(1D CNN)实现钓鱼网站检测
- QT图片缩放、拖动、重置
- 高等代数第3版下 [丘维声 著] 2015年版_3折购书优惠码限时抢(人工智能类)
- 回眸 2020,展望 2021
- java跳转页面_几种方式实现Javaweb页面跳转
- 【学习笔记】【MAC】sdk自带uiautomatorviewer启动报错问题解决
- php在线图片签名,ElementUi+Vue+Php+fpdf+fpdi 实现文档在线签订(图片水印、手写签名)...