我正在尝试使用斜接器来证明等效性并且为顺序电路坐着。基本上,两个电路的行为一旦复位就应该是相同的。我不知道怎么告诉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
,但这也违背了目的,因为我试图在重置后立即检查电路是否等效。
如何在检查之前告知等效性检查重置电路?
答案 0 :(得分:1)
只需使用以下SAT命令:
sat -verify -tempinduct -prove trigger 0 \
-set in_reset 0 -set-at 1 in_reset 1 -seq 1 miter
与您的脚本相比的变化:
“sat”命令编号从1开始的步骤。因此-set-at选项需要1作为第一个参数,以便在第一个循环中重置。
“-seq 1”将禁用第一个循环中的属性检查。这是有道理的,因为复位只会在第二个周期生效,因此这两个模块可能确实在第一个周期产生不同的输出。