2D数组的位顺序

时间:2016-06-14 14:05:37

标签: multidimensional-array vhdl

我的VHDL中有一个2x2的4位std_logic_vector数组,当我模拟它时,我的工具只给了我一个16位std_logic_vector,哪些位是哪个?

更一般地说:VHDL如何存储多维数组?

1 个答案:

答案 0 :(得分:-1)

从对这个答案的讨论来看,似乎没有固定的方法来存储这些位,这取决于你用来提供正确接口的工具。我显然有点不稳定。

我做了一个快速实验,而对于我的工具,对于数组A,您按照指定的顺序得到A(i,j)。所以如果你这样做:

type array_type is array (integer range 0 to 1,integer range 0 to 2) of std_logic_vector(3 downto 0);

你得到:A(0,0), A(0,1), A(0,...), A(1,0), A(1,1), A(1,...)

但是如果你将你的数组声明为:

 type array_type is array (integer range 1 downto 0,integer range 2 downto 0) of std_logic_vector(3 downto 0);

(注意我们现在使用的是downto),您将获得A(1,2), A(1,1), A(1,0), A(0,2), A(1,1), A(0,0)

我正在基于运行以下代码进行此演绎:

library ieee;
use ieee.std_logic_1164.all;
entity arrays is
  port (
    x : in std_logic_vector(3 downto 0);
    y : out std_logic_vector(3 downto 0)
);
end entity arrays;
architecture rtl of arrays is
  type array_type is array (integer range 0 to 1,integer range 0 to 2) of std_logic_vector(3 downto 0);
  signal my_array : array_type;
begin
  my_array(0,0) <= "0001";
  my_array(0,1) <= "0010";
  my_array(0,2) <= "0011";
  my_array(1,0) <= "0100";
  my_array(1,1) <= "0101";
  my_array(1,2) <= "0110";
  y <= x;
end architecture rtl;

并将my_array变为123456,其中每个字符都是十六进制数字。 然后我绕过减速度并得到654321