2017-08-13 89 views
1

我正在嘗試創建一個減少長度的std_logic_vectors數組。我試圖用通用的std_logic_vector創建一個數組,然後使用generate語句來創建向量。VHDL生成減少長度的STD_LOGIC_VECTORS數組

architecture behavioral of dadda_mul_32bit is 

type and_planes is array (0 to 31) of std_logic_vector;  

begin 

generate_and_plane: 
    for i in 0 to 31 generate 
     and_planes(i) <= and_vector(a, b(i), i); 
    end generate generate_and_plane; 

end behavioral; 

與返回通用std_logic_vector函數一起:我使用不當產生的語句

function and_vector(vec: std_logic_vector; x: std_logic; length: natural) return std_logic_vector is 
    variable result: std_logic_vector(length - 1 downto 0); 
begin 
    for i in 0 to length - 1 loop 
     result(i) := vec(i) and x; 
    end loop; 

    return result; 
end function; 

是誰?

+0

爲什麼不是你的AND結果的長度? – user1155120

回答

3

and_planes是一種不是信號,所以你不能指定它! 更重要的是你正在創建一個部分約束的類型,它需要被約束在一個對象(例如信號)聲明中。

VHDL不支持不齊的數組。 (其中每個元件具有不同尺寸的陣列)。如果你需要這樣的模擬,你可以使用訪問類型和模擬像C一樣的不規則數組。如果你需要它來進行綜合,那麼你可以用一維數組和模擬一個不規則數組來計算嵌套的邊界向量。

見我這樣的回答:


順便說一句。 VHDL-2008增加了一個過載:"and"(std_logic, std_logic_vector),因此不需要函數來計算向量中每個位的單個位的位置。

-- slice 'a' and gate it by 'b(i)' 
and_planes(i) <= a(i downto 0) and b(i);