我一直在测试yosys的一些用例。 版本:Yosys 0.7 + 200(GIT SHA1 155a80d,GCC-6.3 6.3.0 -fPIC -Os)Yosys逻辑循环虚假检测
我写了一个简单的块,其格雷码转换为二进制:
module gray2bin (gray, bin);
parameter WDT = 3;
input [WDT-1:0] gray;
output [WDT-1:0] bin;
assign bin = {gray[WDT-1], bin[WDT-1:1]^gray[WDT-2:0]};
endmodule
这是一个可接受的和verilog中的有效代码,并且没有循环。 它通过编译和综合,没有任何其他工具的警告。 但是,当我在yosys运行下命令:
read_verilog gray2bin.v
scc
我得到一个逻辑循环中发现:
Found an SCC: $xor$gray2bin.v:11$1
Found 1 SCCs in module gray2bin.
Found 1 SCCs.
下一个代码,相当于,通过检查:
module gray2bin2 (
gray,
bin
);
parameter WDT = 3;
input [WDT-1:0] gray;
output [WDT-1:0] bin;
assign bin[WDT-1] = gray[WDT-1];
genvar i;
generate
for (i = WDT-2; i>=0; i=i-1) begin : gen_serial_xor
assign bin[i] = bin[i+1]^gray[i];
end
endgenerate
endmodule
我是否缺少某种标志或合成选项?
感谢您的快速响应! 虽然我不确定它有帮助 - 我的主要兴趣是Yosys的FV功能。 SMT2后端给出“错误:发现模块中的逻辑循环”消息。是否有可能向SMT后端交付网表? – EEliaz
我检查过它 - 运行'synth; 'write_smt2'前的splitnets -ports,SMT工具不提供ERROR消息。 谢谢! – EEliaz
一个问题得到修复,另一个问题弹出:)运行'synth; splitnets -ports' write_smt2'不会给出ERROR消息。 但是,在添加这些行之前,BMC发现了一个计数器示例,但现在它没有(并且非常快速地结束)。所以我猜我不能在'write_smt2'之前使用“合成器”,对吧? – EEliaz