verilog学习笔记(2)_一个小module及其tb

module-ex_cnt

module ex_cnt(
	input wire sclk,
	input wire rst_n,
	output wire[9:0] cnt 	
);

reg [9:0] cnt_r;//_r 代表reg

always@(posedge sclk or negedge rst_n)
	if(rst_n == 1'b0)
		cnt_r <= 'd0;//'d0代表32位0,然后截取10位
	else
		cnt_r <= cnt_r + 1'b1;
		
assign cnt = cnt_r;
endmodule

tb-cnt

`timescale lns/100ps	//单位时标声明 声明时间精度为100ps
//#100	//#作为延时开始 延时为10nm

module tb_ex_cnt;//声明不需要端口列表
		//例化模块的时候如果原始模块是输出信号,那么括号内可以为wire变量,亦可以为reg变量
		reg bt_sclk,tb_rst_n;//激励信号的声明
		//例化模块的时候如果原始模块是输出信号,那么括号内必须为wire变量	
		wire [9:0] tb_cnt;//原始模块输出信号连接线声明
		initial//initial在上电之后仅运行一次 只能给寄存器reg变量赋值
		begin//begin...end只是在test_bench文件内部顺序执行 
			tb_sclk <= 0;//这里阻塞赋值,非阻塞赋值都可以
			tb_rst_n <= 0;//以上两句赋值语句赋值是有先后顺序的,但是延时为0
			#200  //延时20nm
			tb_rst_n <= 1;
		end
		
always #10 tb_sclk <= ~tb_sclk;	//循环震荡 震荡周期为20nm

//例化的方法
//原始模块名字 例化的名字(可以自定义)
ex_cnt ex_cnt_inst(
	.sclk(tb_sclk),//.后面的名字是原始模块的端口名字 括号内为测试基地(当前)端口的名字 例化模块的时候如果原始模块是输出信号,那么括号内可以为wire变量,亦可以为reg变量
	.rst_n(tb_rst_n),
	.cnt(tb_cnt) //例化模块的时候如果原始模块是输出信号,那么括号内必须为wire变量	
);

endmodule

原文地址:https://www.cnblogs.com/maskerk/p/7367387.html