2017-04-08 101 views
0

我想在VHDL中製作一個std_logic_vectors數組。該數組用於生成語句以生成桶形移位器。數組中的每個元素(數組,矢量)應該是可單獨尋址的位。這是我的一些代碼。二維數組在期望1維

信號聲明:

type stage_t is array(4 downto 0) of std_logic_vector (15 downto 0); 
signal stages: stage_t; 

在架構:

test_stage: for st in 0 to 4 generate 
     test_bit_assign: for st_bit in 0 to 15 generate 
      test_stagemux: entity work.mux2_1 port map (
       S => amt(st), 
       M0 => stages(st,st_bit), M1 => stages(st,st_bit+log_w), 
       O => stages(st+1,st_bit) 
     ); 
end generate; 

實體的2:1複用器:

entity mux2_1 is 
    generic (n : INTEGER := 8); 
    port (
     S : in std_logic; -- select 
     M0, M1 : in std_logic; 
     O  : out std_logic 
    ); 
end mux2_1; 

,我得到的錯誤:

Indexed name prefix type stage_t expects 1 dimensions 

這發生在我正在閱讀或寫入階段數組的任何地方。我如何處理其中一個矢量的位?

+1

你也可以聲明類型stage_t爲'type stage_t是std_logic的數組(4 downto 0,15 downto 0);'使它成爲一個二維數組,保留你在端口映射中的關聯。如果沒有[最小,完整和可驗證的示例](https://stackoverflow.com/help/mcve),很難準確預測您將遇到的下一個問題。 – user1155120

+2

階段是一維類型(stage_t)。沿着'M0 =>階段(st)(st_bit)'行,'在維度索引中st,階段(st)是索引名稱,指定階段的stage_t的哪個元素,並且是使用st_bit命名的索引的前綴t作爲std_logic_vector的一個元素的索引。你正試圖將階段作爲一個多維數組來處理,而事實並非如此。它的元素恰好是一個數組類型。 – user1155120

+1

@ J.H.Bonarius是的,一些用戶堅持回答評論中的問題:/ –

回答

2

我按照@ user1155120的第二個解決方案解決了我的問題。 stage_t是一組向量,每個維度都喜歡自己處理。 stages(st)索引整個向量在ststages(st)(st_bit)(stages(st))(st_bit)相同。