You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开关级传输门主锁存器仿真故障求助(绝热Bennett时钟)

绝热开关级传输门主锁存器测试问题

我正在对一款开关级传输门主锁存器做初步测试,该设计属于绝热电路,是触发器的一部分,通过Bennett时钟实现绝热操作。相关触发器的时序与工作原理可参考US11488660专利(示意图见图5a,时序见图5b)。仿真中发现主锁存器存在竞争问题。

我有一个设计逻辑类似的SRAM单元,其测试平台可正常工作,但将该经验迁移至主锁存器时难度远超预期:

  • 主锁存器测试平台无法完成首个Bennett周期,已排除EDAplayground平台本身的问题
  • 直接在测试平台中例化所有开关时测试效果最佳,例化封装模块则无法正常工作,目前正解决测试平台与封装模块的兼容问题

主锁存器测试平台代码

`include "bennettClock.sv"
module master_tb();
  supply1 vdd;
  supply0 vss;
  
  wire logic [11:0] clkneg, clkpos;
  reg reset;
  reg clk;
  reg in_val;
  wire Mclk;
  wire instFlag;
  
  wire out;
  wire in;
  
  wire MclkStrong;
  wire Mclk_b;
  
  // wires for the DUT
  wor net15;
  wor net19;
  
  bennett_clock #(
        .WIDTH(12)  
    ) bennett_gen (
        .clk(clk),
        .reset(reset),
        .instFlag(instFlag),
        .Mclk(Mclk),
        .clkn(clkneg),
        .clkp(clkpos)
    );
  
  assign out = net19;
  assign (supply1, supply0) in = in_val;
  assign (supply1, supply0) Mclk_b = ~Mclk;
  assign (supply1, supply0) MclkStrong = Mclk;
  
  //Master latch transistors only
  ctranif1  M1 ( .b(vss), .d(net15), .g(MclkStrong), .s(in));      
  ctranif0  M2 ( .b(vdd), .s(in), .g(Mclk_b), .d(net15));      
  
  ctranif0  M3 ( .b(vdd), .s(net15), .g(net19), .d(MclkStrong));   // Storage latch PMOS
  ctranif1  M4 ( .b(vss), .d(Mclk_b), .g(net19), .s(net15));   // Storage latch NMOS
  
  ctranif0  M5 ( .b(vdd), .s(MclkStrong), .g(net15), .d(net19));   // Inverter PMOS
  ctranif1  M6 ( .b(vss), .d(net19), .g(net15), .s(Mclk_b));   // Inverter NMOS

  // CLock Generation
  initial begin
    clk = 0;
    forever #5 clk = ~clk; 
  end
  
  initial begin
    $dumpfile("master.vcd");
    $dumpvars(0, master_tb);
  end
  
  
  initial begin
    in_val = 0;
    reset = 0;
  end
  
  
  initial begin
    #115
    in_val = 1;
    #20
    in_val = 0;
    #130    // wont go past 130
    // does 1 bennett cycle and calls it quits
    $finish;
  end
endmodule

ctranif封装模块代码

由于NC-Verilog生成的4端子tranif实例本身仅支持3端子,我创建了以下封装模块:

module ctranif1(b, d, g, s);  // NMOS
    supply1 vdd;
    supply0 vss;

    input b, g;
  
    inout d, s;

    tranif1 n1(d, s, g);
endmodule

module ctranif0(b, s, g, d);  // PMOS
    supply1 vdd;
    supply0 vss;
  
    input b, g;
  
    inout s, d;

    tranif0 p1(s, d, g);

endmodule

补充说明:Bennett Clock模块通过输出寄存器生成符合要求的Mclk信号时序,另有可正常工作的SRAM单元测试平台作为参考。


内容的提问来源于stack exchange,提问作者Nguyen Nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 21:05:11