阶段二:综合与时序(07–10)

前提:通过阶段一。工程参考:实际报告解读、SDC、Genus Tcl。本阶段从功能正确走向“在指定模型和边界条件下,电路是否能按时工作”。

07:Liberty 如何连接电路与数字工具

目标和讲解

SPICE 模型描述器件;标准单元 Liberty 描述已经设计好的门和触发器的逻辑、面积、时序弧与其他特性。工具用这些抽象选择实现和计算路径,而不是每次综合都跑晶体管级仿真。

模型信息 电路含义 工具用途
function 输入输出逻辑关系 映射与逻辑判断
combinational timing arc 输入变化到输出变化的延迟 传播 arrival time
clock-to-Q arc 时钟边沿到 Q 响应 数据发射时刻
setup/hold constraint D 相对 CK 的稳定窗口 捕获合法性
input capacitance 输入引脚负载 前级门延迟
output transition 输出斜率 下一级时序查表
operating condition 电压、温度、工艺模型 对应分析角
internal/leakage power 单元内部与静态功耗模型 功耗估算

同一个 NAND2 的延迟不是常数,通常依赖输入 slew、输出负载、输入相关时序弧和上升/下降方向。互连 RC 会进一步改变延迟与波形。不同 PVT 库用于不同条件;不能把“慢角/快角”简单固定成任意温度组合,温度反转等效应需看具体库。

驱动更大的单元常可减小本级输出延迟,但增加前级负载、面积和动态功耗,未必改善整条路径。多级缓冲器和逻辑重构也可能更合适。

练习与验收

解释“输出负载增加 → 延迟与 slew 变化 → 下一级延迟也变化”的链条。到服务器只读查阅教学库的单位和角定义,记录属性名称与数值,不复制库正文到 Git。验收要求说明 MOS 模型、Liberty、LEF 三者不能互相替代。

08:从 RTL 到映射网表

目标和讲解

read_hdl 读取描述;elaborate 展开参数、连接和层次;综合把行为变成逻辑网络;映射将网络实现为库单元;优化在约束下调整结构。

当前 RTL 声明存储位:8+8+8+5+3+2+5=39。网表有 37 个触发器,因为 tx_shift[7] 的保存值从未参与后续输出,rx_shift[7] 的保存值也从未被读取。首个 MOSI 来自 tx_data[7],最终接收结果由旧 rx_shift[6:0] 和当前 miso 形成。

这是可观察行为优化:不是“综合漏了两位”,也不是“RTL 声明多少变量就一定需要多少硬件”。状态编码、常量传播、未使用逻辑和公共逻辑都会改变实际数量。

现有映射结果:37 fflopd、56 inv1、171 nand2、13 nor2,共 277 单元。MUX 和加法比较逻辑可以分解为基础门,因此没有名为 MUX 的单元不代表没有选择功能。教学库面积 440.500 只用于比较当前模型内的实现。

练习与验收

沿 div_count_reg[4] 的 Q→组合逻辑→D 查一条反馈路径,再查 sclk_reg 的 CK 确实连接 clk。检查设计报告无 unresolved、undriven、multidriven;检查 timing intent;核对网表实例与 gates.rpt。

若以后改变 RTL,数量可以变化;判断标准是解释实现而不是机械要求一直等于 37。当前基线的 37 是已验证的参考值。验收要求用代码用途解释两位优化,不能仅引用工具数字。

09:分别计算 setup 和 hold

目标和讲解

先考虑寄存器到寄存器路径,定义 skew=t_capture_clock−t_launch_clock。接收时钟较晚到达,skew 为正。

在简化同频模型中,忽略其他修正项:

setup slack ≈ T + skew − uncertainty_setup
              − t_cq,max − t_data,max − t_setup

hold slack  ≈ t_cq,min + t_data,min
              − skew − uncertainty_hold − t_hold

setup 检查下一次捕获前能否到达;hold 检查本次捕获后是否太早变化。正 skew 通常帮 setup、伤 hold。降低频率通常增加 setup 预算,却不会直接解决同一捕获沿的 hold。

数字例子:T=2 ns,skew=0.1 ns,setup uncertainty=0.1 ns,t_cq,max=0.15 ns,t_data,max=1.6 ns,setup=0.15 ns,则 setup slack=0.10 ns。若 t_cq,min=0.05 ns,t_data,min=0.08 ns,hold=0.05 ns,hold uncertainty=0.02 ns,则 hold slack=−0.04 ns。一个路径可以 setup 通过而 hold 失败。

现有最差报告是输入到寄存器路径,不套用发射 DFF 的 t_cq:20−0.1 setup−0.2 uncertainty−5 input delay−0.461 内部路径=14.239 ns。Genus 本次报告显示 ps:14239 ps=14.239 ns。

通过报告时要依次确认起点、终点、捕获沿、路径类型、单位、约束、cell/net delay、arrival、required、slack。current timing.rpt 是 max/setup 报告;本项目没有已验证的 min/hold 报告,不据此宣称 hold 通过。

练习与验收

手算上述两类 slack。然后保持教学输入预算不变,把周期假想改为 5 ns,估计同一路径 slack,并解释为什么“组合逻辑只有 0.461 ns”仍不足以满足预算。此处是固定路径估算,真实重综合后的路径与延迟可能变化。

10:约束是边界条件,不是消除红字的按钮

目标和讲解

create_clock 给出周期;input delay 表示外部数据相对参考时钟的到达预算;output delay 表示外部接收需要留出的预算;input transition 和 output load 描述驱动与负载;uncertainty 表示模型中保留的时钟裕量。

max/min 分别服务于最晚与最早到达分析。时钟 transition 是 CK 引脚的斜率模型,uncertainty 是时间预算,两者不能混用。

教学 SDC 在 sys_clk 下为 MISO 提供 5 ns 最大输入预算,不完整描述真实的外部 SPI 往返路径。真实 Master 内部采样动作由 clk 边沿产生,而外部从设备看到的是经过 t_cq、输出缓冲和板级传播后的 SCLK。

从上一个 SCLK 下降事件到下一内部 MISO 采样事件,可先写概念性 setup 预算:

半周期预算 H ≥ SCLK 输出传播 + 去程互连
               + 从设备最大 clock-to-output + 回程互连
               + MISO 输入到采样 D 端延迟 + 接收 setup
               + 相对时钟/建模裕量

例子:H=500 ns,各项依次为 2、3、40、3、1、0.1、5 ns,余量为 445.9 ns。这只是给定数字的计算题,不是任何实际器件的保证。若 D=1,H=20 ns,同一组假设已无法满足。首位还要单独预算 CS 到从设备数据有效;hold 要用最小延迟和数据最早变化时刻另算。

为外部源同步接口选择 generated/virtual clock、定义波形与采样沿,需要与实际的内部捕获结构一致。不能仅在 SCLK 端口创建一个时钟,就以为系统时钟捕获的 MISO 已正确建模。

多周期路径用于功能上确实允许较晚捕获的路径;false path 用于确实不参与相应同步检查的路径。异常要有结构、协议和验证依据,并检查 max/min 关系。多周期 setup 异常往往还需相应 hold 处理,但具体数值依赖参考边沿与工具语义,不能照搬口诀。

练习与验收

逐行写出当前 SDC 的物理假设。为一个假想从设备列出 t_CO,max/min、CS 首位延迟、MOSI setup/hold、SCLK 高低宽度、CS setup/hold、板级往返延迟。验收要求能解释 timing intent=0 仅代表当前检查没有发现约束问题,不能证明预算来自真实系统。

阶段验收

解释 37 个触发器与 277 单元;手算 setup 与 hold 并正确判断偏斜方向;列出教学约束与实际器件接口之间的缺口。答案见 07–10 参考。

先写预测,再留下自己的解释

本讲包含 4 课。展开对应课程,保存个人状态和笔记。

07:Liberty 如何连接电路与数字工具记录
阅读本课 →

输入后自动保存在此浏览器。能独立解释并完成课程验收,再标记“已验收”。

08:从 RTL 到映射网表记录
阅读本课 →

输入后自动保存在此浏览器。能独立解释并完成课程验收,再标记“已验收”。

09:分别计算 setup 和 hold记录
阅读本课 →

输入后自动保存在此浏览器。能独立解释并完成课程验收,再标记“已验收”。

10:约束是边界条件,不是消除红字的按钮记录
阅读本课 →

输入后自动保存在此浏览器。能独立解释并完成课程验收,再标记“已验收”。