- 1、本文档共81页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章 可综合的编码规范 5.2针对综合的编码准则 6. 避免伪路径(False path) 伪路径是那些静态时序分析(STA)认为是时序失败,而设计者认为是正确的路径。通常会人为忽略这些warning,但如果数量较多时,就可能将其他真正的问题错过了。 5.2 针对综合的编码准则 7. 避免使用LATCH,在设计中避免组合反馈电路 在设计中避免产生任何LATCH。不完整的if和case语句导致不必要的latch的产生。 if语句中缺乏else子句、case语句中各个条件所处理的变量不同都会在综合时推断出LATCH。 不希望使用Latch时,应该对所有输入情况都对输出赋值,或者将条件赋值语句写全,如在if语句最后加一个else,case语句加defaults。当你必须使用Latch时,为了提高可测性,需要加入测试逻辑。 为检查设计中是否有LATCH,编译设计并用命令all_registers -level_ sensitive,可以检查出如LACH这样电平敏感的单元。 5.2针对综合的编码准则 8. always 语句使用注意 (1)避免同一个信号在两个或两个以上的always块语句中赋值。除了三态输出信号,其它信号是不允许在不同的块语句中分别赋值。 (2)定义完整的敏感表。在每一个always(Verilog中)块中包含完整的敏感表。同时 确保敏感表中没有包含不必要的信号。 (3)阻塞赋值和非阻塞赋值 在写可综合的代码时,建议在always @(posedge clk)语句块中总是使用非阻塞赋值。否则RTL级的仿真会和门级仿真的结果不一致。 5.2 针对综合的编码准则 9.case语句和if-else语句 如果不需要有优先级的编码结构,建议使用case语句而不要使用if-then-else语句。对于基于cycle的仿真器,case语句的仿真速度要比if 语句的仿真速度快。对于大的多选器,case语句也比条件赋值语句的仿真速度快。 5.2 针对综合的编码准则 10.三态电路设计 三态电路一般用于: (1)双向口; (2)多路数据竞争总线或者多路选择电路。 注意:在ASIC设计里,除了芯片的双向口或输出口可用三态外,芯片内部其它部分不允许出现三态,这是因为ASIC设计里,考虑到DFT(Design For Test)等因素,一般ASIC厂家在芯片内部不提供三态电路。因此,在ASIC设计中,三态电路一般用组合逻辑替代。 双向信号如何使用? 5.2 针对综合的编码准则 11. 状态机的编码 (1)将状态机的描述分成三个always,分别进行计算下一个状态的产生和生成当前输出,以及实现状态的跳转。 (2)在Verilog中,使用parameter来定义状态向量。 (3)将状态机的逻辑和非状态机的逻辑分成不同的模块。 (4)必须包括对所有状态都处理,不能出现无法处理的状态,使状态机失控。为此可对状态机指定一个默认的状态,在Verilog中,使用default条件。 (5)状态机的case表达式中不能含有变量表达式,状态转换中也不允许有变量表达式表示的状态。 5.3 关键路径上的电路编码技巧 1. 正确处理关键路径的优先级 在FPGA中,关键路径(critical path)上的每一级逻辑都会增加延时。为了保证能满足定时约束,就必须在对设计的行为进行描述时考虑逻辑的级数。减少关键路径延时的常用方法是给最迟到达的信号最高的优先级,这样能减少关键路径的逻辑级数。例如,一个四级的Mux,其中第二级信号为关键信号 如何改善timing。我们就需要给第二级信号最高优先级。 5.3 关键路径上的电路编码技巧 2. 正确处理好if_else与case语的嵌套使用。 if语句指定了一个优先级编码逻辑,而case语句生成的逻辑是并行的,不具有优先级。if语句可以包含一套不同的表达式,而case语句比较的是一个公共的控制表达式。通常,case结构速度较快,但占用面积较大,所以用case语句实现对速度要求较高的编解码电路。if-else结构速度较慢,但占用的面积小。如果对速度没有特殊要求,而对面积有较高要求,则可用if-else语句完成编解码。不正确的使用嵌套的if语句会导致设计需要更大的延时。为了避免较大的路径延时,不要使用特别长的嵌套if结构。用if语句实现对延时要求苛刻的路径(speed-critical paths)时,应将最高优先级给最迟到达的关键信号(Critical?Signal)。有时,为了兼顾面积和速度,可以将if和case语句合用。 5.3 关键路径上的电路编码技巧 3. 使用圆括号处理多个加法器 控制设计结构的另一种方法是使用圆括号来定义逻辑分组。下面的例子描述了一个4输入的加法器分
文档评论(0)