我通常不会在verilog中使用inout或高阻抗状态进行合成(假设内部逻辑最终必须将其作为标准CMOS 2状态逻辑实现)。
但是,我发现了很多用于合成的verilog,如下所示:
module top(
inout signal1,
inout signal2
);
submodule sub1 (
//outputs from sub1
signal1,
signal2
);
submodule sub2 (
//outputs from sub2
signal1,
signal2
);
endmodule
其中signal1和signal2仅被驱动为1'b0或1'bz,并且它们在约束文件中被声明为开漏端口。
大多数综合工具是否支持合成这个?我的目标是格子CPLD,它似乎工作正常,但我很好奇,如果其他工具合成这样的东西好吗?
您是否通常必须明确告诉工具提取信号?或者这通常是不必要的(我在代码中找不到任何提到的引体向上)
FPGA配有可配置的IO bank,根据工具的约束文件指示,您可以随意使用“启用”。为了驱动开漏总线,通常使用三态缓冲器,其中(1)输出信号(指向总线)连接到常数零,(2)使能信号(连接到三态缓冲器的使能)被认为是实际控制逻辑,提供高阻Z(由物理总线实现产生,即上拉电阻)和强0(源自我们的输出信号)之间的切换,(3)输入信号(指向我们的内部逻辑(用于数据采集和总线仲裁)。
在我参与的任何商业项目中,我从未在RTL代码中看到用1'bz驱动的信号,我的建议是避免使用它,因为我相信总有更传统的方法来处理它(仅使用逻辑1) 'b1和1'b0与三态缓冲区组合)