在线咨询 切换到宽版
eetop公众号 创芯大讲堂 创芯人才网

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜全文
查看: 409|回复: 9

[求助] veriloga实现1bit SAR logic求助

[复制链接]
发表于 2025-9-26 20:59:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
有没有大佬帮我看看这个SAR LOGIC代码哪里有问题(1bit的,功能是MSB conversion, full scale是1.2V differential)想要实现图一的波形,但现在实际输出波形如图2,且comp_clk恒为0
我的tb如下:


                               
登录/注册后可看大图



附件图源ISSCC24 session9.4


实际输出

实际输出

理想输出

理想输出

code.docx

18.17 KB, 下载次数: 2 , 下载积分: 资产 -2 信元, 下载支出 2 信元

veriloga_sarlogic_msb

发表于 2025-9-26 22:36:13 | 显示全部楼层
try this code

verilog.txt

4.54 KB, 下载次数: 6 , 下载积分: 资产 -2 信元, 下载支出 2 信元

回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-9-26 22:53:45 | 显示全部楼层


Thank you so much!!!❀
回复 支持 反对

使用道具 举报

 楼主| 发表于 7 天前 | 显示全部楼层


还是不对,感觉结果更奇怪了,并且comp_clk还是恒为0,本贴持续蹲大佬解答
ps:单独仿DA的结果是正确的,所以问题肯定出在sar logic和comparator的veriloga代码
1.png
2.png
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层
`include "disciplines.vams"
module sar_logic_1b (
    start,        // analog trigger, e.g. 0↔1.2V
    comp_out,     // comparator out (electrical, 0/0.9V)
    msb,          // trial bit to DAC
    cmclk,        // comparator sample clock  ← 改名对齐
    done,         // decision done
    dac_p, dac_n  // drive to CDAC
);
  input  start, comp_out;
  output msb, cmclk, done, dac_p, dac_n;
  electrical start, comp_out, msb, cmclk, done, dac_p, dac_n;

  // ---- params ----
  parameter real vdd = 0.9, vss = 0.0, vth = 0.45;
  parameter real VREFP =  0.6, VREFN = -0.6, VCM = 0.45;
  parameter real trf = 200p;
  parameter real samp_pw = 2n;   // cmclk 脉宽
  parameter real t_settle = 0.8n;// DAC/comp 安定等待
  parameter real r_drv = 50.0;   // 输出串阻

  // ---- regs (real) ----
  real msb_v, clk_v, done_v, dp_tgt, dn_tgt;

  // 产生一个脉冲:上升->保持->下降
  task automatic pulse_cmclk;
    begin
      clk_v = vdd; @(timer(samp_pw)); clk_v = vss;
    end
  endtask

  analog begin
    @(initial_step) begin
      msb_v = vss; clk_v = vss; done_v = vss;
      dp_tgt = VCM; dn_tgt = VCM;
    end

    // 上升沿启动一次 1-bit 决策
    @(cross(V(start)-vth, +1)) begin
      done_v = vss;
      // 先打一拍采样(可当“采样/比较器置位”)
      pulse_cmclk();
      @(timer(t_settle));

      // 读 comp_out 决定极性 → 开始试探
      if ( V(comp_out) > 0.5*vdd ) begin
        // voutp > voutn → 选择一种差分方向
        dp_tgt = VREFN;  // P 拉向 -0.6
        dn_tgt = VREFP;  // N 拉向 +0.6
        msb_v  = vdd;
      end else begin
        dp_tgt = VREFP;  // P 拉向 +0.6
        dn_tgt = VREFN;  // N 拉向 -0.6
        msb_v  = vss;
      end

      // 等待比较器再稳一次,然后再打一拍确认
      @(timer(t_settle));
      pulse_cmclk();
      @(timer(t_settle));
      done_v = vdd;
    end

    // 下降沿:回到共模,准备下次触发
    @(cross(V(start)-vth, -1)) begin
      dp_tgt = VCM; dn_tgt = VCM;
      clk_v = vss;  // 防止残余高电平
    end

    // 正确的 Thevenin 形式:V = Vsrc - R*I
    V(msb)   <+ transition(msb_v, 0, trf, trf) - r_drv*I(msb);
    V(cmclk) <+ transition(clk_v, 0, trf, trf) - r_drv*I(cmclk);
    V(done)  <+ transition(done_v, 0, trf, trf) - r_drv*I(done);
    V(dac_p) <+ transition(dp_tgt,0, trf, trf) - r_drv*I(dac_p);
    V(dac_n) <+ transition(dn_tgt,0, trf, trf) - r_drv*I(dac_n);
  end
endmodule
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层
`include "disciplines.vams"
module comp_samp (inp, inn, cmclk, vout);
  input inp, inn, cmclk; output vout;
  electrical inp, inn, cmclk, vout;

  parameter real vdd=0.9, vss=0, vth=0.45, trf=100p, r_out=20.0;
  real q; // 保持一次比较的结果(0/1)

  analog begin
    @(initial_step) q = 0;

    // 在 cmclk 上升沿“锁存”一次比较结果
    @(cross(V(cmclk)-vth, +1)) begin
      q = ( V(inp) - V(inn) >= 0 ) ? 1 : 0;
    end

    V(vout) <+ transition( q ? vdd : vss, 0, trf, trf ) - r_out*I(vout);
  end
endmodule
*****************************
若比较器模型没有“用时钟沿判定”,就会一直输出亚稳态/连续时间比较结果;给一个最简“采样式”骨架方便交互验证:
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层
This is CharGPt's reply:接线与使用要点(速阅版):

接脚名请和原理图严格一致:cmclk(别写成 comp_clk)、dac_p/dac_n、start、comp_out。

统一使用 electrical 学科(discipline),避免和 wreal/logic 混接。

输出采用 Thevenin 形式:V = Vsrc - R*I(node),不和外部理想源打架。

关键参数默认:vdd=0.9、vth=0.45、VREFP=+0.6、VREFN=-0.6、VCM=0.45(可按你流程改)。

若看不到时钟沿:把 samp_pw 稍微拉长,或在瞬态设 maxstep ≤ 50ps 再跑一遍。

verilog.rar

1.42 KB, 下载次数: 0 , 下载积分: 资产 -2 信元, 下载支出 2 信元

回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层
try this code, and let me know your simulation

verilog.rar

1.42 KB, 下载次数: 3 , 下载积分: 资产 -2 信元, 下载支出 2 信元

回复 支持 反对

使用道具 举报

 楼主| 发表于 7 天前 | 显示全部楼层


   
hi_china59 发表于 2025-9-27 09:56
`include "disciplines.vams"
module sar_logic_1b (
    start,        // analog trigger, e.g. 0↔1.2V


感谢,但这个代码我看了一下没有Sar logic的<1/2Vref置0回退功能
回复 支持 反对

使用道具 举报

发表于 6 天前 | 显示全部楼层


   
howoldareyou 发表于 2025-9-27 16:52
感谢,但这个代码我看了一下没有Sar logic的


try again

sar_logic_1bit_rtz_pack.zip

1.13 KB, 下载次数: 1 , 下载积分: 资产 -2 信元, 下载支出 2 信元

回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

手机版| 小黑屋| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-10-4 02:29 , Processed in 0.023357 second(s), 5 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表