FPGA学习日志——VGA接口项目

FPGA学习日志

鼓励自己每天进行学习总结:2021.2.2



VGA接口项目

想要学习FPGA的图像处理,先得学习如何显示图像


一、VGA是什么?

VGA是一种视频传输标准,于1987年推出,主要是为了当时的模拟显示器相匹配,所以输出的RGB都是(0~0.714V)的模拟信号 (注意这个电压值)。现在VGA已经是中低端电脑的底配了。其中最重要的就数以下五个控制信号了
VGA接口实物图


二、遇到的问题

1.接上信号线后,屏幕显示无信号

原因:rst高电平触发,但是开发板上的按键未按下时处于高电平状态,所以板子一直工作在rst状态

教训:以后的rst控制信号要用低电平触发rst_n

2.接上信号线后,屏幕黑屏

原因:输出信号VGA_RGB的位数没有对应好,本来是16位的输出,只输出了1位,所以相当于一直输出黑色

教训:以后的输出输入要先写好位数,这是一个重要的参数

3.接上信号线后,彩条错位显示

原因:输出的data_req请求信号,跟等待的pixel_data处于同一个时钟周期,然而VGA_display模块响应data_req和输出pixel_data需要一个时钟周期,所以data_req需要提前一个时钟周期送出

教训:

  1. 请求信号通常要比请求目标的输出信号提前一个时钟周期
  2. 计数器架构的话,“-1” 就是指 “提前一个时钟周期”

三、一些感想

  • 计数器架构对应的输出可以是组合逻辑输出,这样可以节省寄存器资源,但是需要考虑亚稳态产生的可能(目前还不能排除这可能性)

  • 关于reg和wire类型的感想:
    reg类型通常用在always模块,修改赋值通常是时间点,随后它会自动保存数值 (前提是使用不完整的if语句,又或者完整的if语句里面的else写上 reg<=reg )
    wire类型只能使用assign语句,修改赋值通常是时间段,若在计数器架构,则使用(cnt>=x , cnt<x+y);若在状态机架构,则使用(state == IDLE)

  • 关于模块内部参数的修改

VGA_driver
#(
	H_active(16'd640),
	V_active(16'd480)
)
VGA_driver_mo
(
	...
);
  • 在定义输出端口时,一般不说明是reg类型
    因为一般的输出都是组合逻辑电路,没必要使用reg,这样的输出没有时钟延迟
module test(output dout);
...
reg dout_reg
...
assign dout = dout_reg;
  • 注意驱动VGA中的信号都是3.3VTTL电平的,在配置引脚的时候记得设置

  • 使用top顶层文件进行模块之间的连接,方便模块修改后的编译

  • 关于使用锁相环PLL生成非整数倍的时钟,灵活使用乘数和除数的组合即可

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值