一.数字IC的设计顺序从结构上分为两类
1.由底向上的的设计。
流程:基本门电路(电路和版图)--->逻辑组合--->模块--->子系统--->系统总成
优点:底层优化程度高
缺点:整体把握性差,修改困难,工作量太大,设计周期长,自动化程度低,所以适合运用于全定制设计和模拟电路设计
2.由顶向下设计
流程:系统设计-->行为架构设计-->RTL级设计-->逻辑综合-->门级网表-->物理设计(依赖工艺库)
优点:整体把握性好,顶层优化程度高,可复用性好,设计周期短,可以逐级仿真,自动化程度高(用EDA工具)
缺点:太依赖EDA工具,依赖底层工艺库,底层优化程度低
适用于超大规模集成电路设计,半定制设计等。
二.数字IC设计流程,借鉴这个图
里面涉及到的一些操作和具体功能列表如下:
仿真验证 | 综合 | 时序和功耗分析 | 形式验证 | 物理设计 | 系统级 |
算法架构验证,模拟仿真,数字仿真与动态验证,RTL语法和SRS检查,基于C++的系统验证 | RTL综合,物理综合,门控时钟 | 静态时序分析,单元级功耗,管级时序和管级功耗 | 等效性检查 | 布局规划,单元布局布线,时钟树综合,扫描链重组,信号完整性,电压降与电迁移,RC参数提取,LVS与DRC | 系统级设计与仿真 |
三.一些重要的注意点和优化点
1.不可综合的Verilog语法示例:
1.不支持内嵌的时间控制,如#delay,wait等,因为综合工具会以延时最小为目标综合不会理会这些操作。
2.不支持Initial语句,一般用复位机制来初始化
3.不支持forever和repeat等次数不确定的循环语句,while和for循环语句不能用条件表达式的真假来终止循环,要用@(posedge clk)或者@(negedge clk)来终止循环
4.不要使用锁存器,尽量在RTL代码中排除出现锁存器
5.不使用与不确定数x和高阻态z有关的操作运算符和语句等,全等==,不等于!==,casex和casez语句,即尽量不使用三态门
2.优化点总结
1.顶层模块要尽量扁平化,什么是扁平化,直观地讲,就是将各个模块铺平,不要层叠。
内部模块层次化,什么是层次化,就是一个模块下面划分为多个子模块,子模块下面继续划分。
2.相关组合逻辑模块尽量合并
组合逻辑模块B的时序控制困难,可能无法综合
每个模块的输入都有寄存器,时序可控,前一个模块的输出驱动强度和延迟可能受互连线影响
每个模块的输出都有寄存器,但后一个模块的输入延时可能受互连线影响,但这种设计最好
总结:最好输入和输出都有寄存器,以避免连线延迟对时序造成的不利影响,即将时序收敛性局限在模块内部,另外,关键路径中的组合逻辑模块如何尺寸过大,应当适当地插入寄存器,分解成若干较小的组合逻辑模块,这些小模块最好大小一致,可以使得延时均匀化,有利于提高电路的工作频率。
3.优化策略
关键路径和非关键路径最好分配到不同的模块中去,对关键路径应当优化速度,非关键路径应当优化面积,综合工具优化基本上针对模块。
4避免组合逻辑中出现反馈回路