ICC II 7 顶层设计的实现(Top level implementation)

24 篇文章 94 订阅
objectives

列举顶层实现的必要步骤;
描述 什么是摘要 还有 摘要中包含什么
描述怎样将block 集合到top level中去;

顶层的实现

对于规模比较的大的设计:
在实现顶层设计时, blocks 可以是 design views (abstract view 摘要视图 boundary上的elements都是全的 但是内部是看不到的, 也就是说路径中 只保留了 in-reg reg-out in-out 而reg-reg 全部被隐藏起来)
或者 ETM view : 正能看到一些 time 信息和function 信息; 是foundry 提供的一些结构保密的宏单元之类的; 能够减小run time;

在这里插入图片描述

在设计的任何阶段 都能使用 blocks

使用完整实现的block

在这里插入图片描述

并行实现 block & top

在这里插入图片描述

ETM 模型(extracted timing mode 时序提取模型)

时序模型是从block design的数据中导出来的;
使用extract_model指令 生成; 会调用Prime-time 以及 Library Manager;
prime time 在后台完成时序模型的提取;
Library Manager 将primetime 的ETM.db 与 frame view 组合起来;
能够用来建立IP block的模型 能够将内部的细节隐藏起来;
在这里插入图片描述

Abstract View (摘要视图)

从设计视图中导出的部分网表视图;
比设计视图 要小很多,因此在实现顶层设计时 能够更好的执行;
能够包含以下附加的信息:
clock exceptions
crosstalk data
Power information
signal EM data
在这里插入图片描述

生成 Abstract view
create_abstract -read_only
#使用-read_only top 只能看不能改
# 识别 保留 所有有效的mode 下的接口逻辑
# 保留那些在接口逻辑中 有时序约束的pins
# 保留所有的Corner 的 RC 参数;
# 保存和接口逻辑相关的 UPF 的信息

FRAME view

FRAME view 是布线需要的包括virtual router需要的物理抽象视图(物理摘要视图)
你需要为每一个 子模块 创建一个frame view;

create_frame
# 默认  

在摘要中保存所有必要信息

在这里插入图片描述

在顶层: 指定block的Reference Library;

在所有的block的 abstract view 和 frame view 都生成之后,将sub-blcok的设计库 包含进 顶层的 参考库列表中:

create_lib TOP.dlib -tech mytech.tf \
-ref_libs "stdcell.ndm macros.ndm ... MYBLOCKS/A.dlib ..."
级联的参考库列表

默认 link_block 使用TOP-block的库去link 所有 top 和block 的cells; 但是可能 TOP 的reference lib 和 Block的reference lib 是不一样的
最好是使用 原始的 block 的reference lib list;

create_lib TOP.dlib -tech mytech.tf \
-ref_libs "stdcell.ndm macros.ndm ... MYBLOCKS/A.dlib ..."

foreach DESIGN {A B C} {
set_attribute [get_libs ${DESIGN}.dlib] use_hier_ref_libs true
}
在层次设计中的 reference library

对于那些有很多层次的设计, 你需要为他们设置级联的reference library;
如图所示: MID.dlib 包含独立的 stdcell 库 宏单元库 以及级联的BOT.dlib;
在这里插入图片描述

linking the sub-blcoks

在层次设计流程中, 可能需要加载不同实现阶段的设计,不同的设计团队 有不同的命名标准.
在保存block时 使用lables 标记block所属的实现阶段.

save_block -as myBlock/placed 
#OR
save_blcok -lable placed

默认 ICC II只会link那些和TOP有着相同lable的blocks;
使用set_lable_switch_list 去修改默认link的选项.

set_lable_switch_list [-references {list_of_name }] {list_of_lable}
# 当然上述的list_of_name ,list_of_lable 是有优先级的
# example:
set_lable_switch_list \
{route_opt clock_opt palce_opt}
set_lable_switch_list -references {gpu} {eco}
# 当link GPU block时 仅会搜索 gpu /eco
# 然后才会回到默认的流程 gpu / <top lable name  >

在顶层 reporting

#验证你拥有正确的 摘要视图
report_abstract
# 将block 级的(更低层次的)balance point的信息 传递到顶层
promote_clock_data -balance_points
# 如果你应用在top层的clock exception是包含block 的balance points 的信息

很多属性存在是为了queries in a hierarchical design

在这里插入图片描述

在linking之后 选择Abstract /design and lables

在link 之后 你可以改变 独立的 实例或参考到design view或者 abstract view,并为他们指定lable

#将指定的cell 改成design view
change_abstract -view design -cells I_ADD_0
# switch to the abstract with lable cts for a reference

change_abstract -view abstract -lable cts -reference ADD

check design

在顶层做PR之前 也需要check ;

check_hier_design -stage pre_placement
  • 9
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
ICC是一种通信协议,它可以在Verilog中实现。以下是一个简单的例子,演示如何使用Verilog实现ICC通信: ``` module icc_communication( input clk, input rst, input icc_req, output icc_ack ); reg icc_requesting; reg icc_acknowledging; always @(posedge clk or posedge rst) begin if (rst) begin icc_requesting <= 0; icc_acknowledging <= 0; end else begin if (icc_req) begin icc_requesting <= 1; end else begin icc_requesting <= 0; end if (icc_requesting && !icc_acknowledging) begin icc_acknowledging <= 1; end else begin icc_acknowledging <= 0; end end end assign icc_ack = icc_acknowledging; endmodule ``` 在上面的例子中,我们定义了一个名为icc_communication的模块,它具有四个输入输出端口:时钟信号、复位信号、icc_req信号和icc_ack信号。我们使用两个寄存器icc_requesting和icc_acknowledging来跟踪ICC通信的状态。 在always块中,我们首先检查复位信号。如果rst为1,则我们将icc_requesting和icc_acknowledging重置为0。否则,我们检查icc_req信号。如果icc_req为1,则我们将icc_requesting设置为1。否则,我们将icc_requesting设置为0。 接下来,我们检查icc_requesting和icc_acknowledging的状态。如果icc_requesting为1且icc_acknowledging为0,则我们将icc_acknowledging设置为1。否则,我们将icc_acknowledging设置为0。 最后,我们使用assign语句将icc_ack端口连接到icc_acknowledging寄存器。这样,当icc_acknowledging为1时,icc_ack也将被设置为1。 上面的例子是一个简单的ICC通信模块,它可以在Verilog中实现。当然,实际应用中,ICC通信可能会更加复杂,需要更多的逻辑来处理各种情况。但是,这个例子可以为您提供一个开始实现ICC通信的起点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旺旺脆兵兵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值