VHDL里 二维数组的赋值问题

ENTITY aaa is
port ( clk:in std_logic;
b:in std_logic_vector (1 to 512) );
END SM3;

ARCHITECTURE structural of aaa is
type logicvector2 is array (natural range<>,natural range<>) of std_logic;
signal w: logicvector2 (0 to 67,1 to 32);
signal ww:logicvector2 (0 to 63,1 to 32);

begin

w(0)<=b(1 to 32); 问题在这一行
Error (10382): VHDL error at Protocol.vhd(16): index of object of array type logicvector2 must have 2 dimensions
求解答

第1个回答  2013-10-10
先假设你的定义正确,那么你的信号w一定是w(x,y)类型的,那你调用的时候就不能只用一个参数x,(y呢?);
其次,你的定义是相互矛盾的,本身就有问题。你想:端口b是一个标准逻辑位矢量的类型,把它赋给一个二维数组w(x,y)类型,本身就违反了同型赋值的规则,是不可能实现的;

正确的做法应该是:
定义
type logicvector2 is array (natural range<>) of std_logic_vector(0 to 31);
signal w: logicvector2 (0 to 67);
……
begin

w(0)<=b(1 to 32);

……
end arch;本回答被提问者和网友采纳
第2个回答  2013-10-10
ENTITY aaa is
port ( clk:in std_logic;
b:in std_logic_vector (1 to 512) );
END aaa;

ARCHITECTURE structural of aaa is
type logicvector2 is array (natural range<>,natural range<>) of std_logic;
signal w: logicvector2 (0 to 67,1 to 32);
signal ww:logicvector2 (0 to 63,1 to 32);

begin

w(0)<=b(1 to 32);

VHDL里 二维数组的赋值问题
其次,你的定义是相互矛盾的,本身就有问题。你想:端口b是一个标准逻辑位矢量的类型,把它赋给一个二维数组w(x,y)类型,本身就违反了同型赋值的规则,是不可能实现的;正确的做法应该是:定义 type logicvector2 is array (natural range<>) of std_logic_vector(0 to 31);signal w: logic...

vhdl中“latchbuf_reg <= (others => (others => '0'));”是什麽意思...
像sun_san163说的,latchbuf_reg <= (others => '0')是将向量latchbuf_reg各位全部赋值为零。而latchbuf_reg <= (others => (others => '0'))对于一个向量vector来说是非法的,因为此时需要二维数组。也就是说,如果latchbuf_reg是二维数组的话,这条语句会把数组中的每一位置0。因此latch...

vhdl语言中的数组如何定义和使用?
赋值:shuzu:="1111";shuzu(3):='1;二维数组:type matrix_type IS array (7 downto 0) of std_logic_vector (7 downto 0 signal matix : matrix_type; ---matix 是二维8*8数组,信号 赋值:matrix(3)(4)<='1';matrix(2)<="11111111";matrix(1 downto 0)(2)<="11";...

VHDL输出一个二维矩阵,实体应该怎么写?
vhdl语言没有直接输出二维数组的功能吧!我有个想法,就是先把二维数组分成多个一维数组,比如说二维数组array,看成是n个一维数组st0,st1,st2,,,stn的叠加,其中n就代表二维数组的行数 然后再用个type array is (st0,st1,st2,,stn)把这个一维数组都包括进去。

在VHDL中怎样实现二维数组
二维数组A[m][n]可以视为由m个行向量组成的向量,或者是由n个列向量组成的向量。 由于计算机的内存是一维的,多维数组的元素应排成线性序列后存入存储器。数组一般不做插入和删除操作,即结构中元素个数和元素间的关系不变。

VHDL语言,如何定义二维数组,急!!
可以这样定义3×2的二维数组:type TableName is array (2 downto 0,1 downto 0) of STD_LOGIC;应用时:constant table:TableName:= (('0','1'),('0','1'),('0','1')) ;

一个VHDL编写的程序,请高手们帮忙纠错!!!
是这样的,你的二维数组定义的方式和你调用的方式不对应,你这样定义 TYPE table2 IS ARRAY (0 TO 3, 0 TO 6) OF std_logic;则必须用这样的调用方式a1<= t2(1,0);而如果要用你用的调用方式a1<= t2(1)(0);则必须这样定义:TYPE aaa IS ARRAY (0 TO 6) OF std_logic;TYPE table2 ...

vhdl 程序中如何定义二维数组?要求存放40个数,每个数占16位?
logic_vector(15 downto 0);signal array : array_type;这是定义40个16bit的数。如果你的40个数是又是5行8列的,可以这么写 type array_1type is (4 downto 0) of std_logic_vector(15 downto 0);type array_2type is (7 downto 0) of array_1type;signal array: array_2type;...

相似回答