0
最近我想在實例化生成結構中的邏輯單元之前,使用簡單的數學等式預先計算所有必需的參數。在需要具有二維參數的情況下,如果二維陣列是一組固定值,例如使用函數的多維打包參數聲明
parameter para_1[1:0][2:0] = '{2{3{0}}};
,則很容易。
但我想要的是一個函數,指定值,使複雜的等式可以在函數內部實現,然後將返回值分配給參數。
理想我想要的東西如下:
function func01 [1:0][1:0] (input int test);
int index;
for (index=0; index<=2; index++) begin
func01[index] = index + $floor(index/2) + $mod(index, 2) + test;
end
endfunction
parameter test1 = 1;
parameter logic test2 [1:0][1:0] = func01(test1);
但ModelSim的抱怨代碼通俗易懂的第一線 - ** Error: (vlog-13069) near "[": syntax error, unexpected '[', expecting ';' or '('.
最終的想法是讓計算在闡述所有參數/常數塊時間,以便這些可以在生成塊中用於實例化,也可以在制定時使用。
希望它是有道理的,並提前感謝。
最佳, 泰海
非常感謝這個@ dave_59。標題和內容是爲了解包數組,而不是打包。抱歉。你的解決方案似乎是我在'typedef'方面所做的。但是,ModelSim不喜歡功能塊中的系統函數(例如$ floor)'系統函數不能用於常量函數中。有沒有繞道? – Tidus
您需要使用SystemVerilog等效運算符('%'用於mod)或者編寫替換方程('let floor(val)= int'(val)> val?int'(val)-1:int'(val );'地板) –
感謝那個戴夫。現在它爲我工作。 – Tidus