如何在实例向量中对每个实例执行逻辑运算

问题描述 投票:0回答:1

假设我有一个带有N位输入的模块和一个我实例化的位,如下所示:

module foo (
   input wire [N-1:0] x,
   input wire y
);

foo u__foo (
    .x(x),
    .y(x == something)
);

我想将它们的M实例化为矢量,并连接一条M*N位的线,我知道我可以这样做:

wire [M*N-1:0] x;

foo u__foo [M-1:0] (
   .x(x)
)

但我想对N线的每个M*N位进行逻辑运算并将其作为输入挂钩,我知道我可以通过使用generate语句来实现:

genvar i;
generate
    for (i = 0; i < M; i = i + 1) begin
         foo u__foo (
            .x(x[i*N +: N]),
            .y(x[i*N +: N] == something)
         )
    end
endgenerate

或者通过循环计算并挂钩:

reg [M-1:0] y;
always @* begin
    for (i = 0; i < M; i = i + 1) begin
        y[i] = x[i*N +: N] == something;
    end
end

foo u__foo [M-1:0] (
   .x(x),
   .y(y)
)

我也知道我可以放一个新的输入并在foo内进行比较,但我无法修改foo

是否有任何语法糖,这意味着我可以更干净地做到这一点所以我不需要创建一个循环,该工具将自动拆分总线并在每个N位上执行操作?我试图阻止我的代码变得笨拙。如果只有SystemVerilog解决方案,那么只要它是可合成的,它就能工作。

foo u_foo [M-1:0] (
    .x(x),
    .y(x[N-1:0] == something)
)

提前致谢!

verilog system-verilog
1个回答
0
投票

不可以。您可以使用流媒体操作符来操作位排序,但我认为generate循环是您的最佳选择。

© www.soinside.com 2019 - 2024. All rights reserved.