waljj

流水线编程方式分析

0
阅读(2131)

下面为两个流水线与非流水线编写的两个例子:

非流水线代码如下:

module test (clk, clr, a, b, c, d, result);

input clk, clr;

input [7:0] a, b, c, d;

output reg [31:0] result;

reg [7:0] atemp, btemp, ctemp, dtemp;

always @(posedge clk or negedge clr) begin

if (!clr) begin

atemp <= 0;

btemp <= 0;

ctemp <= 0;

dtemp <= 0;

result <= 0;

end else begin

atemp <= a;

btemp <= b;

ctemp <= c;

dtemp <= d;

result <= (atemp * btemp) *(ctemp *dtemp);

end

end

endmodule

其RTL图如下:

流水线代码如下:

module test (clk, clr, a, b, c, d, result);

input clk, clr;

input [7:0] a, b, c, d;

output reg [31:0] result;

reg [7:0] atemp, btemp, ctemp, dtemp;

reg [15:0] int1, int2;

always @(posedge clk or negedge clr) begin

if (!clr) begin

atemp <= 0;

btemp <= 0;

ctemp <= 0;

dtemp <= 0;

int1 <= 0;

int2 <= 0;

result <= 0;

end else begin

atemp <= a;

btemp <= b;

ctemp <= c;

dtemp <= d;

int1 <= atemp * btemp;

int2 <= ctemp * dtemp;

result <= int1*int2;

end

end

endmodule

其RTL图如下:

分析上面的verilog语句和RLT图可以看出:

Pipeline 比non_pipeline 使用的资源更多,且输出数据比non_pipeline滞后了一个时钟周期。

但是register_to_register 时间明显减小了,直观上看,比non_pipeline减小了一个乘法逻辑。

可见在资源足够的条件下,使用pipeline能够更好的满足时序,并可以提高系统的设计频率。

Baidu
map