FPGA开发技能清单

1.     需求核对阶段

1)良好的沟通技能:需要与需求方核对需要的功能及性能,态度很重要,谦逊专业的沟通态度才能对需求理解无偏差,理解错误,后面就可能引起构架的修改。对外团队协作能力很大一部分体现在这里。

2)行业背景知识:需要把需求翻译成FPGA的功能点以及逻辑上的处理流程(流程及需要的数据结构,用硬件的大白话就是大的pipeline流水线功能以及每个功能对应的表项及数据结构)。

2.     总体设计阶段

1)功耗评估:xilinx和altera两家都会提供功耗评估excel,填入使用的IP、逻辑使用量、频率、IO类型、时钟等,可以评估总的功耗大小,以及每一路电源的电流的大小预估,这个很重要,是板子能否做稳定的一个重要因素

2)IO设计:电路连接设计相关,把对外设计的接口特别是牵涉到存储器、transceiver相关的接口、IO电平标准、时钟分布都要例化出来,然后编译通过,软件输出csv文件,里面包含了IO的电平标准及外围连接,这一步极大提升做板一次成功率。因为每一代FPGA以及每个系列器件的结构总有些不同,特别是共享PLL,transceiver,存储器的共享模块设计都会有些不同,因此安全做法是把要使用的除LUT和RAM以外的资源例化,然后编译通过,保证外围连接不出错。

3)软硬件接口设计:制定软件要访问FPGA的方式、以及软硬件如何配合、FPGA如何初始化功能。这块需要有经验,不同的应用场合需要设计不同机制。大体可以分为以下几类:

寄存器访问:直接或间接

功能表项的配置

数据、命令、状态的互传:高性能一般要设计DMA,不同应用DMA要求不同。

4)逻辑部分的总体规划:时钟域规划、复位规划、模块划分及模块功能规划、FIFO/RAM使用大小及类型规划、模块间传递接口规划(最好标准化,类似软件API,以后可复用)、编码规则制定。

3.     设计及编码

1)良好的coding规则:主要是命名,命名至少要区分:同步寄存器、跨时钟域寄存器、连线这些信号命名最好在前缀区分,这个在后期下约束时可以用通配符找信号。

2)查找及看懂硬核的使用手册

3)领域内常见算法的实现:比如针对网络:共享缓存设计、各种HASH算法实现、LPM查表算法、各种匹配算法实现。加解密领域,需要把串行算法翻译成硬件并行算法的能力。针对目前流行的神经网络,针对各种网络如何设计高效的数据流入方式,如何进行特征的预处理。

4.     仿真验证

1)仿真平台搭建,看设计大小及是否将来重用,设计大且重用多,考虑UVM这些设计方法及平台搭建。简单的就利用verilog,通过task任务的设计及调用来设计仿真平台。需要掌握testbench设计、仿真工具使用及debug。

2)测试规划及项目抽取,这个是目前大部分FPGA工程师容易忽略的地方,设计要稳定,要系统的进行项目抽取,最好是另一拨人根据自己对规格的理解来系统抽取测试项目,这样完整验证后保证功能大体稳定。而性能测试一般要在实机测试中进行。

5.     后端

物理约束:可以从IO分配的工程中导入。

时序约束

IP的约束导入

其他软件相关的特殊信号的约束(一般通过在代码中用属性表示)

掌握看后端的原理图、器件映射图、出问题时可以在后端把一些网络剪短或连接(ISE之前提供,vivado不知道是否还有这种工具)

6.     调试

掌握调试工具:

一般厂商都会提供:transceiver调试工具测试回环,无码率等。

内部逻辑分析仪使用

存储器调试:各种物理层参数的配置及调试

各种下载方式掌握。

软硬件联调时各种调试命令的设计

以上是传统的开发方法需要掌握的技能,针对目前zynq这些器件,PL也适用,当然快速开发可以用sdsoc方式。

至于linux的移植、boot的制作这些,私下以为做一遍就可以掌握,观看视频最快。

以上是基本功,而真正的功力在于你能把特定领域的问题转成FPGA可实现的流程,并且提供好的性价比。


猜你喜欢

转载自blog.csdn.net/weixin_38712697/article/details/81050829
今日推荐