VHDL简单的代码优化

时间:2013-03-19 18:44:22

标签: 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) :=input(1,i);
     outt(2,i) :=input(2,i);
      outt(3,i) :=input(3,i);

      end loop;

有没有更好的方法呢?我的意思是在一个较大的outt数组的一部分中复制所有输入数组的高效代码?

3 个答案:

答案 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;