使用斜接等效性检查重置行为

时间:2017-12-11 01:12:11

标签: yosys

我正在尝试使用斜接器来证明等效性并且为顺序电路坐着。基本上,两个电路的行为一旦复位就应该是相同的。我不知道怎么告诉yosys这个。我尝试用-set in_reset 0 -set-at 0 in_reset 1重新设计设计。这是一个示例电路(移位寄存器)和yosys脚本,说明我正在尝试做什么:

module shift_reg(
  input clock,
  input reset,
  input in,
  output out
);
  reg [7:0] r;

  assign out = r[7];

  always @(posedge clock) begin
    if (reset)
      r <= 0;
    else
      r <= {r[6:0], in};
  end
endmodule

My Yosys命令:

read_verilog shift_reg.v
rename shift_reg shift_reg_2
read_verilog shift_reg.v
prep; proc; opt; memory
miter -equiv -flatten shift_reg shift_reg_2 miter
hierarchy -top miter
sat -verify -tempinduct -prove trigger 0 -set in_reset 0 -set-at 0 in_reset 1 -seq 0 miter

如果我添加-set-init-zero它可行,但这会失败,因为我正在尝试测试重置行为。我也可以将-seq 0更改为-seq 8,但这也违背了目的,因为我试图在重置后立即检查电路是否等效。

如何在检查之前告知等效性检查重置电路?

1 个答案:

答案 0 :(得分:1)

只需使用以下SAT命令:

sat -verify -tempinduct -prove trigger 0 \
    -set in_reset 0 -set-at 1 in_reset 1 -seq 1 miter

与您的脚本相比的变化:

  1. “sat”命令编号从1开始的步骤。因此-set-at选项需要1作为第一个参数,以便在第一个循环中重置。

  2. “-seq 1”将禁用第一个循环中的属性检查。这是有道理的,因为复位只会在第二个周期生效,因此这两个模块可能确实在第一个周期产生不同的输出。