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语句只能在测试文件中使用,设计文件中禁止使用
相关推荐
坏孩子的诺亚方舟4 天前
FPGA系统架构设计实践15_高云Arora V系列时钟体系
fpga开发·系统架构
FPGA小徐4 天前
入门 CNN 结构全解析|从流程图理论到 FPGA Verilog 硬件实现(含习题带讲解)
fpga开发
FPGA小徐4 天前
FPGA 数字信号处理:并行 FIR 与串行滤波器设计原理、对比与完整 Verilog 实现
fpga开发
Saniffer_SH5 天前
【高清视频】Gen6 服务器还没到,Gen6 SSD 怎么测?Emily 现场演示三种测试环境
人工智能·驱动开发·测试工具·缓存·fpga开发·计算机外设·压力测试
zlinear数据采集卡5 天前
双核架构深度解析:ARM+FPGA如何让数据采集卡实现500Ksps高性能?
arm开发·fpga开发·架构
9527华安5 天前
FPGA实现GTH Transceivers Wizard传输2路视频,基于aurora 8b10b编解码架构,提供4套工程源码和技术支持
fpga开发·gth·aurora 8b10b·transceivers
FPGA小徐6 天前
FPGA 数字信号处理(二):并行 FIR 滤波器的 Verilog 全流程设计与实现
fpga开发
国科安芯6 天前
基于AS32S601ZIT2型抗辐照MCU的商业航天卫星姿态确定与控制系统研究
单片机·嵌入式硬件·安全·fpga开发·架构·risc-v
ALINX技术博客6 天前
【黑金云课堂】FPGA技术教程FPGA基础:I2C 总线通信技术
fpga开发·i2c
Hello-FPGA6 天前
Xilinx KU040 FPGA Camera Link 图像采集
c++·fpga开发