Memory 选型流程与决策 skill。指导 agent 完成从约束收集→候选生成→PPA 分析→Pareto 筛查→输出结构化选型报告的完整流程,最终必须给出有明确首选的决策建议。 命中以下任意一条场景即必须加载(不要等用户明确说"Memory 选型"才加载): 用户提到 Memory 选型、SRAM 候选、SRAM 比较、Memory 选型、内存 IP 选型; 提到 TCC、TCQ、Min Pulse Width 约束;需要拆分 SRAM(深度或宽度拆分); 需要在 SRAM 和寄存器/Flop 之间做选择;需要估算 SRAM 面积或功耗; 提到 SRAM 库、SRAM Compiler、SVT/LVT/ULVT、高密度/高性能/Cache 型 SRAM; 需要为 RTL Block 或 IP 做 Memory 容量规划或 PPA 分析; 提到 SRAM 拆分策略、IR Drop 与 SRAM 尺寸、PG Mesh 对 Memory 的影响—— 凡涉及上述任何一个场景,均应主动加载本 skill。
name mem-selection description Memory 选型流程与决策 skill。指导 agent 完成从约束收集→候选生成→PPA 分析→Pareto 筛查→输出结构化选型报告的完整流程,最终必须给出有明确首选的决策建议。 命中以下任意一条场景即必须加载(不要等用户明确说"Memory 选型"才加载): 用户提到 Memory 选型、SRAM 候选、SRAM 比较、Memory 选型、内存 IP 选型; 提到 TCC、TCQ、Min Pulse Width 约束;需要拆分 SRAM(深度或宽度拆分); 需要在 SRAM 和寄存器/Flop 之间做选择;需要估算 SRAM 面积或功耗; 提到 SRAM 库、SRAM Compiler、SVT/LVT/ULVT、高密度/高性能/Cache 型 SRAM; 需要为 RTL Block 或 IP 做 Memory 容量规划或 PPA 分析; 提到 SRAM 拆分策略、IR Drop 与 SRAM 尺寸、PG Mesh 对 Memory 的影响—— 凡涉及上述任何一个场景,均应主动加载本 skill。 Memory 选型 Skill 本 skill 指导 agent 完成一次完整的 Memory 选型,最终输出结构化的选型分析报告。 选型过程分为五个阶段,按顺序执行,每阶段均有明确输出;不要跳过任何阶段。 第一阶段:收集输入约束 在开始之前,必须先从用户或设计文档中收集下列必要信息,不足时主动询问: 输入项 说明 目标时钟频率 SRAM 所在 Clock Domain 的频率(MHz / GHz),以及是否有 MCP 或分频 SRAM 规格 深度(depth)× 宽度(width),单位 bit 访问模式 单口只读、单口读写、一读一写(1R1W)、多读多写,等等 工艺节点(可选) 用于参考组合逻辑延迟基准值;不提供时使用保守估算 可用 SRAM 库 供应商提供的类型列表(如:高密度、高性能、Cache 型等)及其各类型下的 PPA 数据 PPA 优先级 三个维度(性能、功耗、面积)中用户最关注的是哪个;有无硬性 area/power budget 后续电路估算 必须查阅 RTL ,找到 SRAM data_out 的直接消费者,追踪到第一个 always_ff 捕获触发器,计算中间所有 assign / always_comb 逻辑的级数,并用一句话描述这段逻辑在做什么(如"1 级 2:1 MUX,选择来自不同 Bank 的输出")。若 RTL 不可用,不得凭空猜测级数,改用 默认值:T_combo = 25% × T_clk 。 第二阶段:建立双层 Timing 约束 Timing 约束不是一刀切的硬性门槛,而是分为 保守约束 和 乐观约束 两层: 保守约束 :留足 PD 余量,是希望"通常情况下能满足"的目标值。绝大多数选型应优先在这个范围内寻找候选。 乐观约束 :余量最小,是"在面积或功耗有巨大收益时,PD 可以争取的极限值"。只有当保守范围内找不到合适候选,或 PPA 收益足以说服 PD 接受更紧的 Timing 时,才在乐观范围内选型。 分别计算两组约束,都记录进报告,后续决策基于两层区间进行分类。 2.1 TCC 约束 公式: 保守约束 : TCC_max = T_clk × (1 - 20%) (留 20% 百分比余量) 乐观约束 : TCC_max = T_clk - 80 ps (仅扣除固定 80 ps 绝对余量) 注意,频率极高时,保守约束也要大于 100 ps 的绝对下限,否则 PD 无法实现。 示例(1 GHz,无 MCP): 保守:TCC_max = 800 ps 乐观:TCC_max = 920 ps 2.2 TCQ 约束 公式: TCQ_max = N / f_clk - T_combo - T_PD_margin T_combo :SRAM data_out 到捕获触发器之间的组合逻辑延迟 获取方式(强制要求) :必须查阅 RTL,追踪 data_out 到第一个 always_ff ,统计中间所有逻辑级数,并用一句话描述该逻辑的功能(例如:"1 级 2:1 MUX,从多 Bank 读结果中选一路")。 RTL 不可用时(默认) : T_combo = 25% × T_clk (即在 1 GHz 下默认 250 ps,在 1.5 GHz 下默认 167 ps)。使用默认值时须在报告中明确注明"后级逻辑未查 RTL,采用默认 25% 周期估算"。 ⚠️ 禁止行为 :不得在未查 RTL 且未说明的情况下自行猜测逻辑级数(例如"假设 3 级逻辑 ≈ 75 ps"属于禁止做法)。 保守约束 :T_PD_margin = 总周期的 15% 乐观约束 :T_PD_margin = 总周期的 7%(不额外留 PD 余量,要求 PD 精细实现) 示例(1 GHz,RTL 确认后级为 1 级 MUX ≈ 25 ps): 保守:TCQ_max = 1000 - 25 - 150 = 825 ps 乐观:TCQ_max = 1000 - 25 - 70 = 905 ps 示例(1 GHz,RTL 不可用,采用默认 25% = 250 ps): 保守:TCQ_max = 1000 - 250 - 150 = 600 ps 乐观:TCQ_max = 1000 - 250 - 70 = 680 ps 2.3 Min Pulse Width 约束 公式: MinPW_min = (0.5 / f_clk) - Jitter_margin Jitter_margin 与频率无关,是常量扣减 保守约束 :Jitter_margin = 100 ps 乐观约束 :Jitter_margin = 60–80 ps(极限高性能设计) SRAM 的 Min Pulse Width 规格须 小于 MinPW_min(SRAM 要求的最小脉宽不得超过实际可用脉宽) 示例(1 GHz): 保守:MinPW_min = 500 - 100 = 400 ps(SRAM MinPW 规格须 < 400 ps) 乐观:MinPW_min = 500 - 70 = 430 ps 第三阶段:生成候选列表 3.1 SRAM 类型候选 ⚠️ 强制要求:必须穷举 predictor 支持的所有类型,不得主观跳过任何一种。 在生成候选前,先向 predictor(或库文档)查询当前可用的 SRAM 类型完整列表,然后对 列表中的每一种类型 逐一判断:当前 SRAM 规格(深度 × 宽度)是否在该类型的有效范围内。凡是能容纳目标规格的类型, 均须纳入候选 ,不得因"直觉上不适合"或"这是 Cache 型、不用于通用 SRAM"等主观理由跳过。 典型错误:只考虑名称看起来"通用"的 spsram 系列,而跳过 l1cache、hdspsbsram 等专用类型。这些类型在特定规格下可能比通用类型快 100–200 ps,是关键候选。 对每种纳入候选的类型,再展开阈值电压变体(SVT / LVT / ULVT),形成基础候选集。 不做强制淘汰 :无论 Timing 是否满足,先保留所有候选,后续按双层约束打标签分类。标签规则: 🟢 保守区 :TCC、TCQ、MinPW 全部 满足保守约束 🟡 乐观区 :不满足保守约束,但全部满足乐观约束 🔴 不可行 :连乐观约束都无法满足(即 Timing 从物理上无法达到目标频率) 3.2 拆分方案候选 对每种 SRAM 类型,进一步枚举拆分方案: 深度拆分规则: 只允许 2 的幂次拆分(除以 2、4、8、16) 绝不做非 2^N 的深度拆分 每次深度拆分后,重新检查 TCC / TCQ / MinPW 是否仍满足(拆分后有改善,但须加上外部 Routing 延迟估算,见 §3.3) 宽度拆分规则: 支持 BitEn 时,可以任意份数拆分(2、3、4、5…均可) 宽度拆分对 PD 更友好(各分片输出独立接后级 FF,无 Mux 开销) 拆分搜索策略(快速抽样 → 择优停止 → 细化迭代): 第零步(前置评估): 在枚举前,先估算"不拆分"候选与保守约束的 Timing 差距: 差距 ≤ 1 个拆分层级可覆盖 (经验:单次深度或宽度拆分约可改善 10–30%):进入常规逐步枚举 差距较大(需多级拆分才能满足) :跳过逐步枚举,进入快速抽样模式 快速抽样模式(Timing 差距大时): 在深度方向和宽度方向各选几个稀疏锚点(例如:深度 ÷2、÷8;宽度 ×2、×4)并行估算 Timing 根据抽样结果找到 Timing 开始满足约束的大致区间(例如:"÷4 附近开始进保守区") 仅在该区间内做细粒度枚举(例如:÷4 与 ÷8 之间的中间点,或组合拆分变体) 两个方向的抽样须同步进行,找到各自的满足区间后再做组合拆分 ⚠️ 阶跃边界注意 :SRAM Compiler 的深度和宽度均存在离散阶跃(例如深度 256→512→1024,宽度 8→16→32),跨越阶跃边界时 SRAM 内部微架构可能发生变化,导致 TCC/TCQ/面积出现 阶段性跳变 (不是线性改善)。抽样锚点须覆盖这些边界附近的规格点,防止在两个锚点之间的阶跃处存在显著 PPA 收益未被发现。 常规逐步枚举(Timing 差距小时): 第一轮 :深度拆分与宽度拆分 并行枚举 ,不分主次 停止条件 :出现满足保守约束(🟢)且 PPA 可接受的候选 → 停止 第二轮 (若不够好):枚举深度 × 宽度组合,出现可接受候选则停止 第三轮 (若仍不够好):对前沿候选再做更深/更宽一轮 ⚠️ 不得假设"拆深比拆宽好" 。两个方向须始终同等优先级搜索。 3.3 拆分后 Timing 修正 拆分的 SRAM 预测器结果不能直接用,需叠加以下额外延迟: 额外开销 来源 估算方式 深度 Mux 组合逻辑 Standard Cell 实现深度 Mux 每拆一层约 10–20 ps,可忽略 深度方向 Routing 延迟 两颗 SRAM 走线汇聚 悲观估计:SRAM 高度方向的 Routing 延迟,通常几十 ps;PPA 极紧时须精确估算 扇出(Address 信号) Address 同时驱动多颗 SRAM 以 Timing 分析工具或估算方式验证扇出 Timing 修正后的有效 TCQ = 预测 TCQ + Routing 延迟,用此值参与约束对比。 3.4 面积修正 拆分后的面积 ≠ 单颗面积 × 颗数,须加上以下开销: 间距面积 :两颗 SRAM 中间的走线通道宽度(按 PD 经验估算:每 1000 根线的间距宽度 × 出 Pin 数) 保守估计(无 Floorplan 时):留 10 µm 通道 若 SRAM 够"瘦"可紧邻摆放(间距约 1 µm),则可按乐观估计 Halo 影响 :每颗 SRAM 周围约 1 µm Halo,多颗时重复计算 将修正后面积列为候选 SRAM 的"等效面积"参与排名。 第四阶段:PPA Trade-off 分析与决策 4.1 候选汇总与标注 对所有候选汇总以下指标,并标注其约束区间(🟢/🟡/🔴): 指标 说明 TCC 实际值;与保守/乐观约束对比 TCQ(修正后) 实际值;与保守/乐观约束对比 Min Pulse Width 实际值;与保守/乐观约束对比 等效面积 含拆分间距的修正面积 静态功耗 拆分越多越差 动态功耗 略差 约束区间 🟢保守 / 🟡乐观 / 🔴不可行 4.2 Pareto 支配筛查 用 Pareto 支配完成候选集降维;之后由 agent 对 Pareto 前沿做叙述性分析并给出决策。 Step 1:Pareto 支配淘汰 对所有 非🔴 候选,逐对检查支配关系: 若候选 B 在 每个维度 (TCC、TCQ、MinPW、等效面积、静态功耗)上都不优于 A,且 至少一个维度 明确劣于 A,则 B 被 A 支配,B 是 Pareto 劣解,直接淘汰。 比较时须注意方向: TCC、TCQ:越小越好 MinPW 规格值:越小越好(SRAM 要求更低,余量越多) 等效面积:越小越好 静态功耗:越小越好 Pareto 淘汰不需要任何权重,是纯数学意义上的"在某候选存在的情况下,这个候选没有任何理由被选择"。 Step 2:约束区间优先级 Pareto 前沿内部,优先考虑🟢保守区候选。若保守区有多个前沿候选,带入 §4.6 路径 A 决策;若保守区 Pareto 前沿为空,才考虑🟡乐观区候选,带入路径 B。 Step 3:agent 叙述性分析 对剩余 Pareto 前沿候选(通常 2–6 个),agent: 明确各候选的核心优势和代价 ,例如:"C3 面积比 C1 小 18%,但 TCQ 余量仅 20 ps(处于乐观区),需要 PD 精细实现才能达到目标频率。" 结合用户 PPA 优先级 ,说明在当前上下文下,面积的 18% 提升是否值得承担 Timing 风险。 识别上下文敏感的关键分岔点 ,例如:"如果整颗 die 面积已超预算,C3 值得认真考虑;如果面积还有余量,C1 的 Timing 余量更安全。" 4.3 拆分对 PPA 的一般规律 使用下表辅助决策,避免陷入局部最优: PPA 维度 拆分后趋势 静态功耗 恶化(外围电路重复) 动态功耗 略微恶化 面积 同类型下越拆越大 TCC / TCQ 提升,但提升量不超过对数量级;跨 SRAM 微架构阈值时提升更大 拆分提升 Timing 但恶化面积和功耗——只有当 Timing 瓶颈无法通过换类型解决时,才把拆分作为主要优化手段。 4.4 容量阈值:SRAM vs. 寄存器 若尚未判断是否应改用寄存器(Flop),在此阶段确认: 容量 建议 < 2 Kbit 优先使用寄存器 2–4 Kbit 通常寄存器仍占优;仅在 PPA 要求低、最高密度 SRAM 时才考虑 SRAM
4 Kbit SRAM 开始有优势 2 KByte(16 Kbit) 寄存器可排除,直接选 SRAM 多读多写(缺专用 Compiler) 优先寄存器,无论容量大小 4.5 PG / IR Drop 约束(次级约束) 选型时还需关注 SRAM 的物理尺寸是否会造成 IR Drop 问题。参考准则: SRAM 单颗的长边或短边建议不超过 100 µm(先进制程参考值,视制程调整) 若必须超出,需提前与 PD 确认通道宽度和 Buffer 覆盖能力 4.6 决策原则 完成 Pareto 筛查和 agent 叙述性分析后,按以下路径给出最终决策建议: 路径 A(正常情况):保守区 Pareto 前沿非空 在🟢保守区 Pareto 前沿候选中,结合用户 PPA 优先级做叙述性分析,给出首选 若乐观区存在某候选,其面积或功耗比保守区首选 显著更优 (差距 > 15% 作为参考阈值),则在报告中单独列为"激进优化备选",并明确说明需与 PD 协商放宽 Timing 余量的具体幅度 在保守区前沿中选 1 个次优候选作为普通备选 路径 B(Timing 压力大):保守区 Pareto 前沿为空,乐观区有候选 在🟡乐观区 Pareto 前沿候选中做叙述性分析,给出首选,报告中必须明确标注需与 PD 协商的 Timing 余量具体数值 同时评估:是否可通过系统手段(引入 MCP、分频、减少后级组合逻辑级数)将设计拉回保守区 路径 C(所有候选均不可行) 从所有候选中选出 Timing 最接近乐观约束的候选作为 条件性首选 明确说明选用此候选的前提条件(例如:需降低目标频率 X MHz / 引入 N-cycle MCP / 缩减后级组合逻辑至 Y ps / 与 PD 协商放宽 Timing 余量至 Z ps) 仍须输出一个明确的决策方案 ,给出最可行的系统级调整路径及对应的 SRAM 首选 通用原则(各路径均适用): agent 在任何情况下都必须给出一个明确的首选决策 ——即使约束无法完全满足,也须给出条件性首选,而非只列出问题 同等条件下优先拆分颗数少的候选(实现复杂度更低) 最终输出:1 个首选 + 1–2 个备选,每个均说明适用场景和与首选的 trade-off 第五阶段:输出选型分析报告 完成分析后,输出以下结构的报告: 选型分析报告模板
| 参数 | 保守约束值 | 乐观约束值 |
|---|---|---|
| TCC_max | XXX ps(margin=20%) | XXX ps(margin=0%) |
| TCQ_max | XXX ps(PD margin=10%) | XXX ps(PD margin=0%) |
| MinPW_min(SRAM 规格需小于此值) | XXX ps(Jitter=100ps) | XXX ps(Jitter=70ps) |
| 候选 ID | 类型 | 拆分方式 | TCC(ps) | TCQ修正(ps) | MinPW(ps) | 等效面积(µm²) | 静态功耗(µW) | 约束区间 | Pareto 状态 |
|---|---|---|---|---|---|---|---|---|---|
| C1 | ... | 不拆分 | ... | ... | ... | ... | ... | 🟢/🟡/🔴 | 前沿/被支配 |
| C2 | ... | 深度÷2 | ... | ... | ... | ... | ... | 🟢/🟡/🔴 | 前沿/被支配 |
| ... |
[对比各候选的 PPA,指出关键 trade-off,说明哪些候选在特定维度上有优势]
[说明各前沿候选的核心优势与代价,以及它们之间的关键 trade-off]
[说明当前面积估算中哪些是悲观估计,以及完成 Floorplan 后需要重新验证的项目] 附录:常见决策场景快速参考 场景 建议策略 Timing 卡得很紧,面积不重要 优先高性能类型,考虑深度拆分 面积预算紧张,Timing 有余量 高密度类型,不拆分或仅宽度拆分 功耗是第一优先级 尽量不拆分,用 SVT 或 LVT 类型 容量很小(< 4 Kbit) 评估寄存器是否更优,先做容量阈值判断 多读多写无专用 Compiler 寄存器方案,不选 SRAM Timing 余量充足但面积超标 考虑切换到更高密度类型 拆分后 Timing 改善不明显 换用更快类型,而非继续拆分 迭代注意事项 Memory 选型与 Floorplan 天然是迭代关系。首次选型可用悲观面积估计,完成初版 Floorplan 后再回来修正并确认。 当前阶段不需要纳入 DFT Mux 数量的额外开销,遇到 DFT 问题后再迭代。 若 SRAM 库变化(增加新类型)或设计频率调整,须重新执行全流程。 SRAM 深度和宽度存在离散阶跃 :每种 SRAM 类型的深度和宽度均有固定档位(如深度 256/512/1024/2048,宽度 8/16/32/64),跨档时内部微架构可能变化,导致 TCC、TCQ、面积出现阶段性跳变而非线性改善。在拆分搜索和候选 Memory 选型时,须确保采样覆盖了各档位边界附近的规格点,避免漏掉跨档带来的显著 PPA 收益。