Verilog验证平台的通用结构和验证代码编写的基本结构,还有注意事项(持续更新)

Verilog验证平台的通用结构和验证代码编写的基本结构,还有注意事项(持续更新)

Verilog通用验证结构:

1、Testbench:顶层测试模块,验证中必须有的存在,特别简单的模块测试可以只用这个模块。
2、DUT:RTL设计代码;也就是被测试的对象
3、BFM:接口驱动,具有交互的功能。
4、Monitor:显示重点信号,监视器的功能。
5、Compare:比较模型。
6、Testcase:验证激励基于总线功能模型实现对设计代码的特定交互驱动。

文件结构:

如下图:
在这里插入图片描述
这个参考文件模型仅仅是参考,具体操作还是看公司安排。要是设计没有要求就只需要搭建RTL和Testbench文件就可以了。

测试平台的描述(Testbench的搭建):

`timescale 1ns/100ps //时间单位是1ns;时间精度是100ps。
module abc_tb;       //测试模块名,“abc”表示被测试模块名
//-----------驱动信号连接------------------------------------
reg				clk ;
reg				rst ;
reg		[位宽]	a   ;  //假设模块abc具有三个输入分别是a,b,c
reg		[位宽]	b   ;  //           具有两个输出分别是d,e
reg		[位宽]	c   ;
wire	[位宽]	d   ;
wire	[位宽]	e   ;

wire	[位宽]	f   ;  //中间的连接线
//-------------信号初始化和时钟的设置------------------------
//--------具体初始化是什么看设计的需求-----------------------
initial
begin
	a=0   ;b=0   ;c=0 ;  //信号初始化
	clk=0 ;rst=0 ;       //时钟和复位初始化
end
always #<半时钟周期> clk=~clk ;  //时钟周期=半时钟周期X2
//---------被测试代码的实例化----------------
	<被验证模块1>	<实例化模块名>	(<端口连接>);  //实例化模块1
	<被验证模块2>	<实例化模块名>	(<端口连接>);  //实例化模块2
//--------验证激励----------------------------
initial
begin
	<加载需要的激励模块、任务>	//调用模块和任务可以提高仿真的精简和稳定
	<直接加载a,b,c的值>
end
//------------暂停和停止-------------------
initial
begin
#<时间>	$stop   ;  //暂停仿真
#<时间>	$finish ;  //停止仿真
end

endmodule


注意事项:

1、代码风格要统一;
2、最大限度的遍历性设计;
3、多写注释;提高代码的可读性和可维护性。
4、块语句的握手,举例:

initial  //块1
begin
wait(en)
end

initial  //块2
begin
wait(!en)
end

en是握手的方法

总结:

持续更新

感想:

千里之行始于足下

猜你喜欢

转载自blog.csdn.net/yixiaoyaobd/article/details/108157660