类似C的环路结构如for-loop可能对学过C语言的人存在陷阱。其原因是在硬件语言中并没有隐含的寄存器这个条件,所以一般这些环路不可以在可综合代码中用来做算法迭代。在Verilog中,for循环一般用作输入多次有一定规律的赋值语句,以提高设计效率。
软件设计者可能利用for循环获得X的N次幂,代码可能是这样写的:
PowerX = 1 ;
for( i=0; i<N; i++ ) PowerX = PowerX * X ;
这个算法环路利用迭代执行N次乘法操作,每次通过这个环路,更新运行的变量。在软件中,它工作很好,因为每次迭代都将更新一个内部寄存器。
而硬件语言并没有任何隐含的寄存器出现,相反,所有的寄存器操作都被清楚地定义。如果设计者仿造上面的方式用verilog写出来,那么有可能写成下面这样的代码:
module forloop(
output reg [7:0] powerx ,
input [7:0] x,n
);
interger i ;
always @ (*)
begin
powerx = 1 ;
for( i=0; i<n; i++ )
powerx =powerx * x ;
end
endmodule
程