芯片上80%的晶体管,可能只服务于20%的使用场景。
芯片研发周期动辄1到3年,这意味着你在2026年立项的芯片,可能要到2028年才能流片。这期间市场会变,技术会变,客户的想法更会变。
问题在于,没有客户会陪你耗3年时间反复沟通需求细节。市场调研给你的只是模糊的方向:“我们需要一颗支持xxx协议的芯片,功耗要低。” 具体怎么低?哪些场景下要多低?边界条件是什么?这些问题往往没有明确答案。
于是芯片公司只能自己定义功能。既然不确定用户会怎么用,那就多做几种方案:支持模式A,也支持模式B;可以配置成方式1,也能配置成方式2。这些”也许用得上”的功能,就占据了大量的芯片面积。
还有就是保护电路。芯片必须假设用户会违规操作。
举个实际例子:一颗电源管理芯片,datasheet写明输入电压范围是3.0V~3.6V。但工程师在设计时必须考虑:
- 用户接入了4.5V会怎样?
- 电源突然掉到2.5V芯片能否安全关断?
- 上电时序不对,内部状态机会不会锁死?
// 过压保护逻辑示例 always @(posedge clk or negedge rst_n) begin if (!rst_n) begin ovp_flag <= 1'b0; end else if (vin_voltage > OVP_THRESHOLD) begin ovp_flag <= 1'b1; // 触发过压保护 disable_output <= 1'b1; // 关闭输出 end else if (vin_voltage < OVP_RELEASE) begin ovp_flag <= 1'b0; // 解除保护 end end这段代码对应的电路可能只占芯片0.01%的面积,但它保护的是整个系统的安全。类似的保护机制遍布芯片各处,加起来能占到芯片面积的20%以上。
验证的取舍
典型场景就是那些用户最常用的功能组合。对于一颗通信芯片,典型场景可能是:标准数据率下,常温环境,正常供电条件下的数据收发。这只是芯片全部功能的一小部分,但却是客户拿到芯片后第一时间会测试的内容。
如果这部分都有问题,后续那些高级功能再完美也没意义。这就像盖房子,地基必须先打牢。
仿真资源是有限的。一个验证工程师一天能写的testcase有限,服务器的仿真时间也有限。你必须明确:哪些case跑100遍都不嫌多,哪些case跑一遍意思意思就行。
典型场景的case要覆盖各种corner,要做压力测试,要长时间跑regression。那些非典型功能?验证一下基本逻辑正确就可以了,因为真实使用概率可能不到1%。
这背后体现的是风险管理而非完美主义。芯片设计不追求每个功能都做到极致,而是确保核心价值链不断裂。
那些看似冗余的电路,那些”可能用不上”的功能,它们的存在是为了应对不确定性。但在验证时,你必须放弃面面俱到的幻想,承认资源约束的现实,把有限的子弹打在最要害的位置。