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。
这是解决方案:
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
信号,它会警告您该信号有多个驱动程序。只有当引脚处于高阻状态时,才能连接模块外的信号。
我正在尝试使用 verilog 连接 Altera FPGA 上的两个引脚。
具体来说,我将 inout
引脚连接到 input
引脚。我收到错误消息。
The pin "<name>" has multiple drivers
错误解释在此link。
这是解决方案:
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
信号,它会警告您该信号有多个驱动程序。只有当引脚处于高阻状态时,才能连接模块外的信号。