1.前言
个人觉得易灵思的trion系列比钛金系列fpga,就目前而言,更适合做图像显示相关应用,以t35和ti60为例,主要原因如下表所示:
易灵思如果专注图像细分领域,毕竟大部分客户还是用ddr和mipi,因此我觉得钛金系列的架构真的脑袋被驴踢了,ddr和mipi用硬核才是正确的选择!
另外,钛金系列fpga相对推出时间不够,目前ip也不成熟。以t35为例,ddr硬核ip在efinity interface中直接可以调用ddr ip并设定相关参数,但是钛金系列ti60还没有包含到工具链中,这让拿不到一手资源的fpgaer就很尴尬,虽然可以理解不集成到ide中,可以更快的迭代前提不成熟的版本。
如上图所示,t35f324的fpga开发板,我都做了快半年了,一直没有做一个基于视频图像的像样点的demo,甚是惭愧。为了给当下煎熬的大家送点福利,我打算分2步走,如下:
dvp相机+ddr3+lvds-lcd实时显示系统
mipi相机+ddr3+lvds-lcd实时显示系统
前者更关注ddr3硬核、lvds tx,以及进行并口相机的配置与图像采集,完成实时图像采集、缓存、显示系统;后者则借用1)的基础,更关注mipi相机的开发,进一步把易灵思fpga进行图像采集的优势,发挥一下。
当然这过程肯定还是有不少的坑,有些坑只有自己趟过,才有发言权。
2.fpga设计详解
言归正传,我们开始干正事:基于t35的摄像头采集、存储、显示系统的介绍。
首先是fpga时钟网络
这里涉及到ddr控制器的时钟,lvds tx的快慢时钟,系统时钟,以及外设驱动时钟等,大致示意图如下:
由于trion的pll是能输出3个时钟,因此将2个pll都用上了,一个产生100mhz的系统时钟,48/168m的lvds慢/快时钟,另一个pll产生ddr的驱动时钟400mhz,以及外部传感器的驱动时钟27mhz。另外,还有一个从传感器输入的像素时钟74.25mhz,作为视频流的同步时钟。
其次是硬核的配置
这里用到了ddr与lvds tx硬核。关于ddr硬核的使用,外部使用的是三星的k4b4g1646e-byma,4g 16bit容量。
在interface中配置ddr控制器相关参数,如下图所示:
其实软件包含了颗粒的型号,因此配置还是挺简单的,对于用户接口,interface提供的是标准的axi接口,其他的都是在硬核中,用户不需要例化,非常的简单。
关于lvds tx的使用,主要是port的配置,以tx0为例,interface配置如下图所示:
这里特别需要注意的是,pll1设置tx_fastclk时,需要90度响铃;另外,efinity的lvds是lsb的,也就是先发lsb,这在interface的说明文档中有解释,如下图所示:
另外,在1024*600 lvds手册中,lvds时钟有一定的相位关系,如下所示,在7bit数据传输时,时钟为1100011:
所以如上这部分代码,如下所示:
接着是相机的驱动
目前采用的ar0135是车规常用的130万全局曝光黑白相机,成像质量非常好,相关的参数如下所示:
我曾在《fpga设计技巧与案例开发详解》一书中详细介绍了如何使用fpga驱动cmos摄像头,因此这里不再描述细节,给出框图如下:
这里在进行相机的初始化后,捕获输入的并行视频流数据;另外为了适配后面1024*600的lvds lcd,再捕获数据后,直接crop到1024*600分辨率。接着将数据送入axi读写模块,将dvp转成axi后写入ddr。
最后是视频流的缓存与显示
这一步其实和相机的数据缓存比较类似,无非是用一样的时序反着走一遍:即采用axi从ddr中读取数据,转成并口后,送给后续的lcd驱动模块,再通过lvds送给lcd显示,框图如下所示:
最后,汇总整个时钟、ddr、相机、lcd驱动显示的框图,基于t35的摄像头采集、存储、显示系统,如下图所示:
由于该趟的坑,都已经趟过一遍了,这里我们不得不再静下心来再分析讨论一下,这个设计中遇到的最大的坑——ddr3的axi接口竟然是shared read/write address channel,配置与接口代码如下所示:
那就意味着,虽然axi可以做到读写通道独立,但我不能同时发起读命令与写命令。如果axi读写通道是完全独立的,则我们可以这样设计,即读归读,写归写,设计相对简单。
但是现在竟然axi的读写地址通道是shared,我被惊讶到了,毕竟做了七八年芯片,axi也是手撸过很多遍,shared地址通过的阉割版,还是有点不适应,毕竟当读写冲突的时候,必须做仲裁,同时也需要更大的fifo,还缓存读写通道的数据。
3.总结
花了九牛二虎之力,搞定了1280*720@60hz的ar0135采集,然后裁剪成1024*600后,与1024*600的lcd显示数据仲裁读写ddr(加入读写仲裁,且读数据优先,),最后得到的效果是这样的:
这里,我还是不解,易灵思的ddr控制器,如果是买的,那synopsys应该是标准的axi;或者如果是买的ddr phy+自研的控制器,那应该至少遵循标准,为什么会出一个阉割版本的axi接口呢?
百思不得其解,但这也无法阻碍我们前进。在不久的将来,我将写基于易灵思fpga的mipi相机采集显示开发详解。
2018年人工智能在医疗领域上热度更加高涨,尤其是AI医学影像领域
Adam Taylor玩转MicroZed系列51:中断和AMP
英特尔Sandy Bridge处理器技术细节
Altera系列可编程逻辑器材的构造和原理
iphone14发布时间和上市时间
基于T35F324的FPGA开发板图像采集显示系统方案
详解消灭EMC的三大利器:电容器/电感/磁珠
欧洲车企降低碳排放的压力
西门子高速计数产品与编码器兼容性选型参考
人工智能的商业化才是AI数据真正的突破点
AI的定义及学术上的AI概念
软起动器常见故障之缺相故障怎么解决?
自动电平控制(ALC)为扬声器提供有效保护
腾讯与英特尔合作推出一款游戏主机,售价约9299元
厦门桑荣银行ATM终端无线接入系统方案
传感器之于人类到底有怎样的应用(下篇)
舜宇车载光学“科技进校园“志愿活动走进余姚中学
关于 Apple Watch 你不知道的一切
以物理机器人改善工业流程,虚拟机器人接管客户服务流程
ST推出新款高集成度移动通信基站芯片STW82100B系列