在verilog中将inout数组拆分为多个inout信号

在verilog中将inout数组拆分为多个inout信号,verilog,system-verilog,Verilog,System Verilog,我需要这样做。我需要将阵列分割成单独的信号。我没有指定方向的启用信号。而且,“assign”语句不是一个好办法。还有其他建议吗 module conv ( inout [1:0] array, inout a, inout b ); assign {a, b} = array; endmodule 您要为信号的名称加别名。参见IEEE 1800-2017 LRM中的第10.11节网络别名 module conv ( inout [1:0] array

我需要这样做。我需要将阵列分割成单独的信号。我没有指定方向的启用信号。而且,“assign”语句不是一个好办法。还有其他建议吗

module conv (
  inout [1:0] array,
  inout       a,
  inout       b 
);

 assign {a, b} = array;

endmodule
您要为信号的名称加别名。参见IEEE 1800-2017 LRM中的第10.11节网络别名

module conv ( inout [1:0] array, inout a, inout b );

  alias {a,b} = array;

endmodule

Verilog做同样事情的方法是:

module conv ( .array(io), .a(io[1]), .b(io[0]) );
  inout [1:0] io;
endmodule
这是IEEE 1364-2001及其后的投诉。(也可能是IEEE 1364-1995的投诉,但LRM并不清楚)。如果您需要一些绝对需要Verilog-95 complient的东西,那么您可以使用下面的命令。我认为下面的代码不支持在模块实例化时按名称连接

module conv ( io, io[1], io[0] );
  inout [1:0] io;
endmodule
还有原语
tran
。我没有使用支持它的合成器,即使它在IEEE 1364-1995中

module conv ( inout [1:0] array, inout a, b );
  tran t1(array[1],a);
  tran t0(array[0],b);
endmodule
如果您的工具支持SystemVerilog
alias
,那么这将是首选方法。我很少看到上面使用的样式,即使LRM支持已经存在了几十年


如果您的合成器不喜欢
别名
或以上任何一种,请检查标准单元库。它可能有一个等效的特殊单元格。

但是,我认为alias不是一个可合成的构造函数。您的工具可能还不支持它,但合成工具在支持它时没有任何问题。