FPAG学习笔记:BCD码驱动2位数码管(动态扫描)
来源:互联网 发布:sql语句求和1到50 编辑:程序博客网 时间:2024/06/11 16:54
1、用Verilog 在Nexys 3开发板上设计并实现BCD码驱动2位数码管,数码管采用动态扫描方式显示。
2、Verilog源码如下所示:
`timescale 1ns / 1ps // 定义时间单位和事件单位、时间精度module seg2_7( input [7:0] x, // 每个4位开关输入一个BCD码,分别对应2个数码管的十进制数字 output reg[6:0] y, // 8段数码管,不带dp位置,则一共7段,分别为a,b,c,d,e,f,g output reg[3:0] digit_en, // 定义位选控制寄存器,直接驱动位选,总线宽度设置为4 input clk // 2位数码管公用7位数据线,由于要扫描刷新各个数码管,因此需要用时钟定时, ); // clkdiv分频,保证扫描周期5ms-10msreg[19:0] clkdiv; // 定义分频器reg[3:0] digit; // 定义显示寄存器,位宽为4wire s; // 标志信号,标志当前扫描数码管位// 引出标志定时信号线
assign s=clkdiv[19]; // 标志信号连接到clkdiv[19],2^19*(1/100M)=5ms// 定义分频器:类比timer
always @(posedge clk) begin // 定义分频计数器,相当于一个定时器clkdiv<=clkdiv+1; // 时序逻辑过程赋值end// 定义BCD寄存器,存储不同时刻的待显示的BCD码
always @(*) begin // 根据标志位s,决定显示寄存器的值case(s) 0:digit=x[3:0]; // 寄存器digit转载第0位数码管的BCD输入1:digit=x[7:4]; // 寄存器digit装载第1位数码管的BCD输入default:digit=x[3:0]; // 指定默认状态endcaseend// 定义数码管位控制寄存器,存储不同时刻生成的位控制字
always @(*) begin // 根据s状态决定位控制寄存器的值if(s==0)digit_en=4'b1110; // 如果s==1,位控制寄存器的值为4'b1110,开启第0位位选elsedigit_en=4'b1101; // 如果s==0,位控制寄存器的值为4'b1101,开启第1位位选end// 显示寄存器,存储7seg译码器
always @(*) begin // 定义7段译码器:BCD码-7段,理解:显示寄存器数据经过7段译码器输出到ycase(digit)0: y = 7'b0000001;1: y = 7'b1001111;2: y = 7'b0010010;3: y = 7'b0000110;4: y = 7'b1001100;5: y = 7'b0100100;6: y = 7'b0100000;7: y = 7'b0001111;8: y = 7'b0000000;9: y = 7'b0000100;'hA: y = 7'b0001000;'hB: y = 7'b1100000;'hC: y = 7'b0110001;'hD: y = 7'b1000010;'hE: y = 7'b0110000;'hF: y = 7'b0111000;default: y = 7'b0000001; endcaseendendmodule3、编辑用户约束文件(user constraint file)
NET "x[1]" LOC = "V8";NET "x[2]" LOC = "U8";NET "x[3]" LOC = "N8";NET "x[4]" LOC = "M8";NET "x[5]" LOC = "V9";NET "x[6]" LOC = "T9";NET "x[7]" LOC = "T10";NET "clk" LOC = "V10";NET "y[0]" LOC = "L14";NET "y[1]" LOC = "N14";NET "y[2]" LOC = "M14";NET "y[3]" LOC = "U18";NET "y[4]" LOC = "U17";NET "y[5]" LOC = "T18";NET "y[6]" LOC = "T17";NET "digit_en[0]" LOC = "N16";NET "digit_en[1]" LOC = "N15";NET "digit_en[2]" LOC = "P18";NET "digit_en[3]" LOC = "P17";
0 0
- FPAG学习笔记:BCD码驱动2位数码管(动态扫描)
- FPGA的俩位数码管动态扫描
- 8位数码管动态扫描显示
- proteus仿真之8位数码管动态扫描显示试验
- 8位数码管动态扫描显示变化数据
- 数码管动态扫描
- FPGA学习笔记二(数码管动态显示)
- 菜鸟之学习51单片机(六)点亮数码管,动态扫描
- 数码管动态扫描扩展显示
- 数码管动态扫描显示01234567
- 数码管动态扫描(非堵塞)
- lesson4~数码管的动态扫描
- Verilog HDL 学习篇——六位数码管驱动
- 关于6位数码管动态扫描显示程序的一些问题
- 【程序】STM32F103单片机使用定时器DMA进行全自动8位数码管动态扫描
- 第二十六节:在主函数while循环中驱动数码管的动态扫描程序。
- 树莓派 GPIO学习笔记(1)--4位数码管编程
- Verilog学习笔记6:层次化设计-数码管位选
- Socket 多线程通信
- UIAlertView和UIActionSheet的IOS8兼容
- Maven之——Nexus私服
- 第十一周项目4
- 多目标跟踪-Multi-Object Tracking
- FPAG学习笔记:BCD码驱动2位数码管(动态扫描)
- Oracle—decode函数行转列
- ARM开发板在WIN7系统下USB无法识别解决方案。
- gets();getschar();fget();
- 第一课 认识类与对象
- 汉诺塔演示程序QBasic版,开博第一帖
- Poj1696 Space Ant
- c#会动的图
- 设计模式笔记-状态模式