2017-02-17 24 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