1.3时序
1.3.1增加寄存器层
此技术应用于高级 流水线设计中,其中额外的时钟周延迟不会违反设计规则。
举例:FIR设计不满足时序要求(即关键路径中的延迟大于一个时钟周期)
注:fir:有限冲击响应数字滤波器,一般为非递归性结构冲击响应在有限时间内衰减为0;其输出紧取决于输入信号。稳定性和线性是其最大特点。例子中通过增加register使得乘法器和加法器分离。并且乘法器是很好的流水线选择因为计算可以被分为几级。
module fir(
output [7:0] y,
input [7:0] a,b,c,x,
input clk,
input validsample
);
reg [7:0] x1,x2,y;
always @(posedge clk)
if (validsample) begin
x1 <= x;
x2 <= x1;
y <= a*x+b*x1+c*x2;
end
endmodule
//add register layer
module fir(
output [7:0] y,
input [7:0] a,b,c,x,
input clk,
input validsample
);
reg [7:0] x1,x2,y;
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
1.3.2并行结构;串转并。
通过[7:0]X三次方举例,通过将乘法运算分解为可以并行执行的较小运算,可以将最大延迟减少为通过任何子结构的最长延迟。
1.3.3扁平化的逻辑结构设计
特别适用于由于优先级编码逻辑。在代码进行综合时,无法分解以串行方式编码的逻辑结构,也没有足够的信息与设计的优先级要求相关。例子:写一个四位的address;通过删除优先级编码扁平化逻辑结构(if。。else中去掉else)。
1.3.4寄存器平均
这个想法是在寄存器之间平均分配逻辑,以最小化任何两个寄存器之间的最坏情况延迟。每当关键路径和相邻路径之间的逻辑高度不平衡时。就会被采用。时钟速度是被最坏路径限制的。许多综合工具都有register balance优化。例子:8bit的加法器增加一级逻辑寄存器,使的寄存器平均。
1.3.5预定路径
每当多条路径与关键路径组合在一起时,都应使用此技术,并且可以对组合路径进行重新排序,以使关键路径可以移近目标寄存器。
1.4归纳总结:
*展开迭代循环可以增加吞吐量,但是增加资源占用。
*通过移除流水线寄存器可以降低延迟。带来的影响是:增加组合逻辑的延迟。
*时序表示设计中的最大时钟速度。当任意两个连续元件之间的最大延迟小于最小时钟周期时,设计便满足了时序要求。