pre-computation:这是一个预先计算,在一定条件下,可以做出判断之后,对于一些没必要的计算那就不计算。如果应用已有的计算无法得出正确的结果,那么就继续往下计算直到计算出所需的结果。这个做法相比原始的全部计算的方法大大降低了动态功耗。比如一个比较器,如果计算第一位更大,那么已经得出了结果,那么剩余位的计算显得不那么重要。
没有预计算的代码:
module precomputation(
num_A,
num_B,
clk,
clr,
result
);
input wire [63:0]num_A;
input wire [63:0]num_B;
input wire clk;
input wire clr;
output reg result;
wire [63:0]temp;
assign temp = num_A + ~num_B + 1;
always@(posedge clr,posedge clk)
if(clr)
result <= 0;
else
if(temp[63] == 1)
result <= 0;
else
result <= 1;
endmodule
有预计算的代码:
module pre(
num_A,
num_B,
clk,
clr,
result
);
input wire [63:0]num_A;
input wire [63:0]num_B;
input wire clk;
input wire clr;
output reg result;
reg [59:0]temp;
always@(posedge clr,posedge clk)
if(clr)
result <= 0;
else
if(num_A[63] == 1 && num_B[63] == 0)
result <= 0;
else if(num_A[63] == 0 && num_B[63] == 1)
result <= 1;
else
begin
if(num_A[62] == 1 && num_B[62] == 0)
result <=