谈谈芯片中的层次化的设计(hierarchy design)

电子说

1.2w人已加入

描述

层次化设计适当下非常流行的设计思路,随着芯片的规模越来越大,fullchip的数据量和复杂度和过去已经不能同日而语了,无论是工具的runtime还是QoR,直接完成full-chip的工作越来越不现实。所以,在这里,就需要引入 层次化的设计(hierarchy design) 的概念,

从芯片的规划开始,层次化的理念贯穿整个设计流程,下面的各个设计方面都会受到不同程度的影响

RTL
UPF
verification
DFT
Timing constraint
synthesis
EC
layout
STA
stream-out
layout verification
Power analysis

一个项目的开始,需要根据实际的需要确定层次,这主要是基于模块功能规模,一起来看下面这个实例

芯片设计

芯片设计

可以看出,从整个SOC的设计当中,主要的partition分割是两种,top和none-top。理论上讲,所有的none-top,互相之间都没有依赖关系(dependency),除非它本身也是一个小top,具体可见下面的示例:

芯片设计

这里的top和sub-top_1就是所谓的hierarchy design,在一个芯片里边,top通常只有一个,但是可能会有多个sub-top,甚至是sub-sub-top,这取决于芯片层次化的深度和芯片的复杂度。可以预见,层次化越多,单个partition的复杂度会降低,但是给top的partition划分带来了更多的工作量,譬如

UPF
SDC
physical partition boundary

还有一个影响就是dependency,所有的sub-top,都和top一样,在后端实现的时候(synthesis/layout),任何的top的后端工作,都需要sub partition的支持,譬如上图,要想开始sub-top1的synthesis,就必须先要完成 sub_par_1_1,sub_par_1_2,sub_par_1_3的综合工作。

这就是runtime的瓶颈。实际项目中,为了减少这方面的影响,通常都会有一些变通的手段,来快速支持顶层设计,这个小技巧的具体细节,也会在本系列文章里边提及。

业界里边还有一种更为前卫的partition的设计,被称为abut-partition的设计,简单的讲就是没有top的概念,所有的partition都是完全贴合的,譬如下面这个floorplan的partition的框图

芯片设计

这种架构更为简练,所有的设计全部都推到了partition,从物理实现上来讲,top level已经不包含任何的leaf cell,所有的存在就是一些连线关系、PG、terminal以及co-design routing了,这种极简的abut设计有其优越性,也有一些限制。

一个完整的层次化设计,在代码设计阶段,就应该树立层次化的理念。这里边主要由以下几个考量

简化大规模设计的必经之路
后端实现的真实需求
验证和设计的一致性
相关配套、支持文件的参照点(SDC、UPF等等)

从架构入手,合理分布RTL的层次结构,让整个设计看起来张弛有道。这个思路体现如下

芯片设计

前端设计人员按照下面的思路过程来设计代码

完成inst1的模块代码设计

完成inst1的内部连线

完成inst2的模块代码设计

完成inst2的内部连线

完成top-level的模块代码设计

完成top-level的连线

可以看到,这里边涉及了三个部分的设计

inst1

inst2

top-level

通常来讲,合理的分配各个模块可以加速full-chip的收敛。从上面的例子可以看出,top-level的东西比较简单,只有一个控制逻辑和PAD,主要的功能都在子模块里边,这样的好处是非常明显的

子模块的实际内容多,但是总体规模不会很大,综合和版图的可控性会很好

相互关联密切的功能IP封装在一个模块里,有利于时序收敛和后端工具优化

top-level的主要用途就是穿线,以及中心控制和PAD等等,有利于整体功能布局的规划,主要精力要放到interface的时序上,以及可绕通性。

每一个模块都有一套自己独立的文件结构,譬如inst1对应的是design1,整个design1的文件架构类似如下:

芯片设计

有了这些文件,design1的综合就可以开始了。综合的流程通常比较简单,这里不做过多的讨论,基本流程可以参见下面的列表

HDL analysis 和 elaboration

read_sdc和read_upf 以及一些基础配置

运行compile_ultra和DFT insertion

创建Block Abstraction view

生成DDC和网表

重要的第四步时一定要执行的,这里生成了后面层次化设计的重要信息。

对应的,这里也列一下inst2(design2)的文件目录结构

芯片设计

使用综合器,分别可以得到下面的文件

design1.ddc 和 design1.v

design2.ddc 和 design1.v

基于不同的DCT/DCG环境,可以开始根植于如下目录结构的顶层综合

芯片设计

顶层综合的思路会有一些不同,具体流程如下

配置block implementation的状态

读入底层带有Block Abstraction的DDC(不要读入子模块netlist,会导致非常多的困惑),工具回显如下例

芯片设计

HDL analysis 只分析top-level的verilog,譬如:top_ctrl_design.v、PAD_design.v 、designFC.v

elaboration的时候,一定要注意一下子模块的链接状态,保证模块信息都可以被正确挂载进来

在保证link无误的情况下,读入designFC.sdc和designFC.upf,运行compile_ultra和DFT insertion

生成DDC和网表,完成top-level的综合

对应的,在做层次化的设计的时候, 需要注意下面的事项:

调用底层模块的时候,一定要使用带有block Abstraction的DDC,DDC里边包含了block的

时序约束信息

UPF信息

时钟结构信息

边界时序信息

top-level的UPF只有顶层的low power需求

顶层的LS、ISOLATION的需求,如果被约束的cell在顶层

顶层和block的PG连接关系

top-level的SDC包含了整个top-level和block-level的时序约束

顶层的SDC一定要和block的SDC,在block级别呈现出高度的一致性,譬如纯粹block 内部的MCP、false path等等

如果时钟的源头在顶层,block级别的clock无需二次声明,譬如下面示例

芯片设计

在design1/desing2综合的时候,分别在各自的sdc里边定义pclk,如果把视角放到顶层,那么画风是这样的

芯片设计

可以看到,从toplevel来看的话,以前的design1/design2的pclk,其实都是从top-level的pll驱动的,在top-level构建SDC的时候,只需要生命pll的clock就可以了(Pll_clk),剩下的就交给工具自动衍生。

写到这里,相信读者们对层次化设计流程有一个比较具体的了解了。





审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分