在VHDL中使用另一个1d std_logic_vector分配2d std_logic_vector

时间:2018-04-22 00:51:43

标签: 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);

我需要用A分配数据(全部,0),用B分配数据(全部,1),依此类推 像那样

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

我可以在代码中添加“”来执行它吗?

1 个答案:

答案 0 :(得分:0)

解决方案1 ​​ - 流程和循环:

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

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;

解决方案2 - for-generate:

生成循环用于创建大量并发分配。

gen: for i in A'range generate
  data(i, 0) <= A(i);
  data(i, 1) <= B(i);
  data(i, 2) <= C(i);
end generate;

解决方案3 - 分配流程:

过程用于将赋值封装到行中。

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;

来源:PoC.vectors.assign_col

用法:

assign_col(data, A, 0);
assign_col(data, B, 1);
assign_col(data, C, 2);

PoC.vectors包含许多新类型,函数和过程,用于处理VHDL中基于std_logic的真实2D数组。