层次化的设计(hierarchy design):RTL和综合

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

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

从架构入手,合理分布RTL的层次结构,让整个设计看起来张弛有道。这个思路体现如下
在这里插入图片描述
前端设计人员按照下面的思路过程来设计代码

  1. 完成inst1的模块代码设计
  2. 完成inst1的内部连线
  3. 完成inst2的模块代码设计
  4. 完成inst2的内部连线
  5. 完成top-level的模块代码设计
  6. 完成top-level的连线

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

  1. inst1
  2. inst2
  3. top-level

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

  1. 子模块的实际内容多,但是总体规模不会很大,综合和版图的可控性会很好
  2. 相互关联密切的功能IP封装在一个模块里,有利于时序收敛和后端工具优化
  3. top-level的主要用途就是穿线,以及中心控制和PAD等等,有利于整体功能布局的规划,主要精力要放到interface的时序上,以及可绕通性。

每一个模块都有一套自己独立的文件结构,譬如inst1对应的是design1,整个design1的文件架构类似如下:
在这里插入图片描述
有了这些文件,design1的综合就可以开始了。综合的流程通常比较简单,这里不做过多的讨论,基本流程可以参见下面的列表

  1. HDL analysis 和 elaboration
  2. read_sdc和read_upf 以及一些基础配置
  3. 运行compile_ultra和DFT insertion
  4. 创建Block Abstraction view
  5. 生成DDC和网表

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

对应的,这里也列一下inst2(design2)的文件目录结构
在这里插入图片描述

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

  1. design1.ddc 和 design1.v
  2. design2.ddc 和 design1.v

基于不同的DCT/DCG环境,可以开始根植于如下目录结构的顶层综合
在这里插入图片描述
顶层综合的思路会有一些不同,具体流程如下

  1. 配置block implementation的状态
  2. 读入底层带有Block Abstraction的DDC(不要读入子模块netlist,会导致非常多的困惑),工具回显如下例
    在这里插入图片描述
  3. HDL analysis 只分析top-level的verilog,譬如:top_ctrl_design.v、PAD_design.v 、designFC.v
  4. elaboration的时候,一定要注意一下子模块的链接状态,保证模块信息都可以被正确挂载进来
  5. 在保证link无误的情况下,读入designFC.sdc和designFC.upf,运行compile_ultra和DFT insertion
  6. 生成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无需二次声明,譬如下面示例
      block clock
      在design1/desing2综合的时候,分别在各自的sdc里边定义pclk,如果把视角放到顶层,那么画风是这样的

在这里插入图片描述
可以看到,从toplevel来看的话,以前的design1/design2的pclk,其实都是从top-level的pll驱动的,在top-level构建SDC的时候,只需要生命pll的clock就可以了(Pll_clk),剩下的就交给工具自动衍生。
写到这里,读者们可以对层次化设计流程有一个比较具体的了解了。RTL和综合的怎眼配套合作;各个支持文件,又是在不同层级下的是怎么样的嵌套关系。希望这么一篇短文,能够引起读者们的共鸣与思考。
如果觉得这篇文章不做,请猛戳下图关注艾思的公众号吧
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值