2017-02-17 52 views
0

1ビットの変数/定義/列挙型の連結配列を生成する複数の関数があります。連結が起こるたびに、最終サイズが32ビット幅であることを確認したい。それが32ビットよりも小さいかまたはそれより大きい場合、エラーにフラグを立てる。 私は$ bits、$ sizeを試しましたが、変数を求めて、連結幅ではなく可変幅を提供しているようです。その目的を破る。システムVerilogの連結配列のビット幅

何か助けていただければ幸いです。

ありがとうございます!

ここは私が考えていたものです: - たとえば、

logic [31:0] var_out; 


function f1(bunch of inputs generated by macros(variable no. of input) a,b,c) 
size({a,b,c}); 
var_out = {a,b,c}; 
endfunction 

function f2(bunch of inputs generated by macros(variable no. of input) e,f,g,h,i) 
size({e,f,g,h,i}); 
var_out = {e,f,g,h,i}; 
endfunction 

function size (in) **// what should be in this function ?** 
if(length(in)!=32) - $error("msg"); *// this is what i want to achieve* 
+0

が、なぜそうしないのはなぜ

(デフォルト引数を持つことができますが、デフォルトが使用された場合、この関数内から知る方法はありません) 'if($ bits({a、b、c})!= 32)$ error()'を関数に入れるだけですか? –

答えて

0

多くの引数をとるSystemVerilogでは、可変数の引数を取るように定義することはできません。これらの機能は、とにかくマクロによって生成されている場合ではない

function f1(bunch of inputs generated by macros(variable no. of input) a,b,c) 
    size_check($bits({a,b,c})); 
    var_out = {a,b,c}; 
endfunction 
function void size (int in) **// what should be in this function ?** 
if(in !=32) - $error("msg"); *// this is what i want to achieve* 
endfunction 
+0

ありがとうございました。 – Szt13