2017-04-08 70 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)相同。