- UID
- 856476
|
在第一章有关速度优化中,原文作者给出了一个三次方的实例,原作者是以Xilinx器件以及Synplify综合工具为例。这里笔者用Quartus运行,我们来看看第一个例子,即原始3次方递归代码:
以下是代码片段:
module power3a(
output [7:0] XPower,
output finished,
input[7:0] X,
input clk,start);//the duration of start is a single clock
reg[7:0] ncount;
reg[7:0] XPower;
assign finished=(ncount==0);
always@(posedge clk)
if (start) begin
XPower<=X;
ncount<=2;
end
else if (!finished) begin
ncount<=ncount-1;
XPower<=XPower*X;
end
endmodule
| 上述代码是拷贝自原书,但是在QuartusII中编译是会报错的,在QII中认为端口列表里如果需要定义端口,那么就必须完整定义,否则就只能简单列出端口,然后在module体中再详细定义。如果要在端口列表里定义,那么上述代码执行修改XPower的定义为:
output reg[7:0] XPower
即可,并且要删除module体中的“reg[7:0] XPower”语句;或者是端口列表里不要加“7:0]”而只是在module体里定义。这也许是Synplify和QII的差别吧,没有用Synplify验证,或者应该是老版本与新版本的差异。或许是原书的一个小bug,因为在后面优化后的power3实例中XPower的定义是正确的。
图1是Quartus编译后的网表视图,对比原书差不多:
图1:三次方迭代原始网表视图
接下来我们来,原书对于上述迭代进行速度优化后的代码: |
|