verilog 实现的0-9 计数器数码管显示_FPGA毕设系列 | 显示与串行通信

本文介绍了如何使用FPGA实现VGA显示和UART串口通信,结合 Extend Shield 扩展板,演示了0-9计数器在数码管上的显示。内容包括VGA的时序设计、UART的波特率生成及数据收发,适合FPGA初学者和毕设项目参考。
摘要由CSDN通过智能技术生成

由于可编程逻辑器件技术的快速发展,FPGA的功能日益强大,在FPGA芯片上集成UART串口功能模块并和其他模块组合可以很方便地实现一个能与其他设备进行串行通信的片上系统。这里给大家分享小脚丫团队的Extend Shield,可以用 VGA 进行屏幕显示,也可以利用串口实现通讯,此外板卡上还集成了五 向开关与 4 位数码管,与两个 PMOD 接口,可让你尽情扩展更多功能。

一、设计任务

1. VGA实现屏幕保护

2. Uart实现数据收发

二、设计准备

硬件:小脚丫FPGA核心板、PCIE转接板、Extend Shield扩展板

软件:Quartus Prime/Lattice Diamond

三、设计结构

98714835ba4acd4b52260bff10d4a7dc.png

四、设计原理

板卡集成 USB 转串口通讯模块 CP2102,电路如下,图中,J4 为 MicroUSB 接口,D+,D-脚分别与 CP2102 对应管脚相连用于将上位机的 USB 数据输入至 CP2102,CP2102 的 TXD 管脚与 RXD 管脚分别与芯片相连,用于串口通讯。

45281d59b7821bf9fec5a3c860895320.png

板载 VGA 接口,可实现 256 色视频输出,接口采用 D-SUB 15pins 封装,电路图如下,其中,VGA_R0-VGAB1 为 RGB 三色输入,共 8 个信号,故可输入 256 种颜色,HSYNC 信 号为行扫描信号,VSYNC 信号为场扫描信号,行扫描与场扫描按照对应的时序与一定的扫描 频率就可实现图像的显示。

099684a7d3406abc4035551e5a0703fe.png

板卡上还集成了五向按键开关及数码管功能,这里不再详细介绍,想要了解的可在“阅读原文”中获取。

五、设计驱动

1. VGA模块驱动

本实验使用800x600@60Hz的VGA显示模式,首先将该VGA显示模式下的参数定义,在40MHz的主频下,参数如下: 

//-- Horizonal  timing information

`define HSYNC_A   16'd128   // 128

`define HSYNC_B   16'd216   // 128 + 88

`define HSYNC_C   16'd1016  // 128 + 88 + 800

`define HSYNC_D   16'd1056  // 128 + 88 + 800 + 40

//--  Vertical  timing information

`define VSYNC_O   16'd4     // 4

`define VSYNC_P   16'd27    // 4 + 23

`define VSYNC_Q   16'd627   // 4 + 23 + 600

`define VSYNC_R   16'd628   // 4 + 23 + 600 + 1

根据VGA扫描的时序,在40MHz主频时钟下,每一行需要1056个主频时钟周期的时间,而每一帧需要628行扫描时间,我们定义两个计数器,分别对主频时钟和行扫描进行计数,程序实现如下:

reg[15:0] x_cnt,y_cnt;

always@(posedge clk or negedge rst_n)  // Count for HSYNC

    if(!rst_n) x_cnt <=16'd1;

    elseif(x_cnt ==`HSYNC_D) x_cnt <=16'd1;

else x_cnt <= x_cnt +1'b1;

always@(posedge clk or negedge rst_n) // Count for VSYNC

    if(!rst_n) y_cnt <=16'd1;

    elseif(x_cnt ==`HSYNC_D)begin

        if(y_cnt ==`VSYNC_R) y_cnt <=16'd1;

        else y_cnt <= y_cnt +1'b1;

    endelse y_cnt <= y_cnt;

当行计数器x_cnt计数到1056且场计数器y_cnt计数到628时,就是VGA扫描一帧的时间,行计数和场计数开始的时候为同步信号,行场同步信号端口输出,根据时序要求程序实现如下:

output  reg          sync_v;      // sync_v

output  reg          sync_h;      // sync_h

always

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值