在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,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}}或以上任何一项,请检查标准单元库。它可能有一个等效的特殊单元格。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...