原创 【博客大赛】高级设计第一章时序优化实例之插入寄存器

2013-12-11 10:37 2220 20 20 分类: FPGA/CPLD 文集: FPGA高级设计(编译)

前面用三次方函数分别展示了吞吐量和延时优化,现在我们来看看有关时序优化的实例,首先来展示插入寄存器增加流水来优化时序,给出的例子是一个FIR,原始代码如下:

 

以下是FIR原始代码片段:

module fira(

output reg[7:0] Y,
input[7:0]A,B,C,X,
input clk,
input validsample);
 
reg[7:0] X1,X2;
 
always@(posedge clk)
  if(validsample)begin
     X1<=X;
     X2<=X1;
     Y<=A*X+B*X1+C*X2;
  end
endmodule

上述代码在Quartus II中编译后的结果如图1所示:

 

1.jpg

图1:乘法器和加法器组成的路径过长

如图1所示,路径中包含乘法器和加法器,通过在乘法器和加法器之间插入寄存器,也即在乘法器和加法器之间插入流水,这样可以将关键路径延时降低,具体做法可以将前面代码修改如下所示:

 

以下是FIR修改后的代码片段:

 

module firb(
output reg[7:0]Y,
input[7:0]A,B,C,X,
input clk,
input validsample);
reg[7:0]X1,X2;
reg[7:0]prod1,prod2,prod3;
always@(posedge clk)begin
  if(validsample)begin
     X1<=X;
     X2<=X1;
     prod1<=A*X;
     prod2<=B*X1;
     prod3<=C*X2;
  end
  Y<=prod1+prod2+prod3;
end
endmodule

上述代码在Quartus II中编译后的结果如图2所示:

 

1.jpg
图2:乘法器和加法器之间插入寄存器
 
如图2所示,插入流水之后,关键路径上只有一个乘法器或者只有一个加法器。这样路径延时降低,只是插入流水寄存器之后,增加了部分面积。
 
注:和原书比较,上述代码使用Quartus II编译出来的结果和用Synplify编译出来的结果一模二样,并无区别。

文章评论0条评论)

登录后参与讨论
我要评论
0
20
关闭 站长推荐上一条 /2 下一条