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



我需要做这样的事情。我需要把阵列分解成单独的信号。我没有指定方向的启用信号。并且,";分配";声明是不可行的。还有其他建议吗?

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的东西,那么你可以使用下面的。我认为以下不支持在模块实例化时按名称连接。

module conv ( io, io[1], io[0] );
inout [1:0] io;
endmodule

还有基元CCD_ 1。我还没有使用支持它的合成器,即使它是在IEEE 1364-1995中。

module conv ( inout [1:0] array, inout a, b );
tran t1(array[1],a);
tran t0(array[0],b);
endmodule

如果您的工具支持SystemVerilogalias,那么这将是首选方法。尽管LRM支持已经存在了几十年,但我很少看到上面使用的样式。

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

最新更新