每天一点Verilog,《高级FPGA设计》学习笔记:for 语句怎么用?
2011-03-06 13:12
197 查看
类似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
程序可以在行为仿真中工作,并可能可以综合到门电路(这与综合工具有关)。Xilinx的XST不可以综合没有固定n值的代码,但是synplify则会基于最坏条件的n值综合这个环路,但是最后结果也往往是综合处运行极其慢的大量逻辑块的环路。
而在使用for循环时,往往设计人员是为了减少并行代码段的重复长度。例如,以下的代码:
out[0] <= y[0] ^ x[0] ;
out[1] <= y[2] ^ x[1] ;
out[2] <= y[4] ^ x[2] ;
......
out[31] <= y[62] ^ x[31] ;
这些代码需要输入32行,为了压缩代码,提高效率,我们往往会使用for语句:
always @ (posedge clk)
for ( i=0; i<32; i=i+1 ) out[i] = y[i*2] ^ x[i] ;
值得注意的是,在环路中并没有出现反馈。
软件设计者可能利用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
程序可以在行为仿真中工作,并可能可以综合到门电路(这与综合工具有关)。Xilinx的XST不可以综合没有固定n值的代码,但是synplify则会基于最坏条件的n值综合这个环路,但是最后结果也往往是综合处运行极其慢的大量逻辑块的环路。
而在使用for循环时,往往设计人员是为了减少并行代码段的重复长度。例如,以下的代码:
out[0] <= y[0] ^ x[0] ;
out[1] <= y[2] ^ x[1] ;
out[2] <= y[4] ^ x[2] ;
......
out[31] <= y[62] ^ x[31] ;
这些代码需要输入32行,为了压缩代码,提高效率,我们往往会使用for语句:
always @ (posedge clk)
for ( i=0; i<32; i=i+1 ) out[i] = y[i*2] ^ x[i] ;
值得注意的是,在环路中并没有出现反馈。
相关文章推荐
- 每天一点Verilog,《高级FPGA设计》学习笔记:综合编码2
- 每天一点Verilog,《高级FPGA设计》学习笔记:综合编码
- 每天一点Verilog,《高级FPGA设计》学习笔记:综合编码3
- Verilog 【以下的语句我基本没怎么懂,在上篇里。故记下,虽然没什么逻辑,但是可以帮助我再看下去】
- 回复 “如果给你一个整数n 你不用for if等类似语句 怎么输出所有小于n的”
- 关于Verilog 中的for语句的探讨
- verilog-for 语句实例
- verilog中for语句使用
- python for循环语句怎么写
- 女朋友生气了该怎么办·《每天懂一点爱情心理学》·一
- Verilog中for语句的使用
- 每天一点小姿势——异常死机怎么办(1)
- 【每天读一点英文:生而为赢Born to Win英文经典短文】gnuhpc注释版: What I have Lived for 我为何而生
- 每天进步一点--WCF学习笔记
- 每天学习一算法系列(12) (求1+2+…+n,不能使用乘除法,for、while、if 、else、switch、case 等关键字以及条件判断语句)
- 【每天学一点】JAVA session相关+JSP语句
- 【笔记】Verilog怎么把for也整合过来
- 关于Verilog 中的for语句的探讨
- Verilog 中的for语句
- 【每天读一点英文】gnuhpc注释版: Suit Is Best 收藏