复合视频显示与按键蜂鸣控制 FPGA 设计 Verilog Vivado
名称:复合视频显示与按键蜂鸣控制 FPGA 设计 Verilog Vivado
软件:Vivado
语言:Verilog
功能介绍
本设计是一个基于 FPGA 的 Verilog 综合实验工程,主要实现按键输入处理、七段数码管显示、蜂鸣器控制以及单色视频/复合视频信号输出等功能。工程顶层模块为 test02,面向 Vivado 开发环境,适合用于学习 FPGA 外设综合控制、视频时序信号组织、按键消抖和板级 I/O 约束配置。 工程通过左右按键和复用按键作为人机输入,内部完成复位同步、100us 定时节拍生成、按键消抖、按键优先编码等处理。输出端可驱动 8 位七段数码管段选与位选信号,并提供 blink 闪烁控制和 buz 蜂鸣器输出,便于在开发板上观察交互状态。 视频输出部分提供 cv_lum、cv_chrom、cv_sync、cv_sync_h、cv_sync_v 等信号接口,配合字符、字库访问、棋盘格/对角线等视频图形相关模块,可用于复合视频显示控制实验。该工程不仅包含核心 RTL 模块,也包含 testbench、约束文件、Vivado 工程结果和板级验证材料,适合课程设计、实验报告和二次开发参考。运行环境
开发语言:Verilog。 开发软件:Vivado。 工程包含 Vivado 项目文件、RTL 源码、testbench、XDC 管脚约束、bit/mcs 配置结果以及仿真脚本相关文件。约束文件中包含 Cmod A7 相关 master/config 约束,适合在对应硬件环境下进行综合、实现、生成 bitstream 和上板测试。设计思路
设计以 test02 顶层模块为核心,将人机输入、七段数码管显示、蜂鸣器提示和复合视频输出整合在同一 FPGA 工程中。外部输入包括系统时钟、复位、左右按键以及复用按键输入,输出侧包括数码管段选/位选、闪烁信号、蜂鸣器信号,以及 CV 视频亮度、色度、同步、水平同步和垂直同步相关端口。 系统先对原始复位信号进行同步处理,避免异步复位直接进入后级逻辑造成时序不稳定。随后通过可重载倒计数器产生 100us 采样节拍,用于按键消抖等低速外设逻辑。工程中设置 turbosim 输入,用于在仿真场景下缩短部分计数周期,提高仿真观察效率。 按键部分采用独立消抖模块处理左右按键,同时通过 mbutton 模块读取复用按键,再将普通按键和复用按键组合成统一的按键向量。优先编码模块 prio_enc 对按键状态进行编码,便于后级控制逻辑使用单一优先级结果判断当前有效输入。 显示与输出部分由 display_7s、buzzer02、cv_core、cv_control、cv_char、cv_charrom、cv_checkers、cv_diagonal 等模块协同完成。七段数码管用于显示固定测试内容和状态信息,蜂鸣器根据控制逻辑输出音调,复合视频相关模块负责字符、图案和同步信号生成,适合作为 FPGA 视频输出、外设控制和板级验证的综合练习工程。模块结构
顶层模块:test02,负责连接时钟复位、按键输入、数码管、蜂鸣器和复合视频输出接口。 主要功能模块包括:synchroniser_3s 复位同步,counter_down_rld 定时节拍,debounce 按键消抖,mbutton 复用按键读取,prio_enc 按键优先编码,display_7s 七段数码管动态扫描显示,buzzer02 蜂鸣器驱动,cv_core/cv_control 视频核心控制,cv_char/cv_charrom/cv_charrom_access 字符与字库访问,cv_checkers/cv_diagonal 图形显示辅助,mux_8ch、counter_triangular 等通用逻辑模块。 工程还包含 fpga_wrapper_test02、clkgen_cmod_a7 等板级封装和时钟相关模块,以及 tb01_test02 测试平台文件,用于配合 Vivado 仿真和工程实现。开发板验证
工程配套 Cmod A7 相关管脚约束文件,并提供开发板实物与上板测试画面,可用于核对时钟、复位、按键、七段数码管、蜂鸣器以及复合视频输出等外设连接。约束文件覆盖主工程 I/O 分配,适合在 Vivado 完成综合、实现和 bitstream 生成后进行实际硬件验证。 上板验证重点包括按键输入响应、数码管显示内容、蜂鸣器输出以及 CV 视频同步/亮度/色度相关信号的外设表现。工程中同时保留 bit/mcs 等配置结果,便于参考实现流程与硬件调试。

演示视频
提供仿真视频和演示视频,可直观看到工程运行与验证过程。视频内容适合在下载前了解工程现象,并在复现实验时对照按键、显示、蜂鸣器和视频输出相关表现。仿真图/仿真说明/设计文档图片
设计文档内容覆盖工程文件、程序文件、程序编译、RTL 图、管脚分配、Testbench 和仿真图等部分。配套文档图片可用于查看工程结构、编译过程、RTL 连接关系、管脚约束分配以及仿真波形说明,便于理解从源码到仿真验证、再到板级实现的完整流程。








部分代码
以下展示顶层模块 test02 的部分代码,完整源码请下载压缩包查看。
module test02
(
input wire clk,
input wire reset,
input wire turbosim,
input wire [1:0] buttons, // {L, R}
input wire muxpb, // multiplexed pushbutton
output wire [7:0] d7_cathodes_n, // {DP,CG,CF,CE,CD,CC,CB,CA}
output wire [7:0] d7_anodes,
output wire blink,
output wire buz,
output wire [2:0] cv_lum,
output wire cv_chrom,
output wire cv_sync,
output wire cv_sync_h,
output wire cv_sync_v
);
`include "display_7s.vh"
`include "buzzer02.vh"
wire reset_s; // synchronised reset signal
wire clk_ev_100us;
wire button_l; // debounced
wire button_r; // debounced
wire [7:0] mbuttons;
wire [79:0] d7_content0;
wire [BUZZER_NOTE_NOB-1:0] buzzer_note;
wire [7:0] buttons_all;
wire [2:0] buttons_prio;
wire buttons_active;
wire [7:0] cv_ctrl;
// Assign display contents (blink, mode, data)
// "tESt02"
assign d7_content0={8'b0000_0000,8'b0000_0011, 16'h0, d7_t, d7_E, d7_S, d7_t, 8'h0, 8'h2};
// Synchronise the incoming raw reset signal
synchroniser_3s synchroniser_3s_reset
(
.clk(clk),
.reset(1'b0),
.en(1'b1),
.in(reset),
.out(reset_s)
);
// Instantiate a down counter to provide 100us time base (for sampling of button, debounce)
counter_down_rld #( .COUNT_MAX(9_999), .COUNT_MAX_TURBOSIM(9) ) counter_100us
(
.clk(clk),
.reset(reset_s),
.turbosim(turbosim),
.rld(1'b0),
.underflow(clk_ev_100us)
);
// Instantiate a 7-segment display driver
display_7s #( .PRESCALER_RLD(99_999), .BLINK_RLD(499) ) display_7s
(
.clk(clk),
.reset(reset_s),
.turbosim(turbosim),
.en(1'b1),
.dis_data(d7_content0[63:0]),
.dis_mode(d7_content0[71:64]),
.dis_blink(d7_content0[79:72]),
.negate_a(1'b0), // we're using non-negating external drivers for anodes (npn emitter follower)
.cathodes_n(d7_cathodes_n),
.anodes(d7_anodes),
.blink(blink)
);
//Instantiate debounce for buttons[1] (left)
debounce debounce_l
(
.clk(clk),
.reset(reset_s),
.en(clk_ev_100us),
.signal_in(buttons[1]),
.signal_debounced(button_l)
);
//Instantiate debounce for buttons[0] (right)
debounce debounce_r
(
.clk(clk),
.reset(reset_s),
.en(clk_ev_100us),
.signal_in(buttons[0]),
.signal_debounced(button_r)
);
// multiplexed buttons
mbutton #(.MUX_NOB(8)) mbutton
(
.clk(clk),
.reset(reset_s),
.muxin(d7_anodes),
.pbin(muxpb),
.buttons(mbuttons)
);
// assign all buttons to a vector
assign buttons_all={mbuttons[5:0],button_l,button_r};
// prio encoder of button vector
prio_enc #(.INPUT_NOB(8)) prio_enc_button
(
.in(buttons_all),
.out(buttons_prio),
.out_active(buttons_active)
);
// Instantiate a buzzer
buzzer02 #(.BUZZER_RLD_1us(99) ) buzzer02
// ... 以下代码略,完整源码请下载压缩包查看
代码文件(付费下载)
📥
付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 复合视频显示与按键蜂鸣控制 FPGA 设计 Verilog Vivado
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 复合视频显示与按键蜂鸣控制 FPGA 设计 Verilog Vivado