2017-10-10 66 views
-1

在vhdl中返回無約束向量的最佳方式是什麼?返回無約束數組vhdl

function func(selector : natural) return std_logic_vector is 
begin 
    case selector is 
     when 3 => return std_logic_vector("11"); 
     when 4 => return std_logic_vector("101"); 
     when others => return std_logic_vector("0"); 
    end case; 
end function; 

在這種情況下,我得到字符串文字不能是一個類型轉換操作數,所以它不工作。信號選擇器是通用的,所以它不一定是可合成的。

+4

數字文字3和4後面有語法錯誤。是否使用顯式指定類型的限定表達式?合格表達式:'std_logic_vector'(「11」)','std_logic_vector'(「101」);''和'std_logic_vector'(「0」)'。您沒有顯示的錯誤消息會告訴您,您無法將字符串轉換爲std_logic_vector,它們的元素類型不同(字符和std_ulogic)。那些':'應該是「=>」。 – user1155120

+0

The:instead of <=在這裏是一個錯誤,我爲stackexchange鍵入了這個新的部分,沒有不必要的代碼。在原始代碼中還有「<=」。然而,它與'你在括號之前提到的。「謝謝很多。在這種情況下,你可以給我一個關於這個函數的提示嗎? 將此複製到答案中,我會將其標記爲已接受! –

+0

然後編輯您的問題... – JHBonarius

回答

1

你不能這樣做。函數的返回值在被調用時需要與某些東西相關聯,並且某些東西必須具有固定的寬度。換句話說,你必須說的東西,如:

s <= func(n); 

s將有一個固定的寬度,所以從你的函數所有的返回值必須具有相同的寬度。

+0

我的函數返回值用於具有無約束數組類型的通用映射。像通用地圖(func(n))一樣。泛型的寬度在較低的層級中進行評估。 –

+1

@FranzForstmayr在這種情況下,我不明白你在問什麼。你可以這麼說'when 3 => return「11」;'。 –

+0

好吧,我不知道這是可能的。我看到了,我只是覺得太複雜了! –