簡體   English   中英

如何創建寬度由另一個參數設置的十進制數組參數?

[英]How to create decimal array parameter with width set by another parameter?

我的模塊具有信號sensor_line[WIDTH-1:0]的可配置寬度輸入,其中WIDTH是參數。 對於每個sensor_line ,我都有一個記錄器模塊,在for循環中用generate塊實例化。 我需要將一個十進制數參數傳遞給這個記錄器,每個sensor_line都不同。

我需要創建一些十進制數組參數以提供給頂部的模塊,它的寬度將與WIDTH參數對齊。 我不介意是否需要自己匹配給定的數組大小,只要在實例化我的模塊時可以從頂部開始匹配即可。

在尋找解決方案時,我發現只能傳遞一個位數組(二進制值)。 例如,要為每個sensor_line傳遞 5 位,可以使用如下代碼:

module my_module #(
    parameter WIDTH = 4,    // number of input lines
    parameter [4:0] CYCELS [WIDTH-1:0] = '{ WIDTH{5'b0}}
)
(
    Input clk;
input [WIDTH-1:0] sensor_line;
…
);
logic [WIDTH-1:0] sensor_line_out;
…
genvar i;
generate
for (i=0; i< WIDTH; i=i+1) begin : sensor_sync
        recorder #(
            . CYCELS(CYCELS [(i+1)*5:i*5])
        )
        recorder_instance(
            .in(sensor_line[i]),
            .out(sensor_line_out[i]),
            .clk(clk),
            …
        );
    end
endgenerate
…

endmodule

我如何將十進制值傳遞給記錄器模塊,而不是示例中的位,例如在 C 中傳遞 integer 數組,然后指向索引 [i] 處的數組,最后實例我的模塊如下所示:

my_module #(
    .WIDTH(4),  // number of input lines
    .CYCELS([2,3,5,4])
) my_module_1 (
...
)

my_module #(
    .WIDTH(3),  // number of input lines
    .CYCELS([3,2,2])
) my_module_2 (
...
)

您用來傳遞十進制值數組的語法不正確。 例如,更改:

.CYCELS([2,3,5,4])

到:

.CYCELS('{2,3,5,4}) // an assignment pattern

或者

.CYCELS({2,3,5,4})  // an unpacked array concatenation 

這是編譯的實際代碼:

module my_module #(
    parameter WIDTH = 4,    // number of input lines
    parameter [4:0] CYCELS [WIDTH-1:0] = '{default:'0}
);

for (genvar i=0; i< WIDTH; i++) begin : sensor_sync
    initial $display("%m CYCELS[%0d]=%0d", i, CYCELS[i]);
end

endmodule


module top;

my_module #(
    .WIDTH(4),  // number of input lines
    .CYCELS('{2,3,5,4})
) my_module_1 (
);

my_module #(
    .WIDTH(3),  // number of input lines
    .CYCELS('{3,2,2})
) my_module_2 (
);

endmodule

Output:

top.my_module_1.sensor_sync[0] CYCELS[0]=4
top.my_module_1.sensor_sync[1] CYCELS[1]=5
top.my_module_1.sensor_sync[2] CYCELS[2]=3
top.my_module_1.sensor_sync[3] CYCELS[3]=2
top.my_module_2.sensor_sync[0] CYCELS[0]=2
top.my_module_2.sensor_sync[1] CYCELS[1]=2
top.my_module_2.sensor_sync[2] CYCELS[2]=3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM