博客首页 | 排行榜 |

ares10的博客

个人档案
博文分类
FPGA设计小结  2008-03-23 18:56

下面是自己写verilog代码的一些经验和小结。和大家分享下。

1、对于高速的逻辑操作(如:判断,取反等),为了保证逻辑正确和结果的稳定(不抖动),需要用 always case语句来实现,而不要使用 if…else…,或者assign 语句的()? 形式。也即,对于高速数据的判断选择性操作,用case比用if…else…可以满足更高的时钟要求,但占用较多的slice;同一种逻辑操作,用同步赋值语句always比用assign可以满足更高的时钟要求。所需要的代价就是需要多增加一些触发器,因为只有触发器可以用 always赋值。 2、时钟周期约束使用最多的一种约束,增加时钟约束可以提高芯片的时钟速率。增加约束后,综合、布局、布线,查看place and route报告。如果报告中约束不满足,则需要改动程序使其满足时钟约束;如果约束满足了,后仿结果还可能不正确,还需要进一步调整时序。 3、对于加减操作,最好使用IP CORE的加法器。相比直接使用符号”+”或“-”,IP CORE可以在资源相同的情况下,达到更高的速率。 4、后仿时,为了观察程序模块中的内部信号(出去模块的输入和输出),需要将内部信号也通过模块的输出引出。当引出的内部信号过多时(FPGA的输入输出管脚数量是有限的),约束将更加难以满足,后仿可能会出现一些不可预料的问题。所以不要引出过多的内部信号。 5、采用流水线操作可以大大提高系统时钟,也即将复杂的操作分成许多简单操作级联的形式,这样每级简单操作都可以达到较高速率。代价就是用资源去换速度(每级流水线都需要额外的reg型变量),同时有一个固定的初始时延。 6、一般不要同时使用上升沿触发和下降沿触发,这样会降低系统稳定工作的时钟速率。 7、不可以在一个always模块的敏感变量区同时使用沿触发和电平触发。 8、用ramblock ramdistributed ram)存储比用触发器存储节约slice资源。

 

有不准备的地方还请大家指正。

类别:FPGA |
上一篇:人生成熟的四个重要标志(zz)
以下网友评论只代表其个人观点,不代表本网站的观点或立场