SOC课程——④——Verilog程序(Testbench的编写)

13 篇文章 2 订阅

SOC课程——④——Verilog程序(Testbench的编写)

testbench的作用:提供输入激励

1 编写testbench

  • 编写的流程
    在这里插入图片描述

  • 时钟信号的固定写法

	initial begin
		clk	=	0;
		forever
		#(CYCLE/2)
		clk=~clk;
	end
  • 复位信号的固定写法
	//产生复位信号
	initial begin
		rst_n = 1;
		#2
		rst_n = 0;
		#(CYCLE*RST_TIME);
		rst_n = 1;
	end
  • 其他信号的固定写法
	//输入信号din0赋值方式
	initial begin
		#1;
		//赋初值
		din0 = 0;
		#(10*CYCLE)
		//开始赋值
		(开始赋值的语句)
	end

	//输入信号din1赋值方式
	initial begin
		#1;
		//赋初值
		din0 = 0;
		#(10*CYCLE)
		//开始赋值
		(开始赋值的语句)
	end

模板和流程

  • 定义时间标识
  • 原模块的输入信号定义为reg类型
  • 原模块的输出信号定义为wire类型
  • 模块的例化
  • 输入信号的驱动
'timescale 1ns/1ns
module testbench_name();

	//时钟和复位
	reg clk;
	reg rst_n;

	//uut的输入信号
	reg[3:0]	din0;
	reg			din1;
	......(等信号)
	
	//uut的输出信号
	wire		dout0;
	wire[4:0]	dout1;
	......(等信号)
	
	// 时钟周期,单位是ns,可在此修改时钟周期
	parameter CYCLE	= 20;
	
	//复位时间,此时表示复位3个时钟周期的时间
	parameter	RST_TIME = 3;
	
	//待测试的模块例化
	module_name uut(
		.clk	(clk	),
		.rst_n	(rst_n	),
		.din0	(din0	),
		.din1	(din1	),
		.dout0	(dout0	),
		.dout1	(dout1	)
		......(等信号)
	);

	//生成本地时钟50M
	initial begin
		clk	=	0;
		forever
		#(CYCLE/2)
		clk=~clk;
	end

	//产生复位信号
	initial begin
		rst_n = 1;
		#2
		rst_n = 0;
		#(CYCLE*RST_TIME);
		rst_n = 1;
	end
	
	//输入信号din0赋值方式
	initial begin
		#1;
		//赋初值
		din0 = 0;
		#(10*CYCLE)
		//开始赋值
		(开始赋值的语句)
	end

	//输入信号din1赋值方式
	initial begin
		#1;
		//赋初值
		din0 = 0;
		#(10*CYCLE)
		//开始赋值
		(开始赋值的语句)
	end

endmodule
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值