"); //-->
一.采用细致的hierarchy设计
1.top level模块仅仅应该包含 instantiation statement ,即在顶层模块中调用子 模块。
2.任何I/O instantiation 应当包含在 top level模块中。
3.任何输入输出器件的信号应当在top level模块中声明为:input、output和bi- directional Pin.
二.Design partitioning
1.在sub module中register所有输出,以保证所有sub module之间为同步设计,获 得更好的系统performance。
2.保证相关逻辑和共享资源在同一个模块中实现。这样可以做到更好的资源共享,综合 工具只能针对一定数量的逻辑进行优化;综合工具可以在一个模块内部优化整个关键路径;跨模块的关键路径也不会被有效的优化。 3.针对不同地优化目标来划分模块: ----分离关键路径和非关键路径可以获得更好的综合效果。 ----设计者应该在充分考虑性能需求和资源需求的基础上进行逻辑设计. 针对不同 的模块采用不同的优化策略,以避免相互影响。 ---对于那些并不需要high performance的模块应该放松约束以节省和预留关键资源 给关键路径。
4.在单独的模块中保存实例化代码: 可以非常方便的在RAM行为仿真模型和实际的RAM块代码之际间进行切换. 5. 每个Module的规模在30~80 PFU:小模块由于资源有限不利于综合工具实施 “resource sharing”算法;规模太大的模块一旦更改其中的一小部分就会导致整个 模块重新综合,影响到一些不必要的逻辑,增大综合运行时间。
三.Design registering
1. 利用流水设计提高系统性能,把一个较长的路径分割为多个短路径,并在多个 时钟周期完成。
2. IF statement and CASE statement比较 ----IF-THEN-ELSE statement 生成优先级的编码逻辑;CASE statement 实现 balance逻辑. ----如果每个解码条件相对独立, 这两种声明方式实现的功能是一样的。 ----IF statement的主要缺陷:使设计不必要的复杂化;需要额外的逻辑来构建优 先级Tree。 ----如果解码条件不是相对独立的, 那末IF-THEN-ELSE结构会导致最低优先级的 output依赖于所有的控制条件。 ---如果output 不需要优先级控制, 最好使用CASE statement,因为CASE声明中 每个分支的优先级是一样的,每个分支output是并发的。
四.避免不必要的Latch
1.综合工具会引入Latch,如果存在不完全的条件表达式: 象IF-THEN-ELSE 声明中没有else子句.
2.Latch会需要额外的资源,同时引入组合反馈环从而产生异步时序问题。
3.non-intended latch 是可以避免的: 使用时钟寄存器 或遍历所有的输入条件assign output 或是使用else (when others) 作为最后的子句。
五.用时钟使能信号代替门控时钟
1.门控时钟会带来很多时序问题,最典型的是clock skew.
2.时钟使能guideline in Lattice FPGA: ----Clock enable 只在触发器模式支持,Latch模式不支持. ----在一个slice中的触发器对共享一个Clock enable信号. ----所有的触发器支持positive clock enable输入. ----默认的时钟使能的优先级高于同步set/reset. 但是可以编程实现set/reset 的优 先级高于clock enable.
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。