gis做图网站,90设计网站会员全站通与电商模板的区别,微信商城开发推荐华网天下,府网站建设运维情况自查报告改进的for循环
声明局部循环变量 SystemVerilog简化了声明用于for循环的局部变量的方法。SystemVerilog可以在for循环内部声明循环变量。这样就不需要在模块级定义多个变量#xff0c;也不用在命名的begin…end块中定义局部变量了。
module chip(...);//SystemVerilog风格的…改进的for循环
声明局部循环变量 SystemVerilog简化了声明用于for循环的局部变量的方法。SystemVerilog可以在for循环内部声明循环变量。这样就不需要在模块级定义多个变量也不用在命名的begin…end块中定义局部变量了。
module chip(...);//SystemVerilog风格的循环...always_ff(posedge clock) beginfor(bit[4:0] i0; i15;i)....endalways_ff(posedge clock)beginfor(int i1;i 1024;i1)...end
endmodule
局部循环变量避免发生干扰 在for循环内部声明的变量是这个循环的局部变量。在循环中引用这个变量名称只会使用这个局部变量而不会是模块其他地方如接口、程序、任务或函数中声明的相同名字的变量。
for循环内部声明的变量时自动变量局部循环变量时自动的 当在for循环初始化语句中声明变量时变量时自动储存而不是静态的。当次for循环启动时就自动地创建这个变量并初始化当循环退出时这个变量就被清除。自动变量的使用有如下几个需要注意的问题
自动变量不能层次化引用自动变量不能保存到VCD文件中for循环变量的值不能在循环外部使用因为这个变量在循环外部是不存在的。
局部循环变量在循环外不存在
always_comb
beginfor(int lobit0;lo_bit 63;lo_bit)beginif(data[lo_bit]) break;//当位值为1就退出循环endif(lo_bit 7) //出错此处并没有lo_bit...
end如果需要在循环外引用一个变量这个变量必须在循环外声明。
always_comb
int lo_bit;//本块的局部变量
beginfor( lobit0;lo_bit 63;lo_bit)beginif(data[lo_bit]) break;//当位值为1就退出循环endif(lo_bit 7) //lo_bit的值为最后一个循环的值...
end2、多重for循环赋值 SystemVerilog可以在for循环中使用多个初始化赋值语句多个步进赋值语句。 多个初始化或步进赋值语之间用逗号隔开。
for(int i1,int j0;i*j 128;i,j3)
...每个循环变量可以声明为不同类型
for(int i1,byte j0;i*j 128;i,j3)
....3、for循环中声明的变量的层次化引进 局部变量没有层次路径 作为for循环一部分声明的局部变量不能被层次化引用。测试向量、显示波形或VCD文件都不能引用这些局部变量但是工具可能会提供私有的、非标准的方法来处理这些变量
always_ff(posedge clock)
beginfor(int i0;i15;i)begin...//i不能层次化引用end
end如果确实需要对for循环的控制变量进行层次化引用则这个变量必须在for循环外部声明在模块级或在命名的begin…end块内。
always_ff(posedge clock)
beginloop
int i;//i可以层次化引用for(int i0;i15;i)begin...end
end