我可以避免opt_merge删除 BUF 吗?(Yosys 三态解决方法)



我知道yosys对三态的支持有限,但我正在寻找一种可能的解决方法。 以下电路:

module TBUF2
(
inout SALIDA1,
inout SALIDA2,
input OE,
output C);
assign SALIDA1=OE ? 1'b0 : 1'bZ;
assign SALIDA2=OE ? 1'b0 : 1'bZ;
wire e;
assign e=SALIDA1 & SALIDA2;
assign C=e;
endmodule

被解释为:

TBUF2 解析树

请注意,当OE为0时,C=SALIDA1和SALIDA2。 在 opt 传递期间,opt_merge 通道会移除 2 美元的多路复用器并生成:

TBUF2 优化

这会断开电路(当OE为0时,则C = SALIDA1(。我意识到这是因为yosys/ABC并不真正理解"1'z"输入的后果。 是否可以保留符合以下条件的多路复用器?

1( 至少一个输入是 1'Z

2( 其输出驱动一个输入引脚

以下是重现它的脚本:

read_verilog tbuf2.v
proc
show -format dot -prefix tbuf2_01
opt
show -format dot -prefix tbuf2_02

通过在proc之后和运行任何opt命令之前运行tribuf命令,将单元格$mux三态缓冲区转换为$tribuf单元格。

相关内容

  • 没有找到相关文章

最新更新