zoukankan      html  css  js  c++  java
  • 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
    
    
  • 相关阅读:
    如何使用分布式锁
    深入理解 ValueTask
    Tuple VS ValueTuple
    RxJS——调度器(Scheduler)
    RxJS——主题(Subject)
    RxJS——Operators
    RxJS——订阅(Subscription)
    RxJS——可观察的对象(Observable)
    Ext.Net 使用总结之GridPanel的删除事件
    使用 NuGet 管理项目库
  • 原文地址:https://www.cnblogs.com/maskerk/p/7367387.html
Copyright © 2011-2022 走看看