2011-03-15 81 views
1

我想知道是否可以使用生成語句中的變量。我可以在生成語句中使用變量嗎?

signal bitmap_nodes : std_logic_vector(0 to NB_NODES-1) := (others => '0'); 

CIRCULAR: if (CLOCKWISE = 0) generate 
    variable index : integer := 0; 
    begin 
    GENERATE_NODE : for i in NB_NODES-1 to 0 generate 
    begin   
     node_inst: node 
     port map (     
      rx_bitmap => bitmap_nodes(index) 
     ); 

     -- Increment index 
     index := index + 1; 

    end generate GENERATE_NODE; 

end generate CIRCULAR; 

這裏,變量僅用於矢量切片。它的作用是分配如下(假設NB_NODES等於4):

NODE0 -> bitmap_nodes(3) 
NODE1 -> bitmap_nodes(2) 
NODE2 -> bitmap_nodes(1) 
NODE3 -> bitmap_nodes(0) 

回答

2

這似乎是一樣的:

LAST: if (i = 0) generate 
      firstnode : node 
      port map (
       rx_bitmap => bitmap_nodes(NB_NODES-1) 
      ); 
     end generate LAST; 

是不是?

編輯:

我還不太清楚爲什麼要做到這一點,但你可以(後VHDL87)把shared variable在這方面的(你可以把它很像architecturebegin之間的部分)。記住共享變量必須是protected類型,如果你不會遇到各種競爭條件的問題。

但是,由於生成語句必須用併發語句填充(而變量賦值不是),所以不能像正在執行的那樣增加變量。

同樣,我會非常有興趣看到一個例子,其中該功能是必要的(或者是更是一個學術問題的?)

+0

我刪除了很多細節,使我的問題很簡單。重點仍然存在。我想在從NB-NODES-1到0 – Z0RrO 2011-03-15 16:48:07

+0

的生成語句中使用一個變量(從0到NB_NODES-1的另一個索引),我更新了適合的答案:) – 2011-03-16 22:08:52

相關問題