代码之家  ›  专栏  ›  技术社区  ›  Charles Clayton

如何在实例向量中对每个实例执行逻辑操作

  •  0
  • Charles Clayton  · 技术社区  · 5 年前

    假设我有一个输入为 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)
    )
    

    但我想对每一个都做一个逻辑运算 男*女

    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 但我不能修改 .

    有没有语法糖,这意味着我可以做得更干净一点,这样我就不需要创建一个循环,工具将自动分割总线,并在每个节点上执行操作 位?我正在努力防止我的代码变得笨拙。如果有一个SystemVerilog解决方案,只要它是可合成的,它就可以工作。

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

    提前谢谢!

    0 回复  |  直到 5 年前
        1
  •  0
  •   dave_59    5 年前

    不,你可以用流操作符来操纵位顺序,但是我认为 generate