为什么 yosys 重新编号向量端口?

Why does yosys renumber vector ports?

我的顶级 verilog 模块为 myStorm ice40 板上的四个 LED 声明信号,标记为 "LED1-LED4"。

module top (
  output [4:1] LED
);
assign LED = 4'b1010;
endmodule

我在 .pcf 文件中使用相同的编号:

set_io LED[1] 37
set_io LED[2] 38
set_io LED[3] 39
set_io LED[4] 41

但是在 .blif 输出中,yosys 对信号进行了重新编号:

.model top
.inputs
.outputs LED[0] LED[1] LED[2] LED[3]
...

所以 arachne-pnr 抱怨:

top.pcf:4: fatal error: no port `LED[4]' in top-level module `top'

yosys 是否期望顶级矢量端口始终从零开始编号?

原因是 Yosys BLIF 后端没有使用存储在 Yosys Wire 对象中的起始偏移和方向提示 (upto/downto) 来生成单位网络名称。

现在已在提交 5c2c78e2dd 中修复此问题。感谢您提醒我注意此事。

更新到最新的 git Yosys 负责人,您应该会得到您期望的结果。