我通常不使用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,它似乎工作得很好,但我很好奇其他工具是否合成了这样的东西,好吗?
您通常需要显式地告诉工具来提取信号吗?或者这通常是不必要的(在我正在查看的代码中,我找不到任何关于拉动的地方)。
发布于 2019-04-25 07:16:19
FPGA配备了可配置的IO库,取决于如何使用约束文件指导工具,您可以使用“enable”。为了驱动开路漏总线,通常使用三状态缓冲器,其中(1)输出信号(指向总线)与常数零相连接,(2)使能信号(连接到三状态缓冲器的启用)被认为是实际的控制逻辑,它提供高Z(由物理总线实现产生的拉出电阻)和强0(来自输出信号)之间的切换,(3)输入信号(指向我们的内部逻辑(用于数据采集和总线仲裁))。
在我参与过的任何商业项目中,我从未见过RTL代码中使用1‘bz驱动的信号,我的建议是避免它,因为我相信总是有更传统的方法来处理它(仅用逻辑1’b1和1‘b0与三状态缓冲区相结合)。
https://stackoverflow.com/questions/55840231
复制相似问题