fpga 将 inout 引脚分配给 verilog 中的输入引脚

fpga assigning an inout pin to an input pin in verilog

我正在尝试使用 verilog 连接 Altera FPGA 上的两个引脚。

具体来说,我将 inout 引脚连接到 input 引脚。我收到错误消息。

The pin "<name>" has multiple drivers

错误解释在此link。

Altera description

这是解决方案:

module multi_driver(inout o, input a, b, en);

   // Input a directly drives the bidir pin w/o a tri-state condition
   assign o = a;

   // If en = 1 below, there will be an electrical conflict in the design.
   // To avoid this possibility, the Quartus II software issues an error
   assign o = (en) ? b : 1'bz;

endmodule

有人可以解释一下 assign o = (en) ? b : 1'bz; 行的确切作用吗?

assign o = (en) ? b : 1'bz; 是 Verilog 的三态锁存模板。当en为高电平时o端口将输出,其值为b。当 en 为低电平时,端口 o 将为 1'bz(即高阻抗状态)。高阻抗状态意味着它将形成从模块外部强制执行的任何内容(即输入)。

İ如果您尝试强制另一个信号 assign o = a; 而不管 en 信号,它会警告您该信号有多个驱动程序。只有当引脚处于高阻状态时,才能连接模块外的信号。