申请中网可信网站,制作哈尔滨主题的网页,电子商务网站建设 故宫官网,长沙百姓网招聘底部检测的do…while循环
1、while循环可能从未执行 while循环有可能根本没有执行过。当执行流首次执行到循环的开头#xff0c;控制值就为假的时候就会发生这种情况。 为了保证循环的每个输出都与循环的输入变量保持一致#xff0c;使用这种在开头检测的while循环需要在循环…底部检测的do…while循环
1、while循环可能从未执行 while循环有可能根本没有执行过。当执行流首次执行到循环的开头控制值就为假的时候就会发生这种情况。 为了保证循环的每个输出都与循环的输入变量保持一致使用这种在开头检测的while循环需要在循环之前增加代码。
always_comb
beginif(addr 128 || addr 255)begindone 0;outofBound 1;out mem[128];endelse while(addr 128 addr 255)beginif(addr 128)begindone 1;outofBound0;endelsebegindone 0;outofBound 0;endoutmem[addr];addr -1;end
end2、do…while循环至少执行一次
do...while循环的基本语法如下
do语句或语句块
while(条件);always_comb
begin
do beigndone 0;outofBound 0;outmem[addr];if(addr 128 || addr 255)beginoutofBound 1;out mem[128];endelse if(addr 128)begindone 1;addr -1;endwhile(addr 128 addr 255);
end3、foreach数组循环结构 SystemVerilog增加了foreach循环它可用来对一维和多维数组的元素进行迭代而不必指定数组每个维度的尺寸。 新的跳转语句–break、continue、return 4、disable语句即可用作继续执行也可用于使执行过程停止。
//在一定范围的位中找到第一个值为1的
always*
beginbegin:loopinteger i;first_bit 0;for(i0;i63;ii1)begin:passif(i start_range)disable pass;//继续循环if(iend_range)disable loop;//跳出循环if(data[i])beginfirst_bit i;disable loop;//跳出循环endend//一次循环结束
end//整个循环结束
...//根据第一个1的位置左数据处理
enddisable语句还可以用作返回语句 disable语句还可以使任务的所有语句全部执行完之前提前从任务中返回。
task add_uo_to_max(input [5:0] max,output[63:0] result
);
integer i;
beginresult 1;if(max 0)disable add_up_to_max;//退出任务for(i1;i63;ii1)beginresult result result;if(i max)disable add_up_to_max;//退出任务end
end
endtask另外也可以使用disable语句来外部禁止一个并发进程或任务的执行只是这种外部的disable语句是不可综合的。 5、continue语句 使用continue语句不需要在代码中增加begin…end命名块
logic [15:0] array[0:255];
always_comb
beginfor(int i0;i255;i)begin:loopif(array[i]0)continue;//跳过空元素transform_function(array[i]);end//循环结束
end6、break语句 break语句会立即中止循环的执行。除非过程块的执行流再一次到达这个循环语句的开头否则循环不会再次执行。
//在一定范围的位中找到第一个值为1的位
always_comb
beginfirst_bit 0;for(int i0;i63;ii1)beginif(istart_range) continue;if(iend_range) break;//跳出循环if(data[i])beginfirst_bit i;break;//跳出循环endend//整个循环结束....//根据第一个1的位置情况做数据处理
end不用break跳出case语句相当于C语言的swict语句。case语句在分支执行结束后就会自动退出不需要执行break。 7、return语句 return语句用来从非空函数返回或从空函数或任务中跳出。return语句可以在任务或函数执行流的任意时间执行执行后立即从任务或函数中退出无需到达任务或函数的结尾。
task add_up_to_max(input [5:0] max,output [63:0] result
);
result 1;
if(max0) return;//退出任务
for(int i1;i63;ii1)
beginresult result result;if(imax) result;//退出任务
end
endtaskreturn语句可以用来函数或任务中提前退出。 注意在任务或空函数中关键字return后面不能有表达式而在非空函数中return后面一定要有表达式。