2

我知道 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 pass 期间, opt_merge pass 删除 $2 mux 并生成:

TBUF2 优化

这会破坏电路(当 OE 为 0 时,C=SALIDA1)。我意识到这是因为 yosys/ABC 并不真正理解“1'z”输入的后果。是否可以保留满足以下条件的多路复用器?:

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

2) 它的输出驱动一个 inout 引脚

这是重现它的脚本:

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

1 回答 1

0

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

于 2017-06-30T15:47:43.567 回答