【数字IC】——逻辑综合(DC) 层次化RTL设计

由于8月份有点忙,更新会没那么频繁,不过也会抽空给大家分享学习心得哒

上一节我们介绍了Flat RTL设计,本章将介绍Hierarchical设计方式。

1、Flatten和Hierarchical

Flatten展平化设计:自底向上 bottom-up

Hierarchical层次化设计:自顶向下 top-down

1.1 Bottom-up

        最基本的设计方法,芯片经过RTL设计仿真,通过逻辑综合产生门级网表以及相应的标准时序约束SDC文件,再调用standard cell library、IP以及这些单元的时序库,通过布局布线实现物理设计。

优点:不用分配边界约束,可以在芯片全局范围内进行优化,时序结果更好。

缺点:大设计的展平设计周期较长。

1.2 Top-down

        在自顶向下设计时,需要保证设计是一种层次化结构,并采用逐层例化的方式去设计,从系统级别出发,逐步分解成较低的层次模块,直到达到设计细节的层次。

        分成数个分割快后,对每个分割快进行展平化处理,包括独立的布局布线,最后在顶层完成组装设计。

优点:将大设计分为若干个小设计,可由工程师协作完成,复杂性小,周期短。

缺点:模块之间的时序收敛问题较难解决,可能需要顶层重新作约束分配。

2、层次化设计

层次化设计示例

module TOP (IN1,IN2,...
    input IN1,IN2,...
    output OUT1,...
    A U_a (.A1 ...
    B u_b (.B1 ...
    IP_LIB_RAM U_ram (.A ...
    ...

2.1 Target_libarary和Link_library的拓展应用 

target_library包含多种文件的最常见的场景就是在执行泄漏功耗和静态功耗优化时。

会包含HVT和SVT library

set_app_var target_library "hvt.db svt.db"
set_max_leakage_power ...

补充:---------------------------------------------------------------------------------

HVT:High Voltage Threshold

SVTStandard Voltage Threshold

LVT:Low Voltage Threshold

HVTSVTLVT
Power最低较低较高
Delay较大较小最小

上面我把等”高亮了,这是因为出于功耗的考虑,在满足timing的前提下,综合时尽量使用HVT和SVT,避免使用LVT。如果timing无法满足,可以使用部分LVT cell。

将IP或者Macro库包含在link_library中

set_app_var link_library "* $target_library IP.db Macro.db"

补充:-------------------------------------------------------------------------------

有许多同学可能分不太清IPMacroMemory的区别,这里咱们可以一起讨论一下!!!

一般SRAM在设计中用的比较多

三者之间的关系:memory IP Macro

memory在设计库中一般是自带的,如果设计库中没有memory,向第三方购买的memory可称为IP。IP就是设计中买的第三方的硬核或者软核。IP和memory可以统称为Macro宏单元。

ICC中可使用【all_macro_cells】将三者都列出来。


2.2 Good Practice 

  我们在写flow的时候需要养成一些良好的习惯 !!!

在link之前指定一下当前设计

current_design TOP
link

在link之后需要针对连接和层次化问题检查一下当前设计:

  • 缺少的port或者没有连接的输入pin
  • 递归的层次化结构或者多个实例化
link
check_design
//check_design也可以基于HTML
check_design -html check_design.html

补充:打开HTML文件的方式 

sh firefox check_design.html

当link或者check_design未成功时,可以直接退出DC工具。

read_verilog
current_design TOP

if {[link] == 0} {
    echo "Linking Error"
    exit;
}
if {[check_design]==0} {
    echo "Check Design Error"
    exit;
} ;

source TOP.con
compile_ultra

 2.3 analyze & elaborate

如果使用analyze和eleborate,则不需要设置 current_design or link

  • analyze

①读取Verilog

②检查语法并发出error/warning

③将Verilog转换为中间二进制文件,并放置在当前目录中

④可以使用define_design_lib将文件/目录重定向到子目录

  • elaborate

①读取中间.pvl文件并且在DC memory中建立“GTECH”(unmapped ddc)

②将当前设计设置为指定设计

③link指定设计

④唯一一种可修改参数值的方法

analyze -format verilog {TOP.v}
elaborate TOP -parameters "A_WIDTH=8"

 如果采用read命令不能改变参数值

⑤如果在search_path中找到了.ddc文件,加载.ddc文件并且覆盖一个RTL源码


2.4 .ddc(Design ) file

  • .ddc文件是什么呢?

.ddc文件用于设计数据在不同EDA工具之间的传递和共享。

首先呢,.ddc文件并不一定是综合完成后才输出的,综合前和综合后的设计都可以保存为.ddc格式!!

.ddc包含网表(netlist.v)、设计约束(constraints.sdc)以及属性(attributes)。


  • Reading .ddc

将.ddc文件加载到DC memory的方法:explicitly reading,不建议自动加载

link只自动加载ddc,而不能自动加载verilog。

read_ddc {decode.ddc.ENCODE.ddc}

 我们需要养成一个良好的习惯,在compile之前保存unmapped ddc,原因有以下2点:

①RTL到mapped ddc需要耗费很长一段时间

②可能需要重新读取unmapped ddc来作优化

保存Hierarchical design的两种方式:

包含整个设计层次的一个文件 -hier

write -format ddc -hier -out unmapped/TOP.ddc

包含设计层次部分的独立文件

write -format ddc -out TOP.ddc //by default
write -format ddc A -out A.ddc
write -format ddc B -out B.ddc

  • save .ddc after compile

mapped ddc可以重新读入DC或者读入ICC进行物理设计

write -format ddc -hier -output mapped/TOP.ddc

 3、输出.v文件

为了减少. [ ]等容易引起不同工具解析错误和理解错误的特殊符号,会采用change_name命令将这些命令修改。

A[0] -> A_reg_0_

change_names -rule verilog -hier

write -format verilog -hier -output mapped/TOP.v

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值