热度 29
2015-3-16 20:56
1442 次阅读|
0 个评论
摄像头的数据信号可以经过电路上的VGA接口,在液晶显示器上显示图像。电路板上有一片8位视频DAC芯片ADV7123,可以将数字图像信号转换成液晶显示器需要的模拟信号,直接成像。具体的信号流是摄像头到FPGA,FPGA再将图像信号提供给ADV7123,ADV7123最后驱动液晶显示器。 这里简化一下上面的信号流,由FPGA产生8个彩条信号,而不用摄像头产生彩条信号(多数摄像头都可以产生测试用的8位彩条信号)。关于VGA信号的工作原理,这里不做介绍,用户可以百度一下,资料多的是。在编写FPGA程序前,首先要百度VGA的时序,如800*600分辨率下,系统时钟是多少?计算如下:1056*628*60=39790080=40M。其中60为刷新频率,1056=128+88+800+40,四个值分别对应abcd四个值,可以对照下图,(更多分辨率可以查看这个地址:http://tinyvga.com/vga-timing) 此处为图片, FPGA中的程序很简单,下面是关于800*600分辨率下各种时序常数的定义,需要和上面对应上,如下, --/**************** 800*600@60HZ ********************/ constant H_SYNC: INTEGER:=128; --a constant H_BACK: INTEGER:=88; --b constant H_ACTIVE: INTEGER:=800; --c constant H_FRONT: INTEGER:=40; --d constant H_BLANK:INTEGER:= H_FRONT + H_SYNC + H_BACK;-- constant H_TOTAL: INTEGER:= H_SYNC + H_ACTIVE + H_FRONT + H_BACK;--1056 constant V_SYNC: INTEGER:=4; --o constant V_FRONT: INTEGER:=23; --p constant V_ACTIVE: INTEGER:=600; --q constant V_BACK: INTEGER:=1; --r constant V_BLANK: INTEGER:= V_FRONT + V_SYNC + V_BACK;-- constant V_TOTAL: INTEGER:= V_SYNC + V_ACTIVE + V_FRONT + V_BACK;--628 第二点是一个PLL模块,输入电路板上的时钟信号是48M,经过PLL输出时钟是40,具体前面也计算过,如下, Gen_clk40m: pll_core PORT MAP ( inclk0 = clkin_48m, c0 = clk_40M ); 第三部分就是产生彩条的代码, 正在更新,,,,, (另公布一群号178338109,CYUSB3014开发专业讨论区) 淘宝店铺: http://liangziusb.taobao.com 良子.2015年 承接USB开发工程 QQ:2687652834