好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

设计复用的RTL指导原则.pdf

5页
  • 卖家[上传人]:xy****7
  • 文档编号:47347027
  • 上传时间:2018-07-01
  • 文档格式:PDF
  • 文档大小:183.12KB
  • / 5 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 清华大学电子工程系微波与数字通信国家重点实验室 CAD 中心 - 1 - 设计复用的 RTL 指导原则 设计复用的 RTL 指导原则 清华大学电子工程系微波与数字通信 国家重点实验室 CAD 中心 清华大学电子工程系微波与数字通信 国家重点实验室 CAD 中心 (内部文档) (内部文档) Hegh Hegh 2003.12.30 2003.12.30 清华大学电子工程系微波与数字通信国家重点实验室 CAD 中心 - 2 - 设计可复用的基本要求是 RTL 代码可移植通常的软件工程指导原则在 RTL 编码时也 适用 类似软件开发,基本的编码指导原则要求 RTL 代码简单、结构化和规则化这样的代 码也易于综合和验证 命名习惯:命名习惯: 1、 所有信号、端口和变量名称使用小写字母,常数名称、用户定义类型和参数使用大 写字母 2、 命名应该有含义, 应该解释变量的行为 例如, 复位信号使用 “rst” 、 “clr” 或 “reset” 、 “clear” 这些信号也应该遵守高/低电平有效习惯 3、 参数名应该短,因为总和工具在处理中须连接名称生成唯一的参数名,很长的名称 会引起可读性问题。

      4、 使用“clk”或者“CLK”命名时钟线,或用它作为所有时钟信号的前缀例如, clk_show、clk_A另外,同一来源的所有时钟信号使用同一名称 5、 区分高电平有效信号和低电平有效信号,一个简单的方法是用“_h”表示高电平有 效信号,用“_l”表示低电平有效信号 6、 当申明多位变量时应使用统一的位顺序, 或者从低到高, 或者从高到低 例如 VHDL 中用 7 downto 0,Verilog 中用[7:0]如果用 0 作为最低端的位,那么所有多位变量 应该是(n-1)到 0 的形式这些一致性避免了当多位变量连接时的编码错误 7、 国成块应使用一个有意义的标志名同样,标志名不能太长,也不要重复命名例 如给一个过程和一个信号起同研的名字会造成混乱 如果用 VHDL 设计,记住 IEEE 标准 1076.4 对库单元顶层端口声明的命名习惯提供的 某些限制特别是,0 级符合中有一些对 port/generic 类型的命名规则,以便仿真器以 一种统一的方式处理 SDF 反标注 编码的一般指导原则编码的一般指导原则 1、 使用简单结构和时钟方案代码的结构应该一致规则的划分方案使各个模块规 模大致相等,以实现一致性。

      设计的划分应该使一个单独模块所有逻辑使用同一 时钟或者复位信号 2、 编码风格应该一致,而且要根据参数的使用而不是常数 3、 应该使用行首缩进以提高 RTL 代码的可读性然而为了使行不致太长,缩进应该 小(2——3 个空格) 应该避免使用 Tab 在不同的文本编辑器中会引起文本错位 4、 端口声明应该合乎逻辑且一致这就是说,所有的输入、时钟、输出和输入输出 应该有合适的顺序一行声明一个端口并附有短小的端口说明使十分有些的当 一个模块实例化,声明应该使用名称明确地映射,而不是用位置关联 5、 要尽可能使用函数,而不要用重复的代码将一段代码归纳为函数以便多次复用, 这是一个好习惯 6、 要尽可能使用函数,而不要用重复的代码数组比循环仿真快得多,因此用向量 操作代替循环可以提高仿真性能 7、 内部的三态总线引发严重的设计兆年,只在绝对必要时才使用 8、 编码应与工艺无关,适于不同的仿真器在 VHDL 中,应该只使用 IEEE 标准类 型 9、 出于各种原因,VHDL 的设计经常要转化为 Verolog一些 VHDL 结构,例如块机 构,会生成改变变量声明的语句,而在 Verilog 中没有对应的语句。

      这些在 RTL清华大学电子工程系微波与数字通信国家重点实验室 CAD 中心 - 3 - 中都应该避免 10、 单元库开发过程中,应该注意不依赖工艺,因此,在 RTL 代码中要避免将门 实例化门级设计难于阅读,因此难于维护和复用 11、 在高速电路中, 需要在时钟脉冲的两个边沿捕捉数据, 因此高速电路中时钟的 占空比对时序分析至关重要 综合和时序分析工具应该取最坏情况的时钟占空比, 这个占空比还应该归档如果需要混合时钟边沿,那么应该把它们分组到不同的 模块中 12、 要避免内部产生的时钟, 同样也要避免内部产生的条件复位 内部产生的时钟 和复位在测试时有问题,并使综合困难这项规则的例化时需要门控时钟的低功 耗设计,这时的门控时钟逻辑一定要保持在一个单独模块的顶层除此之外,要 避免门控时钟 面向综合的面向综合的 RTL 开发开发 RTL 的目标是通过综合生成设计每一个综合工具对 HDL 结构都有它独特的口味这 些结构使综合过程有效,也简化了综合后的分析 1、 如果可能, 要尽量避免在设计中使用锁存器 综合工具可能会由于 RTL 代码的不完 全或者意义模糊而生成锁存器因此,当需要锁存器时,更清楚 的做法是调用它 们,而不要让综合工具将之引入网表。

      2、 另一种在 RTL 应该避免的重要部件是组合逻辑的反馈环路 组合逻辑反馈环路在设 计复用时产生各种时序问题;同样应该尽量避免异步逻辑 3、 寄存器和触发器提供同步,在时序逻辑中比锁存器更可取应该用电路复位信号初 始化寄存器,而不用 initial 语句(Verilog)和声明中的 initialization(VHDL) 如 果不明确使用复位,将不能保证网表中所希望的复位机制例如在 Verilog 中,第 一个 always 块是一个同步复位的寄存器,而第二个 always 块却是异步复位 4、 敏感信号表应尽可能完整当敏感信号表不完整时,综合前后的网表仿真可能会不 对应在组合逻辑块中,敏感信号表一定要包含这个过程或块读入的每个信号对 于时序块,敏感信号表一定要包含时钟和其他控制信号另外,也要避免敏感信号 表中出现不必要的信号,因为它们会降低仿真速度 5、 在 Verilog 中,对于时钟块应使用非阻塞赋值,否则,RTL 级和门级的行为会不同 同样,在 VHDL 中,最好使用信号而不是变量 6、 Case 语句在 Verilog 和 VHDL 中都代表单个多路选择器, 而 if_then_else 语句则生成 一个级联的多路选择器链,因此,最好避免使用有两个以上条件的 if_then_else 语 句。

      7、 RTL 代码应该以一定的方式划分, 使综合过程更有效, 时序要求更容易实现 例如, 编写一个状态机,代码可以分为两个过程(process)——组合逻辑和时序逻辑 8、 只要可能,块的输出应该加寄存器这可以简化综合,使驱动能力和延迟可预测 这也会使工艺映射更简单,在设计复用中极为有用 9、 为提高时序分析的效率,应该避免多周期路径如果绝对需要一个多周期路径,那 么它应该保持在单一的模块中,使路径不至于跨过模块边界 10、 相关的组合逻辑应该在同一模块中; 不同综合目标的模块应该分开; 将相关逻 辑功能分在一组也能避免块之间的时序依赖关系 11、 应该避免在顶层设计中调用门级逻辑 顶层逻辑阻止工具优化带有块逻辑的门 级逻辑如果在 SOC 中使用了多个相同的核胶联逻辑应该放在核内部例如, 时钟域缓冲器和总线接口门可以放在核内,使胶联逻辑变成简单的互连线 清华大学电子工程系微波与数字通信国家重点实验室 CAD 中心 - 4 - 12、 综合指令 (如 dc_shell 命令) 不应放在 RTL 中 如果 soc 之间的综合目标不同, 嵌入的命令会引起冲突,限制设计复用这条规则的一个例外是可以有启动核结束 综合过程的指令。

      RTL 检查检查 综合工具会以某种方式解释 RTL 代码来确定它意味着哪种类型的逻辑由于综合过程 本身要花费很长时间,因此有这样的工具可以浏览 RTL 代码,指出在综合时可能会遇到的 问题和错误这种工具叫做 Lint 工具,是按照软件变成工具如 Glint 和 Clint 的方式命名的 极力推荐设计者将 Lint 过滤过程加入到设计流程中,例如加在 makefile 中这个过程 会早期发现许多设计错误和违反代码风格的地方,迫使工程师必须先验证代码 在以下的的条件和情况下,Verilint 将给出警告: 1、 Verilog 中的 case 语句没有给出所有可能的条件,却为综合工具指定了 full_case 指 令 2、 一条线有多个驱动,却没有声明为三态线 3、 任何逻辑二进制操作(如&&)的操作数多于一位由于工具能为这种情况确定缺 省逻辑,所以这仅仅是一个警告 4、 代码中出现自赋值(如 a=a) ,因为它没有作用 5、 敏感信号表中出现常数,因为它没有作用 6、 在循环体内改变循环变量 7、 在非阻塞赋值中使用已经赋值却没有出现在 always 块敏感信号表中的变量。

      如果 声明是阻塞赋值是可以的,因为变量仅仅作为临时变量 8、 一个变量同时使用阻塞和非阻塞赋值,工具无法判断它是寄存器/锁存器,还是临 时变量 9、 变量的不同位在多个 always 块中赋值 10、一个函数是用 assign 结构而不是用“=“赋值,因为这个语义在 Verilog 中没有明 确定义 11、使用了根据优先权规则可能产生不同解释的复杂条件表达式 12、阻塞或非阻塞赋值有与之相关的时间延迟,因为综合工具不会从 RTL 语句中提取 延迟 13、门级设计内部混合了 RTL 结构在 RTL 内有少量门不会有警告另外,门级块中 允许有连续的赋值语句 14、RTL 代码内部设置了一个变量却没有使用 15、综合工具可能不支持一些编译器结构,如 ifdef 或 ifndef,因此,Verilint 给出警告 16、输入或输入输出定义为寄存器类型的变量 17、以可能非法的方式使用 or 操作符,如 a&b or c 在以下条件下 Verilint 会发出错误信息: 1、 数组下标为负 2、 一个 instance 的名字(例如 UDP 的名字)在敏感信号表中 3、 逻辑 NOT 操作的操作数多于一位,因为工具不能正确地推断逻辑门。

      4、 整数和常数 case 表达式超出范围 5、 一些综合工具不允许在敏感信号表中选择位, 因此, Verilint 会给出错误信息 敏感信号表中不能用数组 6、 在 always 块中使用全局变量 7、 在函数和任务中使用全局变量 清华大学电子工程系微波与数字通信国家重点实验室 CAD 中心 - 5 - 8、 Verilog 中地所有语法和语义错误都被 Verilint 标记为错误。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.