目录
2.1 可综合描述原则
Verilog是硬件描述语言(hardware description language, HDL)
HDL具有硬件设计的基本概念
- 互联 connectivity
- 并发 concurrency
- 时间 time
可综合语法
- always
- if-else
- case
- assign
硬件电路结构
典型描述 | 电路结构 | 备注 |
单if-else | 多路选择器 | 先加后选、先选后加 |
单if-else if-else if… | 多路选择器 | 无优先级判断 |
多if | 级联多路选择器 | 最后一级具有最高优先级(不推荐) 分配给具有最大延迟的关键信号 |
case | 译码器 | 条件互斥;无优先级; |
if缺else case缺default | Latch | 易产生毛刺,尽量避免,使用DFF |
full-case | 综合器指令:声明已列举所有状态 | |
parallel-case | 综合器指令:声明条件互斥并行,无优先权 | |
逻辑复制 | 降低扇出,降低传播延迟 | |
资源共享 | 减小面积 | |
资源重排 | 降低传播延迟 | |
assign = ( ) : ( ) ? ( ) | 仅用于连线,避免多层嵌套 |
可综合风格
- 完整的always敏感信号列表
- 每个always敏感信号列表对应一个时钟
- 禁止wait声明和#delay声明
- 时序逻辑,非阻塞赋值,<=
组合逻辑,阻塞赋值,=
模块划分
- 分开 异步逻辑、同步逻辑
- 分开 控制逻辑、存储器
2.2 考虑延迟和面积等
考虑延时
- 分支支路的延迟:使用多if,级联多路选择器,把较晚到来(具有最大延迟)的信号)放在最后,提取总结互斥的条件写在pre_condition里。
- 数据通道:先加后选、先选后加;
- A+B<24,A<24-B,先加减再比较;
考虑面积
- 操作符:谨慎使用运算符(+,-,*,/)以及条件语句中的比较运算;如果一定要使用运算符,尽量资源共享
- 多比特擦做:转换为对特定比特操作
考虑功耗
动态功耗 $ p_{d}=\sum afCV^{2} $
- a:翻转次数
- f:工作频率
- C:电容
- V:电压
电容电压相对固定,RTL设计中考虑降低电路翻转次数,常见措施
- 门控时钟,直接关掉时钟
- 增加使能信号,时钟仍在翻转
- 对芯片各模块控制
- 尽量减少毛刺在电路中的传播
- 在FSM中,使用低功耗编码(格雷码),单比特翻转
- 热点(布线时,在一定面积内占用大量单元),如较大的mux,分解为较小mux
2.3 RTL设计指导原则
面积速度互换
- 面积:DFF或LUT数量,门数量
- 速度:稳定运行时达到的最高频率
- 常用技巧:模块服用,乒乓操作,串并转换
乒乓操作
- 适合对数据流进行流水线式处理,无缝缓冲与处理
- 节约缓冲区空间
- 使用低速模块处理高速数据

流水线设计

根据延迟划分,插入寄存器,提高电路运行频率。
小测验



作业
