前面用三次方函数分别展示了吞吐量和延时优化,现在我们来看看有关时序优化的实例,首先来展示插入寄存器增加流水来优化时序,给出的例子是一个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:乘法器和加法器组成的路径过长
如图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所示:
文章评论(0条评论)
登录后参与讨论