超声波测距数码管显示 FPGA 设计 Verilog Vivado
2026/6/12 7:36:59 网站建设 项目流程

名称:超声波测距数码管显示 FPGA 设计 Verilog Vivado

软件:Vivado

语言:Verilog

功能介绍

本设计实现基于 FPGA 的超声波测距与数码管显示功能,使用 Verilog 编写,在 Vivado 工程中完成综合、实现与比特流生成。系统通过超声波模块的 trig 信号发出触发脉冲,并接收 echo 回波高电平,根据回波持续时间换算距离值,输出单位为 mm 的测距数据。 为了提升显示稳定性,设计在原始测距数据后加入 8 点均值滤波处理,对连续有效距离数据进行平均,减小单次测量抖动对显示结果的影响。滤波后的距离值送入数码管显示模块,通过段选和位选信号完成多位数码管动态扫描显示。 整体功能适合用于 FPGA 入门实验、超声波传感器接口实验、数字测距课程设计和板级外设联调参考。工程结构清晰,顶层模块将测距、滤波和显示三个功能单元连接在一起,便于学习各模块之间的数据流和控制信号配合。

运行环境

开发语言:Verilog 开发软件:Vivado 顶层模块:SMDisplay 主要工程文件包括 Vivado 工程文件、Verilog 源码文件和 XDC 管脚约束文件。工程包含 SMDisplay、Ultrasonic、moving_average_8point、display 等模块,可在 Vivado 环境中打开工程进行综合、实现和下载验证。

设计思路

系统采用模块化设计思路,顶层 SMDisplay 负责连接超声波测距、数据滤波和数码管显示。外部输入包括系统时钟 clk、复位 rst 和超声波模块 echo 信号,输出包括 trig 触发信号、数码管段选 dataout 以及位选 en。顶层不直接处理复杂算法,而是将不同功能拆分到独立模块中,便于调试和复用。 Ultrasonic 模块负责完成超声波测距时序控制。该模块根据系统时钟产生约 15us 的 trig 触发脉冲,并对 echo 高电平持续时间进行计数,得到距离测量值 distance,同时通过 distance_vld 给出单周期数据有效标志。该结构使后级模块只在数据有效时更新,避免无效采样影响显示。 moving_average_8point 模块用于对测距结果做 8 点均值滤波。每当 distance_vld 有效时,将新的 distance 数据送入滤波模块,输出平均后的 distance_av。相比直接显示单次测量值,均值滤波可以使数码管读数更平稳,尤其适合超声波模块这类容易受环境反射、角度和瞬时干扰影响的传感器。 display 模块负责将滤波后的距离值转换为数码管显示信号。模块输出 8 位段选 dataout 和 6 位 COM 使能 en,通过动态扫描方式显示距离数据。测距、滤波、显示三部分之间通过明确的数据有效信号和距离总线连接,逻辑层次清楚,适合继续扩展报警、量程判断或串口输出等功能。

模块结构

模块结构如下: SMDisplay:顶层模块,连接时钟、复位、超声波 echo/trig 接口、数码管段选和位选信号。 Ultrasonic:超声波测距模块,产生 trig 触发脉冲,接收 echo 回波信号,输出 distance 和 distance_vld。 moving_average_8point:8 点均值滤波模块,对有效测距数据进行平均处理,输出稳定后的 distance_av。 display:数码管显示模块,根据滤波后的距离值输出 dataout 和 en,实现距离数值显示。 SMDisplay_vlg_tst:测试相关文件,可用于模块仿真参考。

开发板验证

工程配有 XDC 管脚约束文件,并提供开发板实物验证相关图片,可用于 Vivado 工程的板级下载和接口连接参考。顶层接口包含超声波模块的 trig、echo 信号以及数码管 dataout、en 输出,适合结合约束文件完成 FPGA 引脚分配、外设连线和开发板实测显示。

演示视频

配有演示视频,可用于查看超声波测距与数码管显示的实际运行效果。

演示视频请关注公众号后获取对应资料查看。

部分代码

以下展示顶层模块SMDisplay的部分代码,完整代码可关注下方公众号卡片获取。

module SMDisplay(clk,rst,echo,trig,dataout,en); input clk,rst;//时钟和复位 input echo;//接收距离高电平 output trig;//发送15us脉冲 output[7:0] dataout;//数码管段选 output[5:0] en;//COM使能输出 wire distance_vld; wire [15:0] distance;//测距值,单位mm wire [15:0] distance_av;//测距值,单位mm //超声波测距模块 Ultrasonic i_Ultrasonic ( . clk_50M(clk), . reset_n(rst), . echo(echo),//接收距离高电平 . trig(trig),//发送15us脉冲 . distance_vld(distance_vld), // 数据有效信号,单周期脉冲 . distance(distance)//输出距离,单位mm ); //均值滤波 moving_average_8point i_moving_average_8point ( . clk(clk), // 时钟信号 . rst_n(rst), // 异步复位信号,低电平有效 . data(distance), // 32位输入数据 . en(distance_vld), // 数据有效信号,单周期脉冲 . avg(distance_av), // 32位平均值输出 . avg_valid() // 平均值有效信号 ); //数码管显示模块 display i_display( . clk(clk), . rst(rst), . dataout(dataout),//数码管段选 . en(en),//COM使能输出 . distance(distance_av)//输出距离,单位mm ); endmodule

代码获取:点击下方公众号卡片

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询