初学fpga的教训,供大家批判

[复制链接]
 楼主| JohnSharc 发表于 2007-2-9 00:24 | 显示全部楼层 |阅读模式
因为使用hdl做cpld时间很长了,<br />所以拿到这个新人物的时候并没有去特别比较<br />fpga和cpld的区别,<br />吃了大亏,<br />代码3次推翻重写,<br />项目推迟了半年.<br /><br />教训如下:<br />1,最致命的是我使用了80多兆的与外部通信的总线,<br />走lvcmos电平.后来朋友告述我说使用这种信号不要超过50M,<br />否则延时很难控制.高速总线信号应该选用带serdes(就是<br />lvds电平+串并转换)的fpga,否则布线和内部延时都很难控制.<br />好彩我在内部凑延时,总算解决了这个问题;<br /><br />2,仔细阅读一下data&nbsp;sheet,<br />芯片各个方向的PIO口其实关联的内部资源是有<br />很大区别的,应该根据内部资源来设计外部管腿分布;<br /><br />3,必须熟习fpga内部结构和资源<br />(各LUT/SLICE/PLL/RAM)的特性,使代码能够尽量match<br />上这些特性.比如LUT一般都是4各输入的查找表来完成<br />组合逻辑,这样不少于4个输入的组合逻辑导致的延时<br />都是一样的,超过4个输入后就导致LUT间的走线,延时暴增,<br />解决多输入(&gt4)组合逻辑的办法是用流水线(实际上是用<br />时序逻辑&quot;换&quot;组合逻辑)提前产生部分控制信号,<br />使最终的&quot;纯&quot;组合逻辑部分的输入尽量少;<br /><br />4,CPLD设计可以假定延时很小,FPGA设计延时是一定<br />要考虑的;<br /><br />5,跨时钟域(哪怕是同一个PLL产生的不同时钟)时,<br />一定要用高速时钟把低速信号打一下,可以大大提高<br />系统延时特性;<br /><br />6,改善系统延时特性的的常用办法有(我用到的):<br />使用PLL;<br />流水线;<br />跨时钟域时强制同步;<br />使用尽量少的时钟(这样时钟信号就可以走传输特性较好<br />的&quot;PRIMARY&quot;连接);<br />使用门控时钟而尽量不要使用派生时钟(会导致时钟过多,<br />各时钟域间的延时关系变得很复杂,因为派生时钟相对原时钟<br />也有一个不小的无法预知的延时);<br />使用配置工具解除低速电路的约束(其实就是告述综合工具<br />哪些电路要求不高,可以把资源优先分给高速部分);<br /><br />7,软件下面带的入门教程初学者一定要看,掌握常用的一些工具,<br />比如配置/约束/定为延时/查看电路实现.对常用的一些语句<br />会产生什么样的电路心里要有数.<br /><br />8,CPLD的代码一般比较简单,结果也容易预估,一般都是边想编写,<br />很多时候连仿真都不要;FPGA的设计方法跟CPLD相反,是先在划分好<br />模块后,写好仿真代码,功能仿真后后一个模块一个模块实现,然后<br />在根据实现后的结果(物理仿真结果)调整各模块间的关系,再次<br />仿真再次实现,如此循环.仿真在fpga设计中占了80%以上的<br />工作量.事先的布局,模块划分,时钟产生和分配,这些工作对结果<br />有决定性的影响.&nbsp;&nbsp;<br />
 楼主| JohnSharc 发表于 2007-2-10 20:37 | 显示全部楼层

是这样,那个80兆的总线,

从管腿到fpga内部的RAM有5ns的延时,fpga发出去的控制信号(控制dsp打数据出来)也有5个多ns的延时,这样一来回,延时就接近1个时钟周期.我只好把对内部<br />ram的读写控制信号全部往后延时了一个周期.<br />如果换个型号,延时超过1.5个周期或者小于0.5个周期,肯定又会出错.
and 发表于 2007-2-11 17:55 | 显示全部楼层

带serdes的都很贵呀

下个项目就用FPGA了,谢谢提醒!
poly_lou 发表于 2007-2-12 13:38 | 显示全部楼层

d顶一下,正想学呢!

puppyh 发表于 2007-2-12 14:03 | 显示全部楼层

学过了,后来不用忘了。

现在需要用,只好再捡起来,明显生疏了!惭愧啊!
yang.xu 发表于 2007-2-13 10:16 | 显示全部楼层

谢谢楼主分享

  
morning 发表于 2007-2-21 23:32 | 显示全部楼层

不太对

除了2、3、5,其他的基本不正确或不准确。和作ASIC设计一样主要是要经过正规的训练。<br />80MHz就用serdes有点太夸张了。我们一般超过200MHz才考虑用serdes。我想你是没有把inout的reg放到fpga的io单元的reg里面。2年前我在xilinx的v2的-5的芯片上已经能够实现64bit&nbsp;166MHz的的ddr(333MHz)控制器了。
jimmy_mao 发表于 2007-3-5 20:32 | 显示全部楼层

谢谢楼主~~

小弟刚出道呢<br />多谢提点......
ZZMHAS 发表于 2007-3-6 10:36 | 显示全部楼层

学习一下

不论怎么样,对于我这种初学者还是很有帮助,谢谢
yh-dz 发表于 2007-3-8 22:52 | 显示全部楼层

我认为重要的一点就是一定要---自上而下的设计。

我认为重要的一点就是一定要---自上而下的设计。<br /><br />希望刚刚入道的和即将入道的养成好的习惯。<br /><br />搂主的这些问题都是这个原因导致的。<br /><br />过程决定了结果。
mcuplayer 发表于 2007-3-27 13:20 | 显示全部楼层

学习一下

楼主对经历的分析也值得学习
kly_dream 发表于 2007-3-29 09:26 | 显示全部楼层

学习中,理论学得很多,动手能力很差!!

学习中,理论学得很多,动手能力很差!!
glady 发表于 2007-3-29 14:05 | 显示全部楼层

高手多赐教

多谢提醒,写得很好,希望高手们多多赐教!
yukili 发表于 2007-3-30 18:03 | 显示全部楼层

不觉得

个人觉得FPGA开发比CPLD简单啊,怪了,lvcmos我跑166什么问题都没有,楼主可能是布线的问题吧?
一直很安静 发表于 2007-4-24 23:09 | 显示全部楼层

谢谢楼主

zeng_gj 发表于 2007-4-26 11:18 | 显示全部楼层

布线

书上说超过50M的信号就要认真分析布线了。要不是电路原理上的问题<br />
xeron 发表于 2007-4-28 17:08 | 显示全部楼层

我觉得楼主的智商已经达到我们部门经理的水平了

恭喜恭喜!总体来说就是--<br />看起来说得很有道理<br />简单的东西说的很复杂<br />大部分结论是错的<br /><br />
rain3075 发表于 2007-5-9 14:10 | 显示全部楼层

不错

我感觉仿真非常重要!
genuineli 发表于 2007-5-19 12:48 | 显示全部楼层

不错

谢谢!<br />
sping2588 发表于 2007-5-19 16:56 | 显示全部楼层

谢谢

谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

1

主题

5

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部