1

モジュールのチェーンを構築するのに問題があります。すべてのモジュールをリストしたモデルを手動で接続できますが、より簡潔な表現が必要です。次のコードを試してみましたが、うまくいきませんか? コードを修正するにはどうすればよいですか?

module network(
    input signed [31:0] xi,
    output signed [31:0] yo,
    input clk,
    input reset
    );

    wire signed [31:0] x0, x1, x2, y0, y1, y2, xo;
    wire [3:1] t;
    //working code for chain of pe
//   pe u0(xi, x0, 0, y0, clk, reset);  
//   pe u1(x0, x1, y0, y1, clk, reset);
//   pe u2(x1, x2, y1, y2, clk, reset);
//   pe u3(x2, xo, y2, yo, clk, reset);
    //chain of array not working! how!
    pe p[1:4] ((xi,t), (t, x), (0, t), (t,yo),clk,reset); <- want to improve
endmodule

ここで、pe (入力、出力、入力、出力、clk、リセット)。

4

1 に答える 1

1

これを試して。Verilog のすべてのバージョンで動作するはずです。この場合、パラメータ PE_NUM は、値が 2 以上の int でなければなりません。Verilog-2001 または SystemVerilog を必要とする 1 pe インスタンスが必要な場合は、生成ブロックを使用する必要があります。一部のシミュレーターでは、PE_NUM が大きくなると (例: 2**16)、メモリ制限に達する可能性があります。

/*All Verilog*/
module network(
        input signed [31:0] xi,
        output signed [31:0] yo,
        input clk,
        input reset
        );
    parameter PE_NUM = 4; // limitation PE_NUM must be greater then 1
    wire signed [31:0] xo;
    wire signed [0:PE_NUM-2] [31:0] xN;
    wire signed [0:PE_NUM-2] [31:0] yN;
    pe p[0:PE_NUM-1] ({xi,xN}, {xN,xo}, {32'b0,yN}, {yN,yo}, clk,reset);
endmodule

以下は、generate を使用した例です。

/*Verilog-2001 or SystemVerilog*/
module network(
        input signed [31:0] xi,
        output signed [31:0] yo,
        input clk,
        input reset
        );
    parameter PE_NUM = 4; // no limitation
    wire signed [31:0] xo;
    generate
        if(PE_NUM <2) begin
            pe p (xi, xo, 32'b0, yo, clk,reset);
        end
        else begin
            wire signed [0:PE_NUM-2] [31:0] xN;
            wire signed [0:PE_NUM-2] [31:0] yN;
            pe p[0:PE_NUM-1] ({xi,xN}, {xN,xo}, {32'b0,yN}, {yN,yo}, clk,reset);
        end
    endgenerate
endmodule
于 2013-01-09T01:15:51.647 に答える