[英]Calculating a parameter in a loop generate block
我有一個參數數組WIDTHS
,我需要根據generate塊中WIDTHS
中的一些值來計算另一個參數RIGHT
。 這可能嗎? 如果沒有,還有其他方法嗎?
這是我正在嘗試做的一個例子。 假設我們有一個預定義的寄存器模塊REG
,它具有輸入d, q, we (write enable), CLK and _RESET
。 我想創建一個名為GroupReg
的新模塊,該模塊實例化REG
N
實例。 每個實例具有不同的寬度(因此WIDTH
參數數組)。 每個組的d, q, and we
聚集在GroupReg
具有相同名稱的數組中,並且需要為每個實例指定。 因為我們只有一位,所以指定we
很容易( we[i]
)。 但是,用正確的LEFT
和RIGHT
值指定d
和q
是我遇到的問題,因為每個組的寬度不同。
看起來,給參數賦值的唯一方法是根據其定義,這會阻止在生成循環中為其賦值。
module GroupReg(d, q, we, CLK, _RESET);
parameter N = 4; //Number of groups
//INDICES has to have N+1 members. Last member should be 0
parameter integer WIDTHS [N:0] = {40, 30, 20, 10, 0};
parameter integer DW_TOTAL = 128;
input logic [DW_TOTAL-1:0] d; // Data Input
input logic [N-1:0] we; // write enable
input logic CLK; // Clock Input
input logic _RESET; // Reset input (active low)
output logic [DW_TOTAL-1:0] q; // Q output
genvar i, j;
for (i=N-1 ; i>=0 ; i--) begin:REGISTERS
localparam WIDTH = WIDTHS[i];
localparam LEFT = RIGHT + WIDTHS[i];;
localparam RIGHT = 0;
for (j = 0 ; j<i ; j++) // <<----- Does not work
RIGHT = RIGHT + WIDTH[j];
REG #(
.DW (WIDTH),
)
reg_i
(
.d(d[LEFT:RIGHT]),
.q(q[LEFT:RIGHT]),
.we(we[i]),
.CLK(CLK),
._RESET(_RESET)
);
end : REGISTERS
endmodule
我嘗試在WIDTHS
上使用sum()
數組歸約方法,並在Aldec Riviera PRO中起作用:
module some_module;
parameter N = 4; //Number of groups
parameter integer WIDTHS [N:0] = '{40, 30, 20, 10, 0};
parameter integer DW_TOTAL = WIDTHS.sum();
initial begin
$display("DW_TOTAL", DW_TOTAL);
end
endmodule
如果您很幸運,它也將在您的模擬器中工作。
無論如何,我實際上並沒有真正理解將N
用作參數的方法,這是因為您無論如何都在硬編碼固定數量的寬度值。
這適用於Modelsim:
module some_module;
parameter N = 4; //Number of groups
parameter integer WIDTHS [N:0] = '{40, 30, 20, 10, 0};
genvar i;
for (i=N-1 ; i>=0 ; i--) begin
localparam integer FOO[i:0] = WIDTHS[i:0];
//localparam RIGHT = FOO.sum();
initial begin
foreach (FOO[i])
$display("FOO[%0d] = %h", i, FOO[i]);
end
end
endmodule
FOO
參數將僅存儲來自WIDTH
的特定循環迭代的相關條目。 如果sum()
可行,那么您將有空的家。 但是,切片語法在Riviera中不起作用。
這是供應商不同解釋該標准的典型示例,基本上是因為它不夠具體。 不過,如果您使用其他EDA公司的模擬器,請嘗試將兩個答案結合起來; 也許您很幸運,而且效果很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.