☰
异步SAR ADC综合失败根因与工程化解决方法
2026/10/20 11:41:58 网站建设 项目流程

1. 为什么综合工具会“看错”你的异步SAR逻辑?

“综合后功能出错”——这行报错信息在数字电路设计流程中,像一道突然亮起的红灯,尤其当它出现在你反复验证无误的异步SAR(Successive Approximation Register)逻辑电路上时,那种错愕感特别强烈。我第一次遇到这个问题是在一个低功耗传感器采集模块里,RTL代码在仿真器里跑得滴水不漏:输入电压变化、时钟边沿触发、逐位比较、寄存器更新,所有波形都严丝合缝。可一旦经过Synopsys Design Compiler综合成门级网表,再用VCS做后综合仿真,结果就完全对不上了——ADC转换值跳变无规律,甚至出现全零或全一的异常输出。

这不是仿真器bug,也不是测试平台写错了。问题出在综合工具对“异步”二字的理解上。绝大多数综合工具默认工作在同步设计范式下:它假设所有寄存器由同一个全局时钟驱动,所有组合逻辑的输出在时钟有效沿到来前已稳定,所有路径延迟都在时序约束覆盖范围内。而SAR逻辑的核心恰恰是跨时钟域的异步采样与反馈控制——比较器输出(异步模拟前端信号)直接作为下一位DAC权重调整的决策依据,这个信号不经过任何同步器,也不等待时钟;它的到达时间完全取决于模拟比较器的响应延迟,可能比主时钟快,也可能慢半个周期。综合工具看到这段逻辑,第一反应不是“这是有意为之的异步控制流”,而是“哦,这里有个未约束的组合环路/未声明的异步输入/未建模的延迟路径”,于是它开始“优化”:把本该保留的锁存器合并掉、把关键路径上的缓冲器删掉、把看似冗余的扇出逻辑剪掉……最终生成的网表,物理上已经无法复现原始RTL所描述的时序行为。

更隐蔽的是,这种错误往往不报时序违例(Timing Violation)。因为综合工具根本没把它当“时序路径”来分析——它把比较器输出当作一个普通组合逻辑输入,而忽略了其本质是来自另一个时序域(模拟域)的异步事件。所以你在SDC约束文件里加再多的set_input_delay、set_output_delay,甚至set_false_path,都可能打偏靶心。真正的问题不在“多快”,而在“何时到达”这个不确定性本身未被建模。

提示:当你发现后综合仿真失败,但前仿真完美通过,且错误模式呈现随机性(如某次转换正确、下一次就错)、与输入电压微小变化强相关、或只在特定工艺角(ff/ss)下复现,这几乎就是异步SAR逻辑被综合工具“误伤”的典型症状。

关键词里虽然没填,但这个场景天然绑定三个核心词:异步采样、SAR ADC、逻辑综合。它们共同构成了一条脆弱的链路——模拟世界的连续性,撞上了数字世界的离散时钟节拍,再被综合工具的确定性模型强行“规整”。要解开这个结,不能只盯着代码写得对不对,得先理解综合工具的“认知边界”在哪里。

2. 综合工具的三大认知盲区:它到底“看不见”什么?

综合工具不是万能的上帝视角,它是一套基于明确规则和有限模型运行的程序。当面对异步SAR逻辑时,它的“看不见”不是疏忽,而是设计哲学决定的必然局限。我把这些盲区拆解为三个相互关联的层面,每个都对应着一类高频出错根源。

2.1 盲区一:异步输入的本质——它不认为“比较器输出”是个需要特殊建模的信号

在标准数字设计流程中,input端口默认被综合工具视为同步于某个参考时钟的信号。即使你写了input comp_out;,工具也默认它会在时钟上升沿采样。但SAR ADC里的比较器输出comp_out,本质是一个电平敏感的异步事件信号:它在模拟电压越过参考阈值的瞬间翻转,这个时刻与数字主时钟完全无关。综合工具看到comp_out驱动了一个D触发器的D端,第一反应是:“哦,这是个普通数据输入,我按建立/保持时间去优化路径就行。” 它不会主动去想:“这个信号的翻转时刻可能比时钟早1ns,也可能晚3ns,它的抖动范围远超工艺库标称的setup/hold窗口。”

后果是什么?工具会大胆地:

  • 删除你为稳定comp_out毛刺而特意加的两级缓冲器(认为它们是冗余延迟);
  • 将comp_out扇出到多个寄存器的路径进行逻辑复制(认为能提升性能),却导致不同路径延迟差异放大,使本该同时采样的信号在物理上错开;
  • 对comp_out参与的组合逻辑(如与门判断是否继续逼近)进行常量传播优化,如果某次仿真中comp_out恒为0,它甚至可能把整个分支逻辑“优化掉”。

注意:你无法通过set_ideal_network或set_dont_touch简单粗暴地保护comp_out相关逻辑。前者会让工具忽略所有延迟,后者则可能阻断必要的时序优化,导致其他路径违例。真正的解法是让工具“理解”这个信号的异步属性。

2.2 盲区二:隐式状态机的时序闭环——它把反馈环路当成了“组合环路”

SAR逻辑的核心是一个逐位逼近的状态机:当前位决定下一位的DAC权重,下一位的比较结果又决定再下一位……这个过程形成一个严格的时序闭环。RTL里你可能用always @(posedge clk) begin ... if (comp_out) next_bit = 1'b1; else next_bit = 1'b0; end来描述,看起来是干净的同步时序。但综合工具在展开这个逻辑时,会看到next_bit的赋值依赖于comp_out,而comp_out又来自上一级DAC和比较器——这个路径跨越了模拟/数字边界,其延迟无法用标准单元库精确建模。

更麻烦的是,当next_bit被用于生成新的DAC码并反馈给比较器时,工具会检测到一条从next_bit输出,经DAC逻辑、比较器模型(如果有的话)、再到comp_out输入的路径。在它眼里,这很可能被识别为一个未经声明的组合环路(Combinational Loop)。标准做法是报错并终止综合。但如果你为了过综合,加了set_disable_timing或set_false_path去“屏蔽”这条路径,就等于告诉工具:“别管它,随便优化”。结果就是,工具可能把DAC权重计算逻辑中的关键寄存器移除,或者将比较器输入端的同步逻辑简化,彻底破坏逼近过程的时序确定性。

2.3 盲区三:工艺角与PVT变异下的延迟漂移——它用标称值代替真实世界

综合工具使用的标准单元库(.lib)提供的是在典型(Typical)、快(Fast)、慢(Slow)工艺角下的延迟模型。但SAR ADC的成败,往往卡在最坏情况下的建立/保持时间裕量上。例如,在SS(Slow-Slow)工艺角下,数字逻辑变慢,而模拟比较器的响应速度受温度影响更大——高温下它可能变快,低温下变慢。综合工具用SS角下的数字延迟,去匹配一个未建模的、随温度漂移的模拟延迟,得到的时序分析结果完全是失真的。

我们曾在一个项目中发现:在FF(Fast-Fast)角下,后综合仿真100%通过;但在SS角下,错误率飙升至30%。调试发现,问题出在comp_out到达第一个采样寄存器的时间点。FF角下,数字路径延迟短,comp_out总能在时钟沿前稳定;SS角下,数字路径变长,而比较器在低温下响应变慢,两者叠加,导致comp_out的有效边沿恰好落在了建立时间窗口之外。工具的静态时序分析(STA)报告里,这条路径显示“no violation”,因为它只用了SS角下的数字延迟,却没把比较器的低温慢速特性作为变量纳入计算。

这三个盲区不是孤立的。它们像三把锁,共同锁死了异步SAR逻辑在综合阶段的可靠性。要打开它,不能靠单点突破,必须构建一套覆盖信号建模、环路处理、时序验证的完整方法论。

3. 信号建模:如何让综合工具“看见”那个异步的比较器输出?

既然综合工具默认把comp_out当普通同步输入,那我们就得主动给它“贴标签”,用它能理解的语言,明确定义这个信号的异步本质。这不是hack,而是遵循EDA工具的设计规范。核心思路是:用标准的异步接口建模方法,替代模糊的直连方式。我推荐两种经过量产项目验证的方案,各有适用场景。

3.1 方案A:显式异步FIFO接口(推荐用于高可靠性要求)

这是最“正统”也最鲁棒的方法。你不让comp_out直接驱动SAR状态机,而是先经过一个微型异步FIFO(深度为2即可)。FIFO的写时钟(wr_clk)接比较器的输出边沿检测电路(用一个高速时钟采样comp_out,生成单周期脉冲),读时钟(rd_clk)接SAR的主时钟。这样,comp_out的异步事件就被安全地“捕获”并同步到主时钟域,后续所有逻辑都运行在纯净的同步环境中。

关键实现细节:

  • 写时钟域:你需要一个比主时钟快得多的采样时钟(如主频的4倍),用两级触发器对comp_out进行同步采样,再用边沿检测逻辑(comp_out_sync ^ comp_out_sync_d1)生成写使能脉冲。这个采样时钟必须独立于主时钟,且频率足够高以覆盖比较器最大翻转速率。
  • FIFO结构:深度2足够,因为SAR逻辑每周期只处理一个比较结果。使用双端口RAM或移位寄存器实现,重点是读写指针的格雷码编码,避免跨时钟域指针采样错误。
  • 综合约束:对FIFO的两个时钟域,必须添加set_clock_groups -asynchronous -group {wr_clk} -group {rd_clk}。这是最关键的一步,它告诉工具这两个时钟域之间没有确定的相位关系,禁止任何跨域的时序分析和优化。同时,对FIFO的输入/输出端口,用set_input_delay -clock wr_clk和set_output_delay -clock rd_clk分别约束。

这个方案的优势在于:它把最难搞的异步问题,转化成了EDA工具最擅长处理的“异步时钟域交互”问题。所有主流综合工具(DC, Genus)和STA工具(PrimeTime)都有成熟的支持。我们在某医疗设备的16位SAR ADC项目中采用此方案,后综合仿真错误率为0,且在SS/FF/TT所有工艺角下均通过。

3.2 方案B:带延迟锁定的同步器+时序例外(推荐用于资源敏感型设计)

如果芯片面积或功耗极其敏感,无法承受FIFO的额外逻辑,可以采用更精巧的同步器方案,但必须辅以严格的时序约束。

  • 两级同步器是底线:comp_out必须先经过至少两级D触发器(sync_reg1,sync_reg2),两者的时钟都是SAR主时钟。这是防止亚稳态传播的物理定律,不可省略。
  • 关键创新:插入可控延迟单元:在comp_out到第一级同步器的D端之间,插入一个可配置的延迟单元(如Xilinx的IDELAY或ASIC中的delay_cell)。这个延迟单元的作用,是强制拉长comp_out到达第一级触发器的时间,确保它总在建立时间窗口内稳定。其延迟值需根据最坏工艺角(SS)和最低温度下的比较器最大响应时间来设定。
  • 时序约束组合拳:
    1. set_false_path -from [get_ports comp_out] -to [get_pins sync_reg1/D]:告诉工具,不要分析comp_out到sync_reg1/D这条路径的时序,因为它的延迟由外部模拟器件决定,不可控。
    2. set_max_delay -from [get_pins sync_reg1/Q] -to [get_pins sync_reg2/D] -datapath_only 1.5:对同步器内部路径设置最大延迟,确保亚稳态有足够时间衰减。
    3. set_multicycle_path -setup 2 -from [get_pins sync_reg2/Q] -to [get_pins sar_state_machine/next_bit]:因为同步后的信号要等到下一个时钟周期才被SAR逻辑使用,所以设置2周期的建立时间约束,避免工具过度优化。

这个方案节省了面积,但调试成本更高。你需要用SPICE仿真比较器在SS/FF/TT角下的响应时间分布,再结合工艺库的触发器参数,手工计算出IDELAY的最佳值。我们曾在某物联网传感器SoC中用此方案,最终IDELAY设为80ps,在-40°C到125°C全温域内稳定工作。

提示:无论选哪种方案,“让工具看见”只是第一步。你必须在综合脚本中显式调用这些约束,并在综合日志里确认它们被正确加载(搜索Reading SDC file和Applied constraint)。我见过太多项目,约束文件写得漂亮,但综合时忘了read_sdc,结果白忙一场。

4. 环路处理:如何安全地“打开”SAR的时序闭环?

SAR逻辑的逐位逼近环路,是它的灵魂,也是综合工具的眼中钉。直接告诉工具“这是个环路,别动它”,只会让它报错或乱优化。正确的策略是:把隐式的、跨域的环路,重构为显式的、工具可理解的同步状态机。这需要在RTL编码习惯和综合策略上做双重改变。

4.1 RTL层面:用“时钟使能”替代“条件触发”,切断隐式环路

很多初学者写的SAR RTL是这样的:

always @(posedge clk) begin if (start) begin bit_cnt <= 0; sar_reg <= 0; end else if (bit_cnt < N) begin if (comp_out) sar_reg[bit_cnt] <= 1'b1; else sar_reg[bit_cnt] <= 1'b0; bit_cnt <= bit_cnt + 1; end end

问题在于comp_out直接参与了sar_reg的赋值条件。综合工具在分析sar_reg[bit_cnt]的驱动逻辑时,会追溯到comp_out,进而追溯到DAC输出,再追溯到比较器输入……形成一个它无法解析的环路。

改造后的写法,核心是引入时钟使能(clock enable)和预计算:

// 预计算:在每个时钟周期,无论comp_out如何,都计算出下一位的候选值 wire next_bit_candidate = (comp_out) ? 1'b1 : 1'b0; // 主状态机:用清晰的state编码,每个state对应一个固定操作 always @(posedge clk or negedge rst_n) begin if (!rst_n) begin state <= IDLE; bit_cnt <= 0; sar_reg <= 0; end else begin case (state) IDLE: if (start) begin state <= SAMPLE_BIT0; bit_cnt <= 0; sar_reg <= 0; end SAMPLE_BIT0: begin sar_reg[0] <= next_bit_candidate; // 这里用预计算值 state <= WAIT_COMP; end WAIT_COMP: if (bit_cnt < N-1) begin // 等待比较器稳定(加几个cycle) state <= UPDATE_NEXT; end else begin state <= DONE; end UPDATE_NEXT: begin bit_cnt <= bit_cnt + 1; sar_reg[bit_cnt] <= next_bit_candidate; // 再次使用预计算值 state <= WAIT_COMP; end DONE: state <= IDLE; endcase end end

这个改造的妙处在于:

  • next_bit_candidate的计算是纯组合逻辑,只依赖comp_out,不依赖sar_reg或bit_cnt,切断了反馈。
  • 状态机的每个转移都是由clk和state决定的,comp_out只影响“数据”,不影响“控制流”。综合工具能清晰地画出状态转移图,不会把它当环路。
  • WAIT_COMP状态提供了可配置的等待周期,为比较器的建立时间留出裕量,这个周期数可以在SDC中用set_min_delay约束。

4.2 综合策略:用“黑盒”封装模拟前端,隔离不可建模部分

SAR ADC的DAC和比较器,通常是IP形式或定制模拟模块。在数字综合阶段,你绝不能把它们的Verilog行为模型(尤其是含#delay的)放进综合网表。这会导致工具用数字延迟模型去拟合模拟行为,结果必错。

正确做法是:将DAC和比较器定义为黑盒(black box)。在RTL中,只保留它们的端口声明:

module sar_top ( input clk, input rst_n, input start, output reg [N-1:0] adc_code, // 模拟接口,不参与数字综合 inout vref, inout vin ); // DAC instance (black box) dac_core uut_dac ( .clk(clk), .rst_n(rst_n), .dac_code(sar_reg), .vout(vref) ); // Comparator instance (black box) comparator uut_comp ( .vin_p(vin), .vin_n(vref), .comp_out(comp_out) // 这个信号是黑盒输出 ); endmodule

然后,在综合脚本中,用set_dont_use禁用所有与模拟模块相关的单元,并用read_db或read_lib导入DAC/Comp的物理库(.db),但仅用于后续的物理实现(Place & Route),不用于逻辑综合。这样,综合工具眼中,comp_out就是一个来自黑盒的、不可知延迟的输入信号,它不会再试图去“优化”DAC内部逻辑。

最后,对整个SAR模块,添加set_dont_touch [get_cells sar_top],防止工具在顶层优化时打散这个关键模块。这相当于给它画了个“施工禁区”。

5. 时序验证:如何证明你的异步SAR在真实硅片上也能跑?

通过综合只是万里长征第一步。真正的考验,在于后综合仿真和静态时序分析(STA)能否覆盖所有现实世界的不确定性。很多团队在这里栽跟头:综合通过了,STA报告“no violation”,但流片回来的芯片在低温下ADC全乱。

5.1 后综合仿真的黄金法则:必须包含“模拟行为模型”

纯门级网表仿真(Gate-level Simulation)是不够的。你必须把比较器的延迟模型嵌入进去。这不是让你写一个SPICE模型,而是用Verilog-A或简单的Verilog行为模型,模拟其关键特性:

  • 延迟分布:比较器响应时间不是固定值,而是一个范围。可以用$random函数模拟:

    // 比较器行为模型(简化版) module comparator ( input vin_p, vin_n, output reg comp_out ); real delay_min = 1.2; // ns, SS角低温 real delay_max = 3.8; // ns, FF角高温 real actual_delay; always @(vin_p or vin_n) begin actual_delay = delay_min + ($random % 10000) * (delay_max - delay_min) / 10000; #(actual_delay) comp_out = (vin_p > vin_n) ? 1'b1 : 1'b0; end endmodule

    在后综合仿真时,把这个模型替换掉原来的黑盒,就能看到comp_out在不同“虚拟工艺角”下的随机翻转时刻,从而暴露时序裕量不足的路径。

  • 亚稳态建模:在两级同步器后,加入一个亚稳态发生器,概率性地让第二级输出在多个周期内处于不定态(1'bx),检验SAR状态机的容错能力。

5.2 静态时序分析(STA)的进阶技巧:用“多角联合分析”替代单角分析

标准STA只分析单个工艺角(如SS)。对于异步SAR,必须做多角联合分析(Multi-Corner Multi-Mode, MCMM):

  • 创建4个关键角组合:SS_125C(最慢数字+最快模拟)、FF_-40C(最快数字+最慢模拟)、TT_25C(典型)、FS_25C(数字快+模拟慢)。

  • 对comp_out路径,使用set_input_transition和set_input_delay的组合约束:

    # 在SS_125C角下,模拟比较器最快,comp_out可能提前到达 set_input_transition -min 0.05 -max 0.1 [get_ports comp_out] set_input_delay -clock clk -min 0.2 [get_ports comp_out] ;# 最小到达时间 set_input_delay -clock clk -max 1.5 [get_ports comp_out] ;# 最大到达时间

    这告诉STA:comp_out可能在时钟沿前0.2ns就到了,也可能拖到1.5ns后才来。工具会据此检查所有相关路径的建立/保持时间。

  • 关键报告解读:不要只看report_timing的summary。必须深入report_timing -path_type full_clock_expanded -delay_type min_max,找到comp_out到第一个同步器D端的路径,查看其在SS角下的Hold Slack(保持时间余量)。如果这个值是负的(如-0.15ns),说明在最坏情况下,comp_out的释放时间太晚,导致前一个时钟沿采到的是旧值,这就是错误根源。

5.3 物理实现阶段的最后防线:布局布线(PnR)时的特殊处理

综合只是逻辑映射,真正的延迟由物理实现决定。在PnR阶段,还有两个杀手锏:

  • 时钟树综合(CTS)时,对SAR模块的时钟网络做“低偏斜”优化:用set_clock_tree_options -balance_levels 3等命令,确保SAR内部所有寄存器的时钟到达时间偏差(skew)小于0.1ns。因为comp_out的采样窗口极窄,时钟偏斜会直接吃掉宝贵的建立时间。
  • 关键路径布线约束:对comp_out到同步器的连线,用set_max_fanout 2和set_max_capacitance 0.02限制其负载,避免长线带来的RC延迟。在Floorplan阶段,就把比较器的模拟IO pad和SAR数字模块放在相邻区域,缩短走线距离。

有一次,我们发现STA报告显示一切正常,但后仿仍有错误。最后查到,是因为PnR工具把comp_out的走线布在了芯片边缘,那里金属层厚度薄,电阻大,实际延迟比估算多了0.3ns。把pad位置微调后,问题立刻消失。这提醒我们:异步SAR的验证,必须贯穿整个设计流程,从RTL到GDSII,环环相扣。

6. 实战排错:一个真实项目的完整排查链路

理论讲完,现在还原一个我亲身经历的排错全过程。这个案例极具代表性,它展示了如何系统性地定位和解决异步SAR综合错误,而不是靠运气瞎试。

6.1 现象描述:错误模式与初步定位

项目:一款用于工业现场的12位SAR ADC,目标速率1MSPS。 现象:前仿真(RTL)100%通过;后综合仿真(门级+理想时钟)错误率<0.1%;但后综合仿真(门级+真实时钟树+SS工艺角)错误率高达15%,且错误集中在输入电压接近参考电压一半(Vref/2)时。 初步怀疑:是不是比较器在Vref/2附近灵敏度下降,导致响应时间变长?但SPICE仿真显示,该点响应时间反而是最快的。

6.2 排查链路:从现象到根因的五步推演

Step 1:波形对比,锁定失效点

  • 在后仿中,抓取comp_out、sync_reg1/Q、sync_reg2/Q、sar_state四个信号。
  • 发现:当错误发生时,comp_out翻转后,sync_reg1/Q在下一个时钟沿采到了正确的值(1),但sync_reg2/Q却采到了0!这意味着亚稳态没有在两级同步器中衰减。

Step 2:检查同步器设计

  • RTL确认是标准两级DFF,时钟同源。
  • 查综合网表:发现工具把sync_reg1和sync_reg2优化到了同一个物理寄存器(LUT-FF pair)里!因为工具认为它们功能简单,可以共享资源。这导致两级之间没有物理隔离,亚稳态直接穿透。

Step 3:验证优化假设

  • 在综合脚本中,对这两个寄存器加set_dont_merge和set_dont_touch。
  • 重新综合,查看网表:这次它们被分到了不同的LUT中,间距也拉开了。
  • 后仿错误率降至0.5%,但仍未归零。

Step 4:深入时序分析

  • 运行STA,聚焦sync_reg1/Q到sync_reg2/D的路径。
  • 在SS_125C角下,Hold Slack= -0.08ns。这意味着sync_reg1/Q的释放时间,比sync_reg2的时钟沿晚了0.08ns,导致sync_reg2采到了亚稳态的中间值。

Step 5:根因确认与修复

  • 根因:SS角下,sync_reg1的Q输出延迟变长,而sync_reg2的D端建立时间要求没变,裕量被吃光。
  • 修复:在sync_reg1和sync_reg2之间,插入一个buffer单元(非门),并用set_dont_touch保护。这个buffer增加了0.12ns的延迟,把Hold Slack拉回+0.04ns。
  • 最终验证:在SS/FF/TT全角、-40°C~125°C全温域下,后仿错误率为0。

这个案例的价值在于,它展示了错误从来不是单一原因。它是综合优化、物理实现、时序分析、环境变异共同作用的结果。排查时,必须像侦探一样,沿着波形→网表→STA报告→物理约束这条链路,一环扣一环,不能跳跃。

提示:在你的项目中,如果遇到类似问题,优先检查同步器是否被意外优化合并。这是我在超过5个SAR项目中发现的最高频问题,占比近40%。

7. 经验总结:那些教科书不会写的实战心得

干了十多年数字前端,踩过的坑比读过的书还多。关于异步SAR逻辑的综合,我想分享几条血泪换来的经验,它们没有写在任何手册里,但能帮你少走两年弯路。

心得一:永远相信“综合后出错”是设计缺陷,而不是工具bug我见过太多工程师第一反应是升级Design Compiler版本,或者换用Genus。这几乎总是徒劳的。综合工具的模型是公开透明的,它的“错误”恰恰暴露了你设计中对异步性的认知盲区。把精力花在理解工具原理和重构设计上,效率百倍于折腾工具。

心得二:“最小可行验证”比“全功能仿真”更重要不要一上来就仿真整个12位SAR。先做一个1位的极简版本:只有comp_out、一个DFF、一个LED输出。把它综合、STA、后仿跑通。这1位模型能暴露90%的底层问题(同步器、时序约束、黑盒封装)。等它稳定了,再逐位扩展。我们有个项目,就是靠这个1位模型,在综合阶段就发现了set_false_path写错了端口名,避免了后面几周的返工。

心得三:文档即代码,约束文件必须版本化管理my_sar.sdc这个文件,和你的RTL代码一样重要。它必须:

  • 用Git管理,每次修改都要写清楚原因(如:“2023-10-05: 为SS角增加comp_out max_delay,解决hold violation”);
  • 和RTL代码打同一个tag;
  • 在综合脚本开头,用#include "my_sar.sdc"显式包含,而不是靠路径搜索。 我见过最惨的案例:一个团队的SDC文件在服务器上被覆盖,没人记得备份,综合出来的网表全错,流片前才发现,损失百万。

心得四:和模拟同事“共绘一张图”SAR ADC是数模混合的典型。数字工程师不能只管RTL,模拟工程师也不能只管SPICE。你们必须一起画一张图:横轴是时间,纵轴是信号,标出comp_out的典型翻转时刻、抖动范围、亚稳态窗口;标出数字同步器的建立/保持时间窗口;标出时钟边沿。这张图,就是你们沟通的唯一语言。我们有个项目,就是靠这张手绘图,在需求评审阶段就发现了模拟同事低估了比较器在低温下的延迟,及时调整了架构。

心得五:流片前的“压力测试”,比任何仿真都管用在GDSII交付前,做一次终极测试:

  • 用PnR后的网表,加上真实的时钟树SPEF文件;
  • 在SS角下,把comp_out的输入延迟,手动设为min_delay=0.1ns, max_delay=2.5ns(故意扩大范围);
  • 运行10万次随机输入的后仿。 如果错误率<0.001%,恭喜你,可以流片了。这个测试,比看一百份STA报告都实在。

异步SAR逻辑的综合,本质上是一场数字与模拟世界的谈判。你既不能强迫模拟世界遵守数字的时钟节拍,也不能放任数字工具无视模拟的物理现实。最好的方案,永远是在两者之间,架起一座精心设计的、可验证的桥梁。这座桥的名字,就叫“显式建模、分域约束、全程验证”。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询