Aritex7 差分IO实现LVDSLCD的驱动 帖子字数有限,可以看附件完整版:
最近用正点原子的Aritex7 核心板调试LVDS LCD,经验问题分享下; 首先需要将U4 LDO换成5V—2.5V的;就可以在BANK16实现LVDS接口了; 发送LVDS需要用到OSERDES Selection IP核可以满足功能要求;
Data Rate 选择SDR,因为这里的serdes因子是7,使用DDR麻烦; Serlallzation Factor 就是串化因子; External Data Width 就是通道的个数,这里选4通道; IO Signaling 选择差分,但压标准使用LVDS 25;
CLK 设置这里也是选择差分LVDS 25; Clock策略选择内部; 发送模式没有DELAY,默认即可
这里生成的IP直接使用不太方便,因为它的数据顺序不是按照data[6:0]给通道0,data[6:0]给通道1… 而是data[3:0]给通道[3:0]的D1, data[7:4]给通道[3:0]的D2…. 大家可以从IP内部的数据图看到;
打开IP文件里的文件 可以看到最终使用的文件就是LVDS_TXIP_selectio_wiz.V文件;
就是OSERDES2和OBUFDS的原语例化; 想要达到自己想要的数据发送结构就得自己修改下这个文件就行了; 在工程里面新建lvds_tx_selectIO.v文件,将LVDS_TXIP_selectio_wiz直接copy过来做修改即可; 因为OSERDES2是按照LSB—LSB发送的,LVDS LCD要求是MSB--LSB,所以需要将数据顺序在OSERDES2这里处理下 使得数据按照data[6:0]给通道0,data[6:0]给通道1…的格式给到每个通道; 这样修改后的数据顺序就满足我们的要求了:
大家仔细观察CLK和数据的时序,我第一次看这个图感觉很奇怪; 以前认为发送出去的数据和CLK是边沿对其的;1111000 但其实不是这样的; 而是按照1100011的CLK对齐的;这个是为了接受端IC解串用的;关于LVDS LCD接受端解串也困扰了我很久,因为数据通道是没有TOKEN值来进行align功能的, 当时就考虑是通过CLK1100011的特殊时序来进行bitalign功能的; 后来看了XILINX官方文档xapp585-lvds-source-synch-serdes-clock-multiplication才搞清楚;
要想满足LCD的时序要求,lvds的差分clk也需要通过和数据通道一样的OSERDES发送出去; wire[6:0]xclk_out_from_device=7'b1100011;//这里的时钟时序和LCD要求要一致;
这个工程在公司是正常点亮LVDSLCD模组的; 分享到这里就结束了,有问题请留言讨论;,,,
附上参考文档 |