微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > FPGA设计中如何在可移植性和高性能间权衡?

FPGA设计中如何在可移植性和高性能间权衡?

时间:10-02 整理:3721RD 点击:
在FPGA的设计中,如果充分利用FPGA内部资源的特征,可以设计出资源占用率更少,性能更好的产品,但是会降低设计的通用性和可移植性,两者之间该如何选择和权衡呢?大家一起来讨论吧!

我觉得,首先考虑可移植性,然后具体应用的时候再根据资源以及系统要求去做优化。
期待大牛的意见

你所说的移植性是什么意思?难道是在不同的FPGA器件的型号之间移植?
性能和可移植性之间有冲突吗?

在FPGA内部,目前各大厂商的资源组成逻辑都差不多。LUT+Register的方式。从某些方面来说,针对FPGA的设计基本上都具有通用性。例如以下几个方面:
1. 寄存器异步复位。目前几乎所有的FPGA都支持异步复位。而同步复位往往会浪费更多的资源。
2. 基于ASIC设计的门控时钟。现在FPGA也几乎都不建议用RTL及的门控时钟。(这一块主要由FPGA工具自动完成)。
3. 专用移位寄存器。大多数FPGA都内建专用移位寄存器。
其他的ASIC常用设计逻辑往往FPGA也都支持。但是在以下方面,往往会降低通用性。主要表现在专用逻辑。
1. PLL:每个FPGA厂商都有其自己的专用时钟管理器。如果在RTL代码内包含的话,会导致无法通用和移植。
2. block ram:块RAM和ROM等专用资源也是每个FPGA厂商甚至型号上所不一样的东西。
3. PCI-E或者serdes等等专用IP核。
1. 建议在设计中使用通用的simulation model。比如block ram。可以建立通用仿真模型。而在具体的FPGA工程内建立针对特定FPGA的block ram。
2. 针对PCI-E等没有通用simulation model的。因为每个FPGA厂商的PCI-E信号定义都不相同。所以设计中很难考虑到可移植性。因为这些都是接口型的模块,所以建议在RTL代码中不例化这些IP模块,而在具体的FPGA工程中去建立一个针对工程的设计顶层文件。一般的ASIC设计也会将这些涉及到模拟电路的部分和完全数字的部分分开建立顶层模块。这样的话RTL代码可以达到可移植性。
个人愚见。

不发表意见了,顶一下


      首先多谢您的指点,您讲的很有见地!您说的通用资源(如block ram)的使用和专有资源(如各家的SERDES)的使用方式很值得学习。我比较关心的问题是:像一些逻辑,既可以用普通的语句描述,让工具自动选择实现的方式,也可以自己在代码中直接例化特定的资源,如专用的移位寄存器或者DSP基元等。使用普通语句描述的好处是FPGA换了厂商或者换了系列以后不受影响,不需要去改代码,移植性比较好;但是由于逻辑具体实现是靠软件自动完成的,有可能用的是通用逻辑资源,资源利用率不高,且性能也不是最佳的。在代码中直接例化特定的资源(如移位寄存器),可以最大化的利用特定资源的性能,设计出高效的代码,节省资源,能跑到更高的时钟。但是,由于在代码中直接例化FPGA的特定资源,不同的厂商对同一类型的资源命名不同,接口、参数也不同,即使是同一厂商不同系列的FPGA,往往同一类型的资源也是会升级变化的,所以代码的移植性和可重用性比较差,换了FPGA就要跟着改代码,很麻烦。
      我个人觉得,大部分时候还是不要在代码中直接例化特定资源,让工具自己去选择。某些时候,为了满足一些性能上的要求,或者对资源占用情况进行优化时,再考虑采用例化特定资源的方式,但是也要对特定资源做一个比较好的封装,便于移植和替换。



         嗯,我也赞同这种处理方式,不能太追求性能最大化而影响了代码的通用性和可移植性。

写code的时候,把各厂商不同的资源,用同样的wrapper封装.这是必须的.
如果你做过Altera, Xilinx两者的设计,完全可以一次设计,面向多种FPGA.
其他不同的部分,除加通一的wrapper之外,还可多使用`ifdef



    赞同!不同厂商或不同系列的资源做成统一的封装,的确是解决移植性问题的好办法!



   xilinx的分布式RAM移植到ALTERA cyclone1~4中不知如何处理,不知有何建议

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top