在 VHDL 中将 2d std_logic_vector 分配给另一个 1d std_logic_vector
Assign 2d std_logic_vector with another 1d std_logic_vector in 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 分配 data(all,0),用 B 分配 data(all,1) 等等
像这样
data(?,0) <= A;
data(?,1) <= B;
data(?,2) <= C;
我可以用什么代替代码中的“?”来执行它?
解决方案 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;
解决方案 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;
用法:
assign_col(data, A, 0);
assign_col(data, B, 1);
assign_col(data, C, 2);
包 PoC.vectors
包含许多新类型、函数和过程,用于处理 VHDL 中真正基于 std_logic
的二维数组。
我有这个端口
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 分配 data(all,0),用 B 分配 data(all,1) 等等
像这样
data(?,0) <= A;
data(?,1) <= B;
data(?,2) <= C;
我可以用什么代替代码中的“?”来执行它?
解决方案 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;
解决方案 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;
用法:
assign_col(data, A, 0);
assign_col(data, B, 1);
assign_col(data, C, 2);
包 PoC.vectors
包含许多新类型、函数和过程,用于处理 VHDL 中真正基于 std_logic
的二维数组。