最近、単純な数学的方程式を使用して必要なすべてのパラメータを事前計算してから、ロジックユニットを生成構造体でインスタンス化することを考えています。 2-Dパラメータが必要な場合は、2次元配列が固定値のセットであれば簡単です(関数を使用した多次元パックドパラメータ宣言
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 '('.
最終的にアイデアが精緻で、すべてのパラメータ/定数を算出し、ブロックを持つことですそれらをインスタンス化のために生成ブロックで使用することができます。
ご迷惑をおかけいたします。ありがとうございます。
ベスト、 Taihai
この@ dave_59にはありがとうございます。タイトルと内容は、パックされていないアンパックされた配列と関係していました。ごめんなさい。そしてあなたの解決策は、私が 'typedef'側でやっているようです。しかし、ModelSimは、機能ブロック「システム機能は定数機能で使用できないかもしれません。」ではシステム機能(例えば$フロア)を好きではありません。回避策はありますか? – Tidus
SystemVerilogの等価演算子(modには '%')を使用するか、置換式( 'let floor(val)= int '(val)> val?int'(val)-1:int ' ); 'for floor) –
Daveに感謝します。今私のために働いています。 – Tidus