• 方案介绍
  • 相关推荐
申请入驻 产业图谱

按键电压数码管显示 FPGA 设计 Verilog Vivado

06/15 14:43
146
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

名称:按键电压数码管显示 FPGA 设计 Verilog Vivado

软件:Vivado

语言:Verilog

功能介绍

本设计实现了一个基于 FPGA 的按键电压显示功能,顶层模块接收 10 位按键输入数据,可用于模拟 ADC_DATA[9:0] 输入,并将输入数值换算为电压显示值。设计目标是把采集到的数字量按照 0.01 的显示精度转换成便于观察的电压数据,再通过数码管输出显示。

系统输入包含 50MHz 时钟 clk 和 10 位 key_in,输出包含 6 位数码管位选 SEG_nCS 与 8 位数码管段选 SEG_LED。顶层模块负责完成输入数据到电压值的计算,显示模块负责数码管扫描和段码输出,整体结构清晰,适合用于 FPGA 入门实验、按键/ADC 数据显示实验以及数码管显示控制学习。

电压换算部分采用 key_in 乘以 200 后再除以 1023 的方式,将 10 位输入范围映射到相应的电压显示范围。代码中标注显示精度为 0.01,便于在数码管上以较直观的形式呈现输入数据对应的电压值。

运行环境

开发软件:Vivado

设计语言:Verilog

工程类型:FPGA 工程,包含 Vivado 项目文件、Verilog 源码、管脚约束文件和已生成的实现结果文件。

设计思路

设计采用“数据换算 + 数码管显示”的结构。顶层 key_display 模块接收 10 位输入 key_in,将其作为待显示的采样数据进行比例换算;换算完成后得到 8 位 Voltage 信号,再送入 display 显示模块。这样可以把数据处理和显示驱动分开,顶层逻辑简洁,后续修改显示格式或替换输入来源也比较方便。

在数据处理部分,key_in 先乘以 200 得到 AD_200,再除以 1023 得到 Voltage。由于输入为 10 位数据,满量程对应 1023,因此该换算方式能够将数字量转换成显示用的电压数值。乘法和除法都在顶层中直接表达,适合教学和实验场景中观察 Verilog 算术运算与综合实现之间的关系。

显示部分通过独立的 display 模块完成,接口包含 clk、Voltage、SEG_nCS 和 SEG_LED。display 模块根据输入电压值产生数码管位选和段选信号,实现多位数码管的动态显示。顶层模块只需要实例化显示模块并传入 Voltage,降低了模块之间的耦合度,也便于单独分析显示驱动逻辑。

模块结构

顶层模块:key_display

主要功能:接收 50MHz 时钟和 10 位按键输入数据,完成电压值换算,并调用显示模块输出数码管位选和段选信号。

子模块:display

主要功能:接收换算后的 Voltage 数据,驱动 6 位数码管位选 SEG_nCS 和 8 位段选 SEG_LED,实现数码管显示输出。

主要工程文件包括 key_display.v、display.v、pins.xdc 和 key_display.xpr。

开发板验证

工程包含 Vivado 管脚约束文件 pins.xdc,并已生成实现阶段相关结果与 bit 文件,可用于 FPGA 开发板按键输入和数码管显示实验验证。管脚约束覆盖了时钟、按键输入以及数码管位选、段选等外设信号,适合直接结合对应硬件连接进行下载测试。

部分代码

以下展示顶层模块 key_display 的部分代码,完整源码请下载压缩包查看。

module key_display(
input clk,//时钟50M
input [9:0] key_in,//按键输入(模拟AD输入)ADC_DATA[9:0]
output [5:0] SEG_nCS,//数码管位选
output [7:0] SEG_LED//数码管段选
);
//显示精度是0.01,2Vvpp
//电压计算
wire [7:0] Voltage;
wire [19:0] AD_200;
assign AD_200=key_in*200;//AD乘以200转换为0.01精度
assign Voltage=AD_200/1023;//除以2的10次方转换为电压

//显示模块
display i_display(
. clk(clk),//时钟50M
. Voltage(Voltage),//电压,精度是0.01
. SEG_nCS(SEG_nCS),//数码管位选
. SEG_LED(SEG_LED)//数码管段选
);

endmodule

代码文件(付费下载)

相关推荐