由于可编程逻辑器件技术的快速发展,FPGA的功能日益强大,在FPGA芯片上集成UART串口功能模块并和其他模块组合可以很方便地实现一个能与其他设备进行串行通信的片上系统。这里给大家分享小脚丫团队的Extend Shield,可以用 VGA 进行屏幕显示,也可以利用串口实现通讯,此外板卡上还集成了五 向开关与 4 位数码管,与两个 PMOD 接口,可让你尽情扩展更多功能。
一、设计任务
1. VGA实现屏幕保护
2. Uart实现数据收发
二、设计准备
硬件:小脚丫FPGA核心板、PCIE转接板、Extend Shield扩展板
软件:Quartus Prime/Lattice Diamond
三、设计结构
四、设计原理
板卡集成 USB 转串口通讯模块 CP2102,电路如下,图中,J4 为 MicroUSB 接口,D+,D-脚分别与 CP2102 对应管脚相连用于将上位机的 USB 数据输入至 CP2102,CP2102 的 TXD 管脚与 RXD 管脚分别与芯片相连,用于串口通讯。
板载 VGA 接口,可实现 256 色视频输出,接口采用 D-SUB 15pins 封装,电路图如下,其中,VGA_R0-VGAB1 为 RGB 三色输入,共 8 个信号,故可输入 256 种颜色,HSYNC 信 号为行扫描信号,VSYNC 信号为场扫描信号,行扫描与场扫描按照对应的时序与一定的扫描 频率就可实现图像的显示。
板卡上还集成了五向按键开关及数码管功能,这里不再详细介绍,想要了解的可在“阅读原文”中获取。
五、设计驱动
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 |