电子产业一站式赋能平台

PCB联盟网

搜索
查看: 14|回复: 0
收起左侧

【芯片设计】独立综合的harden block顶层为什么避免有参数

[复制链接]
匿名  发表于 昨天 11:15 |阅读模式
编写RTL一晃十来年了,遇到了很多形形色色工程编码规范、约束和建议,故而在此阶段性汇总。本系列中所提及和讨论的verilog/sv编码建议以及一些工程的要求只是工作过程所接触和了解内容,非普适性的编码规范,也并不代表个人赞同这些规范,一家之言仅和大家探讨这些建议原因和得失。
本系列的前十一篇请参见:为什么要求不在RTL中使用always为什么避免在RTL中滥用宏定义为什么避免在RTL中使用task为什么在设计中优先使用无复位寄存器为什么RTL中避免使用#delay引入延迟
为什么自研代码的filelist避免-y和-v索引为什么RTL中避免使用casez/casex为什么RTL中要谨慎for循环为什么RTL中谨慎使用function
为什么RTL中时钟复位信号避免和逻辑信号耦合为什么RTL中不同版本的语法避免混用[/ol]这篇作为系列的终结篇吧,正好有始有终。因为严格来说这个编码规则是最开始接触交付时记下来的,完整的说法就是:作为独立综合和交付单元的harden block顶层是不能有parameter的,推荐为常数。后面轮到我跟其他人解释这个原则的时候,突然想到为什么要这么做呢?这样做的道理是什么呢?这也可能是我动手写这个系列的萌芽吧。一般来说一颗芯片由定到底会划分很多层次,比较典型的划分是chip - system - sub_system - block - unit,对应验证的层次呢就是top - sys - sst - bt - ut。这个划分有什么具体的标准么?一般是以功能进行划分,比如PCIE一般作为system进行集成,其中的数据通路可以划分为一个sub_system,处理AXI接口的模块划分为block。当然这个划分并不绝对,除非成熟的IP和芯片,否则很大程度取决于架构与设计人员对代码和规模的把控(所以之前就在想,一个系统里怎么划分子系统数量是合理的)。

那么harden blcok处在哪一层呢?这个其实比较模糊,因为之前说的等级是按照功能来划分的,而harden block是按照“规模”来进行划分的。因为RTL代码经过编译、综合和布局布线等诸多流程之后是要以网表和版图的形式向后交付的,而随着芯片的规模越来越大,如果把所有整个芯片放在一个网表里做,DC综合时间和布局布线时间将会极大(以月计),这根本不可能接受。因此需要分块进行综合之后再将分块的网表“拼”在一起,这个块就是harden block。
所以多大的面积值得分出来一块呢?这个事实上我不是很确定,只知道典型值是200万上下的cell count作为一个harden block是比较合理的值,太大了还是会有时间和工作量的问题,太小了则不值得单独来做。显然,harden block的面积不存在下限,只要项目经理不打人,你一个cell做一个harden都行后端都得感谢你一天。那么上限大概是多少呢?经过之前一次与后端的极限拉扯,感觉上限大约在280万左右,因为当时我把一个300万的harden交给后端他不让我回去过年,必须裁到260万才放我回去的。所以我感觉如果压一压后端,大概能压到280万的。
回归正题,为什么harden block顶层为什么不能有参数?应该是harden block作为一个单独综合和交付的网表,其本身应该是一个硬化的确定的网表结构,而顶层参数的存在与“确定的网表结构”相违背,因为大家都清楚,一个系统如果传参不同那么就等价于两个系统。所以,harden block的顶层是不能有外部可改配的参数的。
最后,针对这个问题询问了大模型:
在芯片设计中,参数通常用于指定RTL(Register Transfer Level)代码中的常量或配置选项。在综合阶段,参数在编译时被解析和分配,并在运行时保持不变。然而,在综合后的硬化网表中,参数被替换为具体的值,且不再具有参数化的特性。
当硬化顶层包含参数时,这些参数无法在硬化网表中被具体化,因为硬化网表是固定的、预先编译好的。因此,综合工具会报错或忽略这些参数定义,因为它们在硬化后没有实际意义。
为了在综合后的硬化网表中使用参数,需要在综合阶段将参数值固化到RTL代码中,并生成对应的网表。这种方式可能需要进行多次综合和优化,因为参数的不同值可能导致不同的优化结果。一旦参数值确定,综合工具可以将参数替换为具体的常量值,并生成最终的硬化网表。
好的,这个系列就暂时先更到这里吧,如果之后有新的补充再继续更新学习到的新内容。最近忙于交付也没有继续积累什么内容,所以接下来的一段时间把之前做几个月systemc建模记下来的单人入门教程发一发好了。

系列文章入口【芯片设计】SoC 101(一):绪论【芯片设计】FIFO漫谈(零)从无处不在的FIFO开始说起【芯片设计】计算机体系结构(一)虚拟内存【芯片设计】深入理解AMBA总线(零)绪论
【芯片设计】握手协议的介绍与时序说明【芯片设计】复位那些小事 —— 复位消抖【芯片设计】快速入门数字芯片设计(一)Introduction【芯片验证】UVM源码计划(零)下定决心读源码前的自测环节
【芯片设计】异步电路碎碎念(一) 到底什么是异步电路
【芯片设计】从RTL到GDS(一):Introduction
【芯片设计】系统中的可维可测状态记录寄存器设计
【芯片设计】偶遇编码建议(一)为什么RTL中避免使用task

其他文章链接【芯片验证】sva_assertion: 15道助力飞升的断言练习【芯片验证】可能是RTL定向验证的巅峰之作【芯片验证】RTL仿真中X态行为的传播 —— 从xprop说起【芯片验证】年轻人的第一个systemVerilog验证环境全工程与解析
【芯片设计】verilog中有符号数和无符号数的本质探究
【芯片设计】论RTL中always语法的消失术
【芯片设计】代码即注释,注释即代码
【芯片设计】700行代码的risc处理器你确实不能要求太多了
入职芯片开发部门后,每天摸鱼之外的时间我们要做些什么呢
如何计算系统的outstanding 和 burst length?
芯片搬砖日常·逼死强迫症的关键词不对齐事件
熟人社会里,一群没有社会价值的局外人

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条


联系客服 关注微信 下载APP 返回顶部 返回列表