Arrays VHDL简单代码优化
这是我的密码:Arrays VHDL简单代码优化,arrays,loops,optimization,vhdl,fpga,Arrays,Loops,Optimization,Vhdl,Fpga,这是我的密码: 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) :=in
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数组的一部分中?试试看
outt(0 to 3, 0 to 3) := input;
试一试
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;
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;
为了获得最大的灵活性,您可以使用嵌套循环和属性来处理
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;
为了获得最大的灵活性,您可以使用嵌套循环和属性来处理
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;
不起作用:解析错误,意外的逗号,期望的是CLOSEPARdidnt工作:解析错误,意外的逗号,期望的是CLOSEPARIs它是您正在寻找的一个紧凑的符号吗?优化并不真正适用于VHDL。两个嵌套循环可以更紧凑一些。我只是想让它更有效地减少所需的硬件,但如果这不重要,那么我就不必这样做。这是不是一个紧凑的符号,你正在寻找?优化并不真正适用于VHDL。两个嵌套循环可以更紧凑一些。我只是想让它更有效地减少所需的硬件,但如果这不重要,我就不必这样做。