注册
登录
电子工程世界-论坛
返回首页
EEWORLD首页
频道
EE大学堂
下载中心
Datasheet
专题
单片机
物联网
汽车电子
嵌入式
手机/便携
模拟电子
家用电子
网络通信
电源管理
工业控制
测试测量
半导体设计/制造
安防电子
传感器
医疗电子
dongdong100的个人空间
https://home.eeworld.com.cn/space-uid-522914.html
[收藏]
[复制]
[分享]
[RSS]
空间首页
动态
记录
日志
相册
主题
分享
留言板
个人资料
借用开发板
论坛
淘帖
Collection
查看新帖
最新回复
社区活动
联系管理员
我的空间
帖子
日志
收藏
好友
勋章
积分
安全验证
请完成以下验证码
日志
【阿东之Xilinx FPGA 摄像头调试随记】
已有 1741 次阅读
2017-11-28 23:07
|
个人分类:
FPGA
|
FPGA
,
摄像头
我们的Xilinx S6M开发板是SPARTAN 6 LX9的片子,因为我们的摄像头程序都是ALTERA的QUARTUS的工程,该工程里面需要用到两个和厂家相关的特性,PLL和FIFO,XILINX和ALTERA两家对于PLL和FIFO的管脚和复位等都不一致,器件的管脚约束和时序约束也不一样,因此移植的工作量还是比较大的。如果没有对两家特性有仔细的研究,还是会遇到很多坑的。
像我阿东这样的大拿(不谦虚一下),在移植的时候,也遇到了很多坑,首先第一个就是PLL,PLL带有复位管脚,复位管脚PLL的手册上没有说是高复位还是低复位,虽然我之前经常使用XILINX的各种FPGA,不过还是没有记住,然后测试了下,发现复位管脚高是复位的,低是解复位。另外ALTERA的PLL和XILINX的PLL,可能倍频性能也不一致,当然这次没有遇到。
其次遇到的是FIFO,FIFO差异就更大了,包括复位和各个管脚都不一样,但是基本功能都是差不多的,经过测试,也发现FIFO复位高表示复位。然后是生成FIFO,XILINX的生成需要使用ISE的CORGEN工具,这个生成需要保持和ALTERA一样的FIFO特性,比如都是异步FIFO,延迟都是一拍,都需要FIFO带有datacnt(表示当前FIFO里面存储的数据个数)计数。期间因为不确定这个FIFO的
datacnt
是否可以使用,一度自己生成了一个
datacnt,不过还是没有好,最后改回去发现,Xilinx的异步FIFO的
datacnt
是可以用的。
再次遇到的是各种编译问题,首先是时钟编译报错,好好的东西在QUARTUS里面也没有报错啊,经过各种分析发现,XILINX的时钟处理很麻烦,时钟不能直接输出到IO,需要加ODDR,然后才能接到IO中,这个ODDR我是添加了,但是一直没有清晰的图像,很是纳闷,最后发现居然是ODDR时钟接错了,ODDR需要方法如下:
ODDR2 #(
.DDR_ALIGNMENT("NONE"), // Sets output alignment to "NONE", "C0" or "C1"
.INIT(1'b0), // Sets initial state of the Q output to 1'b0 or 1'b1
.SRTYPE("SYNC") // Specifies "SYNC" or "ASYNC" set/reset
) U_ODDR2_0
(
.Q (sdram_clk), // 1-bit DDR output data
.C0(
sdram_clk_tmp
), // 1-bit clock input
.C1(~
sdram_clk_tmp
), // 1-bit clock input
.CE(1'b1), // 1-bit clock enable input
.D0(1'b1), // 1-bit data input (associated with C0)
.D1(1'b0), // 1-bit data input (associated with C1)
.R(1'b0), // 1-bit reset input
.S(1'b0) // 1-bit set input
);
但是我写错成如下方式:
ODDR2 #(
.DDR_ALIGNMENT("NONE"), // Sets output alignment to "NONE", "C0" or "C1"
.INIT(1'b0), // Sets initial state of the Q output to 1'b0 or 1'b1
.SRTYPE("SYNC") // Specifies "SYNC" or "ASYNC" set/reset
) U_ODDR2_0
(
.Q (sdram_clk), // 1-bit DDR output data
.C0(
sdram_clk_tmp2
), // 1-bit clock input
.C1(~
sdram_clk_tmp
), // 1-bit clock input
.CE(1'b1), // 1-bit clock enable input
.D0(1'b1), // 1-bit data input (associated with C0)
.D1(1'b0), // 1-bit data input (associated with C1)
.R(1'b0), // 1-bit reset input
.S(1'b0) // 1-bit set input
);
导致SDRAM时钟异常,所以图像异常不清楚。还好发现了。
最开始调试时候的波形一直如下所示:
后来改了ODDR时钟后,图像恢复正常,坑爹!
然后是时序约束了,别问我不加行不,不加不行,摄像头的频率还是很高的,不加会导致图像显示异常甚至不显示,时序约束和QUARTUS的也不一致,不过转换相对简单,看懂了就知道怎么改了。
系统时钟约束如下:
Net clk_50 LOC = T8 | TNM_NET = sys_clk_pin;
TIMESPEC TS_sys_clk_pin = PERIOD sys_clk_pin 50000 kHz;
经过上面的几个大坑,最终OV7670/7725的视频正常清晰显示了,唯一安慰的是发现XILINX的板子的图像比ALTERA的要清晰一点点,可能是和XILINX的时序优化相关。
收藏
邀请
举报
全部
作者的其他最新日志
•
【时序约束】关于约束时钟频率
•
【区别】关于CPLD和FPGA
评论 (
0
个评论)
涂鸦板
您需要登录后才可以评论
登录
|
注册
评论
dongdong100
加为好友
给我留言
打个招呼
发送消息
热门文章
头条资讯
【开奖】Thundercomm创通联达交钥匙解决方案助力可穿戴产品快速量产
机器学习免费跑分神器:集成各大数据集,连接GitHub就能用,还能验证论文结果
电视+电竞=?电子竞技将迎来大屏新时代
汽车电子专场,Cadence中国技术巡回研讨会报名倒计时!
工程师说 | RH850C1M-Ax MCU解决了在集成式双牵引逆变器中复杂的控制难题
从灵活的软件到模块化的硬件,全面了解NI产品
新增数据手册
5KP13
HLMP-CW19-0W000
5D361K
717DAG15S1BONVFM2
TW-33-06-G-D-120
8821MCMA050GTN7850
热搜器件
RN65D23R7FRE6
850132036
RG1005N-6810-D-T10
1901331
6253
RSF2WSJR-52-470K
推荐下载
很不错的出学教材
详细的OFDM设计过程
单片机控制的智能PID控制器在液压系统中的应用研究
各种实时以太网技术的比较
基于EDA层次化设计方法的出租车计费器设计
Qt嵌入式图形开发入门,这篇仅仅适合QT刚入门的人。
推荐关注
深度解析SD2351核心板:硬核视频处理+工业级可靠性设计
康谋方案 | 基于AI自适应迭代的边缘场景探索方案
AXS4056:1000mA单节锂电池充电芯片参数资料、内置锂电池反接保护功能
《图解入门——功率半导体基础与工艺精讲(原书第3版)》阅读心得——碳化硅与氮化镓
ROS2 中 TF 变换发布与订阅:实现 base_link 和 test_link 实时可视化显示
《图解入门——功率半导体基础与工艺精讲(原书第3版)》阅读心得之一——一本好书