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。两个嵌套循环可以更紧凑一些。我只是想让它更有效地减少所需的硬件,但如果这不重要,我就不必这样做。