一位工程师的FPGA项目开发经验总结

转自:http://bbs.ednchina.com/BLOG_ARTICLE_3018248.HTM?click_from=8800024401,6106445608,2014-11-10,EDNCOL,NEWSLETTER

1. 要和人配合

以我们做硬件的工程师为例,测试的时候一般都需要软件的配合,一个对硬件来说无比复杂的工作,可能在软件工程师看来就是几行简单的代码。所以要和人配合,多听听别人的意见,这样必然可以产生新的 know-how,从而加快测试和开发的速度,退一步讲,至少没有坏处。

2. 测试还是要别人来做

开发者看待自己的产品有如看待自己,大多是没有勇气去发现缺点的。一是源自自尊心,二是为了避免额外的工作。所以就算有问题,如果不严重就藏着掖着。但是这对项目来说是不行的,所以测试,verification,一定要旁人来做。

3. 多点时间思考

出现问题后,不要急着修改。要思考推测可能的原因,想清楚后把这些可能的原因都用debug pin或者chipscope引出来。

4. 注意复用已有的debug pin

很多时候,在测试过程中产生了一大堆测试信号,但是时间一长就忘了复用。实际上,当一个问题产生的时候,通过反复观察已有的debug-pin或许足以发现问题根源,而无需再引出新的pin,并浪费时间去综合和PAR。

5. 仿真加时序足矣

数字电路在时钟同步的设计原则下,其功能通过simulation就可以验证。simulation的结果和PAR后产生的FPGA-image 完全等价。当然FPGA也要遵循同样的设计原则,即时钟同步。所以对于PAR的结果首先就要确保其时钟同步的特性。体现为寄存器之间的path必须在一个 时钟周期内完成。(当然有其他约束的例外。)同时要满足FPGA器件的setup和hold要求。一旦出现timing-error必须通过各种途径消除 error,因为error的存在,意味着时钟同步的大前提已经被破坏,这时,simulation取得的结果和FPGA是不等价的,继续测试也毫无意义 了。

6. 注意不可控的接口部分

FPGA内部的寄存器之间的timing完全可以通过PAR报告来确认是否有问题。但是和外界的接口部分却充满了疑问。我们一般通过假定的 input-delay和output-delay来对接口部分进行约束。由于从一开始就施加的是假定的delay,所以即使没有timing- error,其结果也存在诸多疑问。以我正在进行的测试为例,模块内 部loopback测试完全正常,但是一过cable,传到对方FPGA,则马上产生很多误码。由于simulation没有问题,所以必然是我们的某个 假定出现了问题,尤其是时钟同步的假定会得不到满足。这时候,就要想尽一切办法,使接口也满足假定的条件,或者调整设计,将不理想的接口adapting 成理想的接口。

7. 向直接上司汇报情况,寻求各种可能的许可。

懒得向直接上司汇报情况时,万一出现进度或者结果不符,所有责任都需要本人承担。如果提前向上司汇报情况并取得 许可,则一切后果都在可控范围内。比如,工作繁忙时又被派给新的任务,则不能一味逆来顺受。应该向上司说明困难,并提前想好一个可行的解决方案供上司参考。

8. 外部接口是最大障碍

如前所述,FPGA内部如果timing没有问题的话,一般和仿真结果是一致的,问题是外部的接口,包括cable连线等,不在我们 确切控制的范围内,比如其延时特性在40MHz下仍然正常,但是在80MHz时可能出现不可预料的情况。所以应该尽量使用经过验证的“cable- frequency”组合。或者通过设备测量并确认外部接口的延时特性。这样可以进行有针对性的调整。我最近的教训就是花了整整一个月调整并测试内部的结 构,但是仍然失败。结果发现由于cable的问题,80MHz的信号(数据+使能+others)无法正常并行传输。如果换成40MHz的信号就通过了。

9. 综合PR后的结果要和代码等价

前面提到仿真加时序足矣,这里面的前提是PR的结果和原始代码要等价。为了确认这一点,就要把握syn和pr过程中的所有 warning以及error,warning的内容不是完全可以忽略的。要特别关注综合报表中的以下内容:unused ports, removal of redundant logic, latch inference,simulation mismatch等等。在报表中输入关键字查找即可。

时间: 2024-10-04 12:25:37

一位工程师的FPGA项目开发经验总结的相关文章

java项目开发经验总结,值得收藏!绝对有用!

Java就是用来做项目的!Java的主要应用领域就是企业级的项目开发!要想从事企业级的项目开发,你必须掌握如下要点:1.掌握项目开发的基本步骤2.具备极强的面向对象的分析与设计技巧3.掌握用例驱动.以架构为核心的主流开发方法 没有人愿意自己一辈子就满足于掌握了一些代码实现的技巧,别人告诉你要实现什么,你就用代码堆砌来实现别人的要求!你必须学会从整个项目的角度去思考!你必须学会假如你是项目经理,你该如何思考!你必须学会假如你是架构师,你该如何思考!你必须掌握针对某个特定问题领域的分析方法! 关于基

面试题:项目开发经验总结 !=!=未看

Java就是用来做项目的!Java的主要应用领域就是企业级的项目开发!要想从事企业级的项目开发,你必须掌握如下要点:1.掌握项目开发的基本步骤2.具备极强的面向对象的分析与设计技巧3.掌握用例驱动.以架构为核心的主流开发方法 没有人愿意自己一辈子就满足于掌握了一些代码实现的技巧,别人告诉你要实现什么,你就用代码堆砌来实现别人的要求!你必须学会从整个项目的角度去思考!你必须学会假如你是项目经理,你该如何思考!你必须学会假如你是架构师,你该如何思考!你必须掌握针对某个特定问题领域的分析方法! 关于基

优达学城机器学习工程师纳米学位项目介绍

本文由 meelo 原创,请务必以链接形式注明 本文地址,简书同步更新地址 一对一的项目辅导是优达学城(udacity)纳米学位的一大亮点.本文将简要介绍优达学城机器学习工程师纳米学位的6个项目.项目覆盖了机器学习的主要领域,包括回归分析.分类.聚类.增强学习及深度学习. 项目 0: 预测泰坦尼克号乘客生还率 这个项目需要你手动地实现一个简单的机器学习模型——决策树.1912年泰坦尼克号在第一次航行中与冰山碰撞沉没,泰坦尼克号乘客生还数据集记录了之中891个乘客的性别.年龄.社会阶级.配偶数量等

项目开发经验分享—分页查询

从今天开始,我将和大家分享一下最近经手项目的开发经验.今天我们分享的内容是:分页查询! 引言 大家在浏览网页的时候,肯定遇到过这样的效果,一个滚动条套另一个滚动条,上下拉动,看着非常不方便,或是整个检索内容都在同一个页面,导致页面加载速度太慢,等半天都没有反应(如下图),这种情况下,用户可能没有耐心等待直接关闭该页面啦!    当我们的项目检索后内容也很多,这时候我们怎么办?是把用户检索到的信息一下子都显示到页面,让用户在等待加载的漫长过程中耐心耗尽后放弃使用,还是想用户之所想,通过添加分页,去

太赞了!阿里几位工程师重写了 《Java 并发编程》

事情是这样的,前些日子和得知一个读者在准备阿里的面试,我蛮有兴趣的跟他聊了起来,随着话题越来越深入,我发现这位读者有意思,他和几位阿里的工程师之前编写了一本 concurrent.redspider.group,我一搜发现不得了,这完全是一本书啊,截图看一下他的目录 随便翻一下,发现有大量的测试和例子,而且文末也附上了参考链接,很不错. 非常系统,并发模块不用在自己一个一个去百度找资料学了. 后面继续聊到团队,得知服务器都是他们自己买的,写这本书完全是亏损阶段,我心里就觉得很敬佩.然后我就疑惑为

java_web项目开发经验总结(一)

web项目就像一个动态的记事本,功能很强大,你最初的项目功能调研越给力,项目所能发挥的作用也就越给力.这是因为web网络的强联系性,大家都可以通过访问到自己想要访问的页面,页面里既可以承载信息,也可以承载做事情的功能,而被系统封装起来的功能就叫项目.这也是web项目和C/S架构受欢迎的原因. 这里想说的是对web项目的基础认识.为什么说web项目像一个动态记事本?记事本是用来干嘛的,记录,我们在持久化数据库或非持久化数据库中建立表的目的是什么?记录数据,表的建立往往是我们花了极大的劳动价值来做的

React单页项目开发经验总结

一.背景 最近在负责后台相关项目,使用jQuery+ajax完成了一个菜单配置(三级菜单级联)增删改查项目.一直都想把业余时间学习的react的知识应用到实际项目中,没有好的研发机会,乘着项目与另一个项目开发的空档期,把刚做的菜单配置功能用react实现一遍,于是立马动手实践起来: 二.关键点总结 1. package配置 代码开发完成,用create-react-app打包代码,发现build后的代码,直接用浏览器打开,文件资源路径报错,此时目测有两种方式,一种是修改node_modules里

ubuntu 64位系统创建android 项目找不到R文件

原文地址 http://blog.csdn.net/yuxingxing198812/article/details/13773441 以下是原文: 环境:Kubuntu 12 (是众多Ubuntu分支的一种,它采用 KDE Plasma 桌面 为其默认桌面环境.它和Ubuntu采用同样的 软件库.基本上,Kubuntu和Ubuntu没有太大的差异,只是默认桌面系统采用KDE,并非Gnome.)   jdk是sun公司的sun  jdk6.0,android sdk为最新,adt位google官

项目开发经验终结2015/4/7

软件开发,之所以能这样快速的发展,是因为我们总能够站在巨人的肩膀上走的更远. 因为开源项目的兴起,使得这一个现象更加普遍.网上的各种大大小小的开源项目,小到一个js插件,大到一个完整的项目. 对于中国程序员来说,开源简直太棒了,因为我们可以肆无忌惮的在网站copy代码,而且每段代码还有文档说明. 越来越多的程序员小白,可以利用网上的开源代码,轻松的完成一个项目. 那么对于我们这些老鸟来说,我们的价值在哪里呢. 我的一个长期练手的小项目,已经到了第三次改版了,发现第三次改版我越来越无法执行下去.网