特权同学

AV视频信号采集显示

0
阅读(2151)

这几天在写一个AV芯片控制、后端采集数字信号并做缓存显示的FPGA代码。硬件早就就绪了,一步一步调试过来,基本有些谱了。趁着周末,能够有一些时间好好理一理设计的思路。

         第一天拿到板子,好好话时间做了一个IIC读写控制的模块,虽然之前也有过类似模块,只是感觉是早期的设计,不免有些稚嫩,通用性上也做得不够好,移植起来花的整改时间可能比彻头彻尾重新设计一个多得多。因此,重新写重新仿真,到最终板级下载初步的验证,并且用上In-System Sources and Probes实时的改变IIC读地址,采样到IIC读出的对应地址寄存器上的数据和datasheet里给出的ASIC(MAX的一款AV采集芯片)初始数据完全一致,说明这个IIC接口模块的设计以及ASIC硬件接口的链接基本没有问题。

    接着是尝试往ASIC的某一个地址寄存器写数据,对相应寄存器做配置,然后IIC读出验证是否写入成功,也没有问题。其实这个芯片是蛮智能的那种,即便无需做任何设置,上电后接上AV信号就能够有默认的输出。接上AV信号后,读取状态寄存器1观察到检测位置高(说明有信号输入)。然后使用Virtual JTAG,内部再例化了一个FIFO,FIFO一上电后缓存8K个采样数据,由于VJTAG的速率(最大10M)肯定跟不上采样频率(27M),因此只能够简单的读取8K的数据进行验证。在这个8K数据里检测到了符合ITU-RBT.656标准的帧数据,如图1所示。

图1

         在这个数据中,FPGA扮演了主要的角色,系统的功能框图如图2所示。

图2

         详细设计不多做介绍,这里总结几个代码编写和调试过程中遇到的问题。

  • 设计中发现ASIC输出的同步时钟VCLK其实在FPGA内部被使用的挺多的,初始设计的时候没有太多关心都这个问题,因此改版的时候务必将这个时候连接到FPGA的全局时钟输入管脚上。示波器观察到这个时钟的过冲也有点大,应该加一个33R的电阻匹配阻抗。
  • 仿真过程中的testbench里的信号如果对状态机的变化有关(也许不止状态机出现这个问题),那么最好在它无效的时候不要置为高阻态(z),否则有可能影响状态机变化。
  • AV前端处理输出的数据还是隔行输出的,有奇场和偶场,映射到SDRAM中其实可以巧妙的应用地址线拼凑等技巧来使得最终读取SDRAM帧图像时连续读取。