在利用System Generator进行FPGA设计时,要实现算法功能非常容易,但是在工程应用中,如何能做到高性能的FPGA设计却不是件容易的事情,这对于初学者来说尤为困难。本节提出以下几点设计原则,在使用System Generator进行FPGA设计的过程中非常有帮助。
(1)仔细阅读每个Block中的说明文档
几乎每个Xilinx Block都有介绍说明,如何使用该模块才能达到高效的硬件实现,所以仔细阅读模块说明对设计非常有帮助。比如Scale block模块不消耗任何硬件资源,而Shift block(有时候也被用作Scale block相同的目的)却要消耗硬件资源等。
(2)输入和输出加上寄存器
使用过HDL设计硬件的开发者知道,输入、输出加上寄存器对整个逻辑设计和布局布线都是非常有帮助的。所以建议在“Gateway In”模块后或者“Gateway Out”模块前加入“Delay block”(设为1)或者“Register block”。当然如果输入、输出加上两个寄存器更好,一个用于缓冲I/O端口数据,一个用于衔接到FPGA内部其它逻辑模块。
(3)尽量多使用流水线结构
在所有可能的设计中尽量使用流水线结构,可以提高FPGA内部时钟速率和FPGA设计的稳定性。
(4)尽量减少饱和处理和Round的截位模式
在设计中,饱和处理和Round模式的截位需要消耗FPGA资源,所以如果不到万不得已,尽量少用。
(5)多使用Timing Analysis Tool工具
多使用System Generator的Timing Analysis Tool分析当前设计的时钟约束。Timing Analysis Tool能显示出当前FPGA设计中最慢的路径和不满足时钟约束的路径,从而让设计者通过修改不满足约束的路径来优化系统设计。
(5)设定所有Gateway的“Data Rate”选项
在“Gateway In”和“Gateway Out”的“IOB timing constraint”项中,选中“Data Rate”,这样IOB的时钟速率和I/O输入数据速率相同,有利于时钟同步上数据。
(6)尽量减少Clock Enable (CE)的扇出
在System Generator图标的属性选项中,如果选用Clock Enable作为时钟条件,那么要尽量减少Clock Enable(CE)的扇出。如果扇出过多,在MAP或者布局布线后可能满足不了时钟约束。如果使用ISE布局布线,那么建议将下面的选项设置为相应的值:
Perform Timing-Driven Packing and Placement :on
Map Effort Level: High
Register Duplication:on
使用ISE进行Map和布局布线过程中,默认情况下这些属性都是开启(on)的,需要注意的是如果System Generator属性中“Compilation”选中“Bitstream”,那么在布局布线使用System Generator,需要修改.opt文件中的相应MAP选项为上述值,才能让Clock Enable (CE)的扇出影响减少。另一种方法是采用DCM或者Expose Clock Ports时钟方式。


