我的VHDL中有一个2x2的4位std_logic_vector
数组,当我模拟它时,我的工具只给了我一个16位std_logic_vector
,哪些位是哪个?
更一般地说:VHDL如何存储多维数组?
答案 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
。