2013-02-18 73 views
1

我試圖做一些vhdl代碼中的整數的一些數學運算,但是當我嘗試編譯工具說「0定義的運算符」+「匹配在這裏」。這是我想要做的:在vhdl整數算術運算

for i in 0 to arr_size - 1 loop 
    for j in 0 to arr_size - 1 loop 
     for k in 0 to arr_size - 1 loop 
     for l in 0 to arr_size - 1 loop 
      for m in 0 to arr_size - 1 loop 
       mega_array(i)(j)(k)(l)(m) <= i*(arr_size**4) + j*(arr_size**3) + k*(arr_size**2) + l*(arr_size**1) + m*(arr_size**0); 
      end loop; 
     end loop; 
     end loop; 
    end loop; 
end loop; 

在設置mega_array的行遇到問題。請注意,整個模塊正在處理中。

此外:

arr_size : integer := 4; 
sig_size : integer := 32 

type \1-line\ is array (arr_size - 1 downto 0) of unsigned (sig_size - 1 downto 0); 
type square is array (arr_size - 1 downto 0) of \1-line\; 
type cube is array (arr_size - 1 downto 0) of square; 
type hypercube is array (arr_size - 1 downto 0) of cube; 
type \5-cube\ is array (arr_size - 1 downto 0) of hypercube; 

signal mega_array : \5-cube\; 
+0

問題可能出現在Library/Use子句或mega_array的聲明中;值得將它們添加到問題中。 「0定義匹配」通常意味着有2個或更多可見(不明確)定義,因爲您有太多重疊的「使用」子句。 – 2013-02-18 13:37:33

回答

2

當讀取您的舊帖子,mega_array爲4個級別的陣列在最低水平的無符號。在你的代碼中,我看到了5個關卡。所以在第五級你有bit。您不能將integer分配給std_logic

難道是這個代碼是你想要的嗎?

for i in 0 to arr_size - 1 loop    -- 5-cube 
     for j in 0 to arr_size - 1 loop   -- hypercube 
      for k in 0 to arr_size - 1 loop  -- cube 
       for l in 0 to arr_size - 1 loop -- square 
        for m in 0 to arr_size - 1 loop -- 1-line 
         mega_array(i)(j)(k)(l) <= to_unsigned(i*(arr_size**4) + j*(arr_size**3) + k*(arr_size**2) + l*(arr_size**1), 32); 
        end loop 
       end loop; 
      end loop; 
     end loop; 
    end loop; 

to_unsigned功能轉換integerunsigned,什麼是1-line類型。第二個參數是將整數轉換爲整數的向量的大小。它必須與1-line的大小相同。

+0

它表示它預計類型「std_ulogic」to_unsigned – 2013-02-18 13:58:16

+0

在您發佈的代碼中,恕我直言,仍然有一個循環太多。在'm'循環中,你處於'unsigned'的位級別。在這一點上,你嘗試分配一個整數(以'unsigned'覆蓋')。恕我直言,你不需要'米'級別。分配你在'l'級別的計算值。 – vermaete 2013-02-18 14:13:01

+0

您忘記了「超立方體」級別。 – 2013-02-18 14:13:42