这是我的代码:
variable input: array(0 to 3, 0 to 3) of unsigned(7 downto 0);
variable outt: array(0 to 3, 0 to 175) of unsigned(7 downto 0);
for i in 0 to 3 loop
outt(0,i) :=input(0,i);
outt(1,i) :=input(1,i);
outt(2,i) :=input(2,i);
outt(3,i) :=input(3,i);
end loop;
有没有更好的方法呢?我的意思是在一个较大的outt数组的一部分中复制所有输入数组的高效代码?
答案 0 :(得分:1)
根据经验,VHDL中的循环被展开,因为循环的目的是合成循环体中描述的硬件的多个副本。控制逻辑不会出现在合成硬件中。
因此,编写多个赋值的更紧凑的方法是执行两个嵌套循环。
for i in 0 to 3 loop
for j in 0 to 3 loop
out(i,j) := in(i,j); // there will be 16 wires / flipflops synthesized
end loop;
end loop;
答案 1 :(得分:0)
尝试
outt(0 to 3, 0 to 3) := input;
答案 2 :(得分:0)
为了获得最大的灵活性,您可以使用嵌套循环和属性来应对i
大小的变化:
for i in i'range(1) loop
for j in i'range(2) loop
outt(i,j) := input(i,j);
end loop;
end loop;