嵌入式循环中参数的vhdl算法
vhdl arithmetic of parameters in embedded loops
比方说,我有两种类型的数组:
type A_type is array (0 to 39) of std_logic_vector(7 downto 0);
type B_type is array (0 to 4) of std_logic_vector(63 downto 0);
以及相应的信号:
signal A : A_type := (others => (others => '0'));
signal B : B_type := ( x"0706050403020100",
x"0f0e0d0c0b0a0908",
x"1716151413121110",
x"1f1e1d1c1b1a1918",
x"2726252423222120");
现在,在这个过程中的某个地方,我想使用两个 for 循环将 A 按字节转换为 B,一个循环包装另一个 (1):
process(clk)
begin
if rising_edge(clk) then
for i in 1 to 5 loop
for j in 1 to 8 loop
A(i*j-1) <= B(i-1)(7+8*(j-1) downto 8*(j-1));
end loop;
end loop;
end if;
end process;
当然,我可以用更直接的方式来实现它(2):
for i in 0 to 4 loop
A(0+8*i) <= B(i)(7 downto 0);
A(1+8*i) <= B(i)(15 downto 8);
A(2+8*i) <= B(i)(23 downto 16);
A(3+8*i) <= B(i)(31 downto 24);
A(4+8*i) <= B(i)(39 downto 32);
A(5+8*i) <= B(i)(47 downto 40);
A(6+8*i) <= B(i)(55 downto 48);
A(7+8*i) <= B(i)(63 downto 56);
end loop;
因此,我想要字节数组 A,它以这种方式存储向量数组 B:proper_result, and expression (2) gives it. But expression (1) gives this: failed_result
所以问题是 - 我错过了什么吗?获取数组索引时,循环参数(i*j)相乘是否正确?
p.s。我是 运行 具有默认 sim 选项的 xilinx vivado 模拟器。
不应该这样:
A(i*j-1) <= B(i-1)(7+8*(j-1) downto 8*(j-1));
更像这样:
A(8*(i-1)+j-1) <= B(i-1)(7+8*(j-1) downto 8*(j-1));
比方说,我有两种类型的数组:
type A_type is array (0 to 39) of std_logic_vector(7 downto 0);
type B_type is array (0 to 4) of std_logic_vector(63 downto 0);
以及相应的信号:
signal A : A_type := (others => (others => '0'));
signal B : B_type := ( x"0706050403020100",
x"0f0e0d0c0b0a0908",
x"1716151413121110",
x"1f1e1d1c1b1a1918",
x"2726252423222120");
现在,在这个过程中的某个地方,我想使用两个 for 循环将 A 按字节转换为 B,一个循环包装另一个 (1):
process(clk)
begin
if rising_edge(clk) then
for i in 1 to 5 loop
for j in 1 to 8 loop
A(i*j-1) <= B(i-1)(7+8*(j-1) downto 8*(j-1));
end loop;
end loop;
end if;
end process;
当然,我可以用更直接的方式来实现它(2):
for i in 0 to 4 loop
A(0+8*i) <= B(i)(7 downto 0);
A(1+8*i) <= B(i)(15 downto 8);
A(2+8*i) <= B(i)(23 downto 16);
A(3+8*i) <= B(i)(31 downto 24);
A(4+8*i) <= B(i)(39 downto 32);
A(5+8*i) <= B(i)(47 downto 40);
A(6+8*i) <= B(i)(55 downto 48);
A(7+8*i) <= B(i)(63 downto 56);
end loop;
因此,我想要字节数组 A,它以这种方式存储向量数组 B:proper_result, and expression (2) gives it. But expression (1) gives this: failed_result 所以问题是 - 我错过了什么吗?获取数组索引时,循环参数(i*j)相乘是否正确?
p.s。我是 运行 具有默认 sim 选项的 xilinx vivado 模拟器。
不应该这样:
A(i*j-1) <= B(i-1)(7+8*(j-1) downto 8*(j-1));
更像这样:
A(8*(i-1)+j-1) <= B(i-1)(7+8*(j-1) downto 8*(j-1));