我一直在为一些用例测试 yosys。版本:Yosys 0.7+200 (git sha1 155a80d, gcc-6.3 6.3.0 -fPIC -Os)
我写了一个简单的块,将格雷码转换为二进制:
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
我是否缺少某种标志或综合选项?