参考资料
【明德扬_verilog零基础入门语法HDL仿真快速掌握-手把手教你写FPGA/ASIC代码设计流程中的应用】
//之前要先定义一个integer i
integer i;
//for赋值语句开始
for(i = 0;i < 99;i = i + 1)begin
din = (i==0) ?0:(din + 1);
din_sop = (i==0) ?1:0;
din_eop = (i==99)?1:0;
din_vld = 1;
din_err = 0;
#(CYCLE*1);//需要根据实际情况,放到for循环末尾或者最开始
end
小贴士
- verilog不支持c/c++中的自增语句i++,因此只能写成i=i+1
- for语句应该用在initial begin(…) end中,此处只展示关键代码
//之前要先定义一个integer i和长度变量,设置长度符合题目条件
integer i;
reg[6:0] len;
//对len长度变量进行规约
len = $random;//len是7位2进制数,范围是0-127,因此随机数范围也是0-127
len = len % 99;//mod操作,len只能取0-98之间的数
//len取0-98,下面取len+2的值,那么真实长度值的范围即2-100
//for赋值语句开始
for(i = 0;i < (len+2);i = i + 1)begin
din = $random;
din_sop = (i==0) ?1:0;
din_eop = (i==(len+1))?1:0;
din_vld = 1;
din_err = 0;
#(CYCLE*1);//需要根据实际情况,放到for循环末尾或者最开始
end
使用random生成随机数,关键在于如何生成指定范围内的随机数,上述代码提供了较好的思路:
//之前要先定义一个integer i和长度变量,设置长度符合题目条件
integer i;
integer J;
reg[2:0] sop_rand;
reg[2:0] eop_rand;
reg[4:0] err_rand;
reg[6:0] len_rand;
reg[1:0] gap_rand;
initial begin
//赋初值
din = 0;
din_sop = 0;
din_eop = 0;
din_vld = 0;
din_err = 0;
#(CYCLE*RST_TIME);
#(10*CYCLE);
for(j=0;j<100;j=j+1)begin
sop_rand = $random;
eop_rand = $random;
err_rand = $random;
//对len_rand长度变量进行规约
len_rand = $random;
//for赋值语句开始
for(i = 0;i < (len_rand+1);i = i + 1)begin
din = $random;
din_sop = (i==0 && sop_rand != 0) ? 1:0;
din_eop = (i==len_rand && eop_rand != 0) ? 1:0;
din_vld = 1;
din_err = (i==len_rand && err_rand != 0) ? 1:0;
#(CYCLE*1);//需要根据实际情况,放到for循环末尾或者最开始
end
din = 0;
din_sop = 0;
din_eop = 0;
din_vld = 0;
din_err = 0;
gap_rand = $random;
for(i=0;i<gap_rand;i=i+1)begin
#(CYCLE*1)
end
end
end
注意