Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用VHDL中的另一个1d std_逻辑向量指定2d std_逻辑向量_Vhdl - Fatal编程技术网

用VHDL中的另一个1d std_逻辑向量指定2d std_逻辑向量

用VHDL中的另一个1d std_逻辑向量指定2d std_逻辑向量,vhdl,Vhdl,我有这个港口 PORT ( A : IN STD_LOGIC_VECTOR(31 downto 0); B : IN STD_LOGIC_VECTOR(31 downto 0); C : IN STD_LOGIC_VECTOR(31 downto 0); F : OUT STD_LOGIC_VECTOR(31 downto 0); ); 这个信号呢 SIGNAL data : std_logic_2d(31 downto 0, 2 downto 0);

我有这个港口

PORT (
    A : IN  STD_LOGIC_VECTOR(31 downto 0);
    B : IN  STD_LOGIC_VECTOR(31 downto 0);
    C : IN  STD_LOGIC_VECTOR(31 downto 0);
    F : OUT STD_LOGIC_VECTOR(31 downto 0);
);
这个信号呢

SIGNAL data : std_logic_2d(31 downto 0, 2 downto 0);
我需要用A分配数据(全部,0),用B分配数据(全部,1),以此类推
那样

data(?,0) <= A;
data(?,1) <= B;
data(?,2) <= C;

数据(?,0)解决方案1-流程和for循环:

进程用于承载顺序for循环。您需要将所有读取信号添加到灵敏度列表中:
A
B
C

process(A, B, C)
begin
  for i in A'range loop
    data(i, 0) <= A(i);
    data(i, 1) <= B(i);
    data(i, 2) <= C(i);
  end loop;
end process;

该软件包包含许多新类型、函数和过程,用于在VHDL中处理基于true
std_logic
的2D数组。

没有什么可以取代这些问号。切片是一维数组。那么包含std_logic_2d类型声明的a如何?您可能应该在适合于顺序语句的位置使用函数或循环语句,或者在适合于并发语句的位置使用generate语句。如果类型std_logic_2d的元素类型为std_logic,则它与std_logic_vector关系不密切,无法进行类型转换(IEEE std 1076-2008 8.5切片名称,9.3.6类型转换)。可以使用锯齿数组(数组数组)不是2D数组…你需要一个带有for循环或generate循环的进程来迭代所有索引。你不是想调用assign_col三次而不是assign_row吗?@user1155120你是对的。我在示例中使用了错误的过程。
gen: for i in A'range generate
  data(i, 0) <= A(i);
  data(i, 1) <= B(i);
  data(i, 2) <= C(i);
end generate;
procedure assign_col(signal slm : out T_SLM; slv : std_logic_vector; constant ColIndex : natural) is
  variable temp : std_logic_vector(slm'range(1));
begin
  temp := slv;
    for i in temp'range loop
      slm(i, ColIndex)  <= temp(i);
  end loop;
end procedure;
assign_col(data, A, 0);
assign_col(data, B, 1);
assign_col(data, C, 2);