您当前的位置:五五电子网电子知识单片机-工控设备DSP/FPGA技术可提高设计性能的HDL编程风格与技巧 正文
可提高设计性能的HDL编程风格与技巧

可提高设计性能的HDL编程风格与技巧

点击数:7602 次   录入时间:03-04 11:35:59   整理:http://www.55dianzi.com   DSP/FPGA技术

  采用DSP48系列专用硅片组的Virtex-4系列器件则采用不同的方法实现累加。它采用链状加法器代替加法器树进行增量式累加运算。这种方法有别于任何现有的FPGA,是提升器件性能、降低DSP算法所需功耗的关键,因为逻辑与互连功能被完全集成进专用硅片中。

  采用管线形式的DSP48模块频率可达500MHz,而与加法器数量无关。如图5所示,级联端口以及48位分辨率的加法器/累加器完全能够胜任目前的采样值计算,并完成迄今为止所有计算采样值的累加。

链状加法器能提供可预测的性能

图5:链状加法器能提供可预测的性能。

  为了充分利用RTL中的Virtex-4加法器链结构,只需简单地用加法器链描述替代加法器树描述。这种将将直接型滤波器转换成转置型或脉动型滤波器的过程在XtremeDSP设计用户指南中有详细介绍。

  一旦转换完成后,你会发现算法的运行速度要比应用所需的快得多。在这种情况下,可以使用合并或多信道技术进一步减少器件使用率和功耗。这两种技术都可以采用更小的器件实现设计,或者使用空余资源增加设计功能。

  多信道技术可以将非常快的运算单元作用于多个采样速率很慢的输入流(信道)上。这种技术对硅片效率的提高幅度几乎等于信道数量。多信道滤波器可以看作是时间复接的单信道滤波器。例如,在一个典型的多信道滤波环境中,对多个输入信道中的每个信道都使用独立的数字滤波器进行滤波。为了充分发挥Virtex-4 DSP48模块的性能优势,只需为单滤波器提供8倍的时钟,设计人员即可使用一个单数字滤波器完成对所有8个输入信道的滤波,而所需的FPGA资源数量几乎可以减少8倍。

  提高块 RAM 性能

  在选用存储器单元时,影响性能的因素有:使用专用模块还是分布式模块;RAM;使用输出管线寄存器;不使用异步 复位 。此外,还有两个不大为人所知的因素,即 HDL 编程风格 和综合工具设置,这些也会极大地影响存储器性能。

  HDL编程风格

  当选用双端口模块存储器时,很可能两个端口同时访问同一存储器单元。当两个端口同时向相同存储器单元写入不同的值时就会产生冲突,此时存储器单元的内容是无法得到保证的。不过,当一个端口在读,同时另一个端口在写相同地址时又会发生什么情况呢?这要取决于目标器件。最新的Virtex和Spartan系列器件有三种可编程操作模式可以控制写操作进行时存储器的输出。有关这三种操作模式的详细信息请参阅器件的用户指南。

  需要注意的是,不同模式会影响存储器的输出行为,也会影响存储器的性能。如同下面所举的例子,编程风格决定了存储器工作在何种工作模式下:

  //先写或透明模式(transparent mode)

  always @(posedge clk) begin

  if(we) begin

  do <= data;

  mem[address] <= data;

  end else

  do <= mem[address];

  end

  //先读或写前读模式

  always @(posedge clk) begin

  if (we)

  mem[address] <= data;

  do <= mem[address];

  end

  //不变模式

  always @(posedge clk)

  if (we)

  mem[address] <= data;

  else

  do <= mem[address];

  end

  增加管线级数

  另外一种提高性能的方法是重新构建由多级逻辑组成的长数据路径,将它们分解成多个时钟周期进行处理。这种方法允许使用更快的时钟周期,并可提高数据吞吐量,其代价是时延和管线管理开销逻辑。因为FPGA中的寄存器非常多,因此额外的寄存器和开销逻辑一般不成问题。

  由于数据目前处于多周期路径上,因此设计人员必须采用特殊方法才能解决额外的时延问题。下面的例子采用在32x32乘法器输出端增加5级寄存器的编程风格。综合工具将把这些寄存器以管线形式关联到Virtex-4 DSP48模块中可用的寄存器,从而极大地提高了数据吞吐量。

  // 带有4个DSP48模块的32x32乘法器

  always @(posedge clk) begin

  prod[0] <= a * b;

  for (i=1; i<=PIPE-1; i="i"+1)

  prod[i] <= prod[i-1];

  end



www.55dianzi.com

  代码中的嵌套

  代码中尽量不要设置太多的嵌套,例如嵌套的if和case语句。若在某条if语句中有太多的if语句,则不利于实现综合优化。如果遵循以下指导原则,代码的可读性会更强。当在 HDL 中描述“for-loops”语句时,最好在数据路径中放置至少一个寄存器,特别是有算术或其它逻辑多的操作时。在编译时,综合工具会解开环路。如果没有这些同步单元,它会级联环路每次反复时创建的逻辑,从而导致组合路径过长,降低设计性能。

  本文小结

  综合、布局和布线算法中的最新发展可使我们更直接地从特殊器件中获得最佳性能。综合工具可以选用复杂的算术和存储器描述并映射到专门的硬件模块上。它们也能执行再定时、逻辑和寄存器复制等优化操作。布局布线工具可以在时序约束的基础上重建网表,执行以时序为主导的封装和布局,从而减少布局布线拥塞。

  不过,目前的工具在提高性能方面只能做到这么多。如果需要更高性能的设计,最有效的方法莫过于更好地理解目标器件、综合工具,并采用本文提供的编码指南。



上一页  [1] [2] 


本文关键字:技巧  风格  DSP/FPGA技术单片机-工控设备 - DSP/FPGA技术

《可提高设计性能的HDL编程风格与技巧》相关文章>>>