问题描述
我需要做这样的事情。我需要将阵列拆分为单独的信号。我没有启用信号来指定方向。而且,“ 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 ( io,io[1],io[0] );
inout [1:0] io;
endmodule
这是IEEE 1364-2001及更高版本。 (也可能是IEEE 1364-1995的投诉,但是LRM不清楚。)如果您需要绝对需要Verilog-95兼容的产品,则可以使用波纹管。我不认为以下支持在模块实例化时按名称进行连接。
tran
还有原始的module conv ( inout [1:0] array,b );
tran t1(array[1],a);
tran t0(array[0],b);
endmodule
。即使在IEEE 1364-1995中,我也没有使用支持它的合成器。
alias
如果您的工具支持SystemVerilog alias
,那么这将是首选方法。即使LRM支持已有数十年了,我也很少见过上面使用的样式。
如果您的合成器不喜欢{{1}}或以上任何一项,请检查标准单元库。它可能有一个等效的特殊单元格。