这个专栏的目的一直强调的是,与FPGA的成熟开发者讨论FPGA的相关,因此可能对于一些初学者不太友好,我尽力用浅显的语言,聊聊我开发中的一些经验总结,最主要是抛砖引玉。

FPGA的工作,必然与公司的利益相关,因此如果不谈产品、不谈项目,光谈FPGA,就是耍流氓。

在大部分的公司中,一个FPGA的开发流程,必然是伴随著一款产品或一个项目的部分流程的推进的。因此我们来按照流程,看项目的进行过程中,作为一个合格的FPGA设计人员,需要做些什么。

项目启动前

编写一份完整而详细的设计说明书,精确清晰的传达设计信息。

这个设计书,由FPGA工作人员撰写,但是需要各个参与方共同认可,一起审核通过。

首先,该说明书需要介绍FPGA设计的基本功能,包括FPGA与软体介面、与其他设备的介面。一份好的说明书,将功能抽象成一些程序模型(使用C语言、流程图等形式),配合必要的时序描述、功耗、资源描述等。

其次,该说明书对FPGA的各个功能模块设计也需要尽量详细,甚至对于一些指标也可以做一个大概的定义,包括演算法、设计架构细节。

另外,需要测试计划,根据经验可以进行计划的编写。

不要忘记术语表、参考资料等描述,这些一般来自于前面的项目文档以及成熟的科研资料。

项目启动时

项目启动的过程,是资源调配的过程,这个资源,既包括人力资源,也包括代码资源(狭义的FPGA软体资源),还有器件资源(狭义的FPGA硬体资源)。

人力资源属于项目管理过程,有些公司对于FPGA开发,人员各司其职,既有RTL设计师,FPGA设计师,也有专门做测试的设计人员,专门负责testbench的开发,还有其他配合验证、配合布线等各种开发人员。但更多的公司,上述这些角色都有一个工程师来承担,因此如何进行人员分配、进行人员工作安排等,是需要在启动时就确定下的。

代码资源,对于FPGA来说,代码资源包括可以从先前项目进行复用的模块,以及第三方开发的IP核,前面是内部的代码资源,后者则是外部的,可能需要动用项目的经费购买,这部分需要充分验证,从而选择最合适的采购或者研发手段。

器件资源。FPGA的选型是准备工作期间非常重要的一项,一个优秀的FPGA工程师,在选择器件时,需要衡量成本、资源、易用性、复用性等多个因素。在专栏的第九篇已经做过总结了,传送门在此

AK23:二大爷聊FPGA(9).FPGA选型

一般从以下几个方面考虑:

特色(高速介面、DSP)

规模

速度等级

引脚封装

功耗

价格以及采购途径

项目进行中与硬体设计部门的沟通

FPGA的设计不可能只局限于自身,尤其在功能较多、资源量庞大的项目中,需要在项目的进行中与多部门共同协作,完成工作,首先就是与硬体设计人员的沟通。

首先是FPGA器件的使用,对于电路板设计会提出各种要求。这些要求需要FPGA工程师与硬体设计人员高效、正确沟通。

硬体的电路板设计一般要早于RTL代码设计,这里面往往会出现的问题是,功能需求改变,器件无法满足资源要求,需要更换更大的器件,而电路板已经完成,导致多次改版,成本增加,项目延期。

因此,在最开始,就需要对资源进行充分论证,甚至在电路板设计时,选择一些有引脚兼容的FPGA器件,这样就可以在后期万不得已出现器件更换时,可以在封装相同、多种规格的系列器件中寻找合适的替代,而减少电路板设计的反复。

还需要注意的是速度越来越高的存储器、高速介面,可能会引入的SSN以及信号完整性问题。

这时,就需要FPGA工程师尽量提供一些信息,来帮助硬体设计工程师完成工作,例如FPGA工程师可以提供HSPICE模型和IBIS模型,帮助硬体设计工程师进行模拟,保证信号完整性。

顺便补充一句,电路板产生电磁干扰(EMI)的原因最常见是两个:

a.差分信号到共模信号,转换过程中所产生的共模信号泄露;

b.电路板上的地线反弹会在外部单端屏蔽电缆上产生共模电流。

除了引脚,与硬体设计师沟通的另一个重点是功耗。

FPGA器件规模和性能直接导致FPGA器件功耗变大,功耗直接影响电源设计,以及对稳压器、散热设备的选择,直接影响产品的结构、ID设计、成本等多方面。

功耗的组成:

静态功耗:器件本身漏电流引起的功耗,直接通过器件的datasheet就可以查询;

动态功耗:时钟频率、布线后内部结点操作引起的功耗

输入/输出功耗:外部引脚、IO标准、数据速率、配置等情况影响的功耗

估计功耗,首先要做的工作是,使用FPGA厂商提供功耗估计模型,其次是判断运行条件,例如在结温高于85度时,功耗会急剧增加,因此这些需要考虑在功耗估计中,同时我们知道器件的资源利用率也会直接影响,所以在选择逻辑单元或者专用模块实现相同功能时,功耗也需要考虑在内。

根据这些因素,从厂商官网上下载功耗估算表(一般是excel格式)的,得到一个大致正确的功耗估计,就可以提前确定一些硬体规格。

在rtl基本完成后,还可以通过模拟文件输入到厂商的功耗估计工具中,就可以进一步更准确的估算功耗(主要是数据切换率10翻转带来的功耗估计),在判断是否可以通过优化rtl代码来优化功耗后,可以进一步确定是否要对电路板进行修改。

这样的过程是动态的,不断修正的,但是提前的准确估计,可以大大减少之后的修改工作。

功耗直接影响电路板供电电源的使用,而供电电源可能会带来系统杂讯,此时需要硬体工程师跨接电容等方式来消除电源杂讯。

包括使用独立的数字电源层和模拟电源层分开,锁相环的电源层放置一个接地层,锁相环的模拟电源与数字电源隔离等多个需要注意的地方。

在电路板设计完成后,作为一个检查点,FPGA工程师需要参与审查,重点关注的是:

电源功率分析;

用FPGA设计软体检查引脚分配;

每个IObank的VCCIO

SSN

引脚分配标准(xilinx会给参考设计文档)

电路板信号完整性模拟

项目进行中与软体设计部门的沟通

应用软体与RTL之间的主要介面是寄存器地址映射表。该地址映射,让软体编程人员可以看到软/硬体之间的介面,从而可以正确的读写。

项目中最常用的方法,是

1.地址映射表以头文件的形式提交给软体工程师,

2.定义每个比特位的功能

3.RTL中添加地址解码器

4.维护寄存器配置文档,保证信息的通畅

5.在testbench中按照配置规则,编写验证代码,保证介面功能

项目进行中FPGA内部驱动

FPGA设计工程师在项目中,也应该有「FPGA工程师的自我修养」,这一段准备单开一篇来说,在这先不聊,等我的下一篇吧。

项目验收

在此阶段需要将代码版本、设计文档、测试资料都提交,并且要由测试、验证人员对设计的代码进行充分测试验证,满足代码质量、功能覆盖率、需求设计说明的要求。

一些给力的项目经理会让FPGA开发人员也总结经验教训,作为存档,留待下一次的项目开发作为参考。这些工作也是必须的,而且是有用的。

简单对项目中FPGA开发人员的工作做了一个描述,这部分更多是与项目进程中的沟通协调工作,大家可以帮我补漏补差,看看在你的工作中,有什么好的项目经验,如果讨论觉得挺好的话,我希望可以补充到这篇文章中。

下一篇是FPGA工作人员的FPGA开发,在项目中的工作描述,如何配合项目推进,以及使用一些工具优化项目开发进度的。

推荐阅读:

相关文章