FPGA从Xilinx的7系列学起(12)

上图的例子中,两个触发器在原始设计必须放在单独的Slice里面,因为它们每一个使用不同的控制集合。但是一个时钟使能可以被工具推断为触发器输入或可能被工具推断LUT的输入。当他使用LUT的输入的时候,这两个寄存器可以被放置在同一个Slice里面。在VIVADO和ISE下面都有选项来帮助大家自动实现该功能。大家在做设计的时候可以选用。


做设计的时候有些原则还应该注意:

在控制信号的规划的时候,XILINX的原语和IP的例化可能增加额外的控制信号到用户的设计中,那么肯定有些设计要和原语、IP共享这些共享信号。建议用户自己建立和仿真自己IP——特别是用户的设计非常大——并以此结果来评估使用这些控制信号。

不建议使用低电平有效的控制信号,这是因为触发器(flip-flops)本身没有翻转逻辑,而需要使用LUT来完成该功能。虽然可能很多人在上大学求学期间学习的原则都是低电平有效。但是这个真的是一个非常落伍的设计理念。当然除非要进行ASIC的流片工作或者使用非常古老的芯片,否则用户必须修改使用低电平有效的陈旧的思想。

低电平有效,必须增加使用更多的LUT,他们需要LUT才能把低电平有效翻转为高电平有效然后再连接到触发器的控制端口,这样就需要白白浪费一个LUT资源。

如果听说过层次设计(hierarchicaldesign)的方法学(意味着用户在使用 partitions功能,使用保持hierarchy功能, 使用IP核, 使用多网表,或者使用自下而上的编程),那么这个问题会变得更加严重:会有一个很差的资源使用情况,一个非常长的运行时间,一个糟糕的时序问题,一个差劲的功耗问题。

举一个例子,如图所示的例子准确的展示使用低有效作为控制信号,并且使用了层次结构等等的设计方法学。大家可以清晰的看到,因为要保持一个结构就无法跨越这些边界。那么如何修正这些代码呢?在这个案例中,XILINX的建议是直接修改代码或者重新整合IP核变为高有效,然后重新综合。大家一定请记住,综合工具和实现工具不能合并这种逻辑到同一个Slice的,因为用户是不允许跨层次边界优化。

再给大家提问一个问题,大家先不要看答案:

1) 以下这些案例能不能把这两个寄存器放在同一个slice里面?

注:所有控制信号都是直接驱动触发器的控制信号。

– 案例 1
• FF1: Clock, CE, Set
• FF2: CLK, CE, Set

– 案例 2
• FF1: CLK, CE, Reset
• FF2: CLK, Reset

– 案例3
• FF1: CLK, CE, Reset
• FF2: CLK, CE, not Reset

– 案例 4
• FF1: CLK, CE, Reset
• FF2: CLK, CE, Reset

案例1:不能。触发器有不同的时钟,所以它们有不同的控制组的。

案例2:不能。FF2具有时钟使能,所以它们有不同的控制组的。

案例3:不能。FF2无法提供翻转逻辑,所以它们有不同的控制组的。

案例4:能。两个触发器具有完全相同的控制信号,所以它们是相同的控制组的成员。可以被放在同一个Slice里面。

减少使用控制信号可以提高用户的资源使用率。复位逻辑的正确使用,可以提高设计的效率。如果不是设计必须要求使用异步复位,所有的设计都使用同步复位。对更大更复杂的设计,只有必须的关键的逻辑使用同步复位,其他逻辑直接不使用复位,而是依靠芯片自由GSR来进行复位就够了(这个想法够胆大,不放心的还是按照老办法来设计吧)。异步复位也只是在万不得已的情况才使用。

文章来源: FPGA那点事儿微信公众号

2 条评论

(1楼)that's cool

administrator 在 星期六, 01/09/2016 - 17:38 发表。

that's cool

fdsafdsa

administrator 在 星期六, 01/09/2016 - 17:39 发表。

fdsafdsa