Verilog语法——6.测试文件使用for和random语句进行赋值

参考资料
【明德扬_verilog零基础入门语法HDL仿真快速掌握-手把手教你写FPGA/ASIC代码设计流程中的应用】

6. 测试文件使用for和random语句进行赋值

6.1 for语句的使用

  • 题目要求:
  • 涉及到for语句的赋值语句:
clike 复制代码
//之前要先定义一个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

小贴士

  1. verilog不支持c/c++中的自增语句i++,因此只能写成i=i+1
  2. for语句应该用在initial begin(...) end中,此处只展示关键代码

6.2 random语句的使用

6.2.1 random语句产生随机数

  • 题目要求
  • 含random语句产生随机数的代码
clike 复制代码
//之前要先定义一个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生成随机数,关键在于如何生成指定范围内的随机数,上述代码提供了较好的思路:

  1. 例如生成随机数,要求范围在n~m
  2. 计算偏移后从0开始的范围,即0~m-n
  3. 生成随机数len,对m-n+1取余,则len的范围就在0-m-n
  4. len+n的范围就是n~m,符合要求

6.2.2 random语句产生随机概率

  • 题目要求
  • 含random语句产生随机概率的代码
clike 复制代码
//之前要先定义一个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

6.3 总结

注意

  • for和random语句只能在测试文件中使用,设计文件中禁止使用
相关推荐
DS小龙哥2 小时前
基于Zynq FPGA的雷龙SD NAND存储芯片性能测试
fpga开发·sd nand·雷龙·spi nand·spi nand flash·工业级tf卡·嵌入式tf卡
上理考研周导师11 小时前
第二章 虚拟仪器及其构成原理
fpga开发
FPGA技术实战13 小时前
《探索Zynq MPSoC》学习笔记(二)
fpga开发·mpsoc
bigbig猩猩1 天前
FPGA(现场可编程门阵列)的时序分析
fpga开发
Terasic友晶科技1 天前
第2篇 使用Intel FPGA Monitor Program创建基于ARM处理器的汇编或C语言工程<二>
fpga开发·汇编语言和c语言
码农阿豪1 天前
基于Zynq FPGA对雷龙SD NAND的测试
fpga开发·sd nand·spi nand·spi nand flash·工业级tf卡·嵌入式tf卡
江山如画,佳人北望1 天前
EDA技术简介
fpga开发
淘晶驰AK1 天前
电子设计竞赛准备经历分享
嵌入式硬件·fpga开发
最好有梦想~1 天前
FPGA时序分析和约束学习笔记(4、IO传输模型)
笔记·学习·fpga开发