我需要做这样的事情。我需要把阵列分解成单独的信号。我没有指定方向的启用信号。并且,";分配";声明是不可行的。还有其他建议吗?
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
或以上任何一种,请查看标准单元库。它可能有一个等效的特殊细胞。