Verilog语法——4.Verilog工程模板、相应规范再强调

发布时间:2024年01月16日

参考资料
【明德扬_verilog零基础入门语法HDL仿真快速掌握-手把手教你写FPGA/ASIC代码设计流程中的应用】

4. Verilog工程模板、相应规范

4.1 Verilog工程模板

4.1.1 设计模块模板

module module_name(
	clk,
	rst_n,
	//其他信号,举例dout
	dout
};
	//参数定义
	parameter DATA_W = 8;
	
	//输入信号定义
	input clk;
	input rst_n;
	
	//输出信号定义
	output[DATA_W-1:0] dout;
	
	//输出信号reg定义
	reg[DATA_W-1:0] dout;
	
	//中间信号定义
	reg signal_1;
	wire siginal_2;
	
	//组合逻辑写法
	always@(*)begin
		//组合逻辑事务
	end
	//时序逻辑写法
	always@(posedge clk or negedge rst_n)begin
		if(rst_n==1'b0)begin
			//复位操作
		end
		else begin
			//触发器操作
		end
	end
endmodule

4.1.2 测试模块模板

`timescale 1ns / 1ps
module TestBench_name();
    //时钟和复位
    reg clk     ;
    reg rst_n   ;
    
    //uut 的输入信号
    reg[3:0]    din_0   ;
    reg         din_1   ;
    
    //uut 的输出信号
    wire        dout_0  ;
    wire[4:0]   dout_1  ;
    
    //时钟周期,单位为ns,可在此修改时钟周期
    parameter CYCLE = 20;
    //复位时间,此时表示复位3个时钟周期的时间
    parameter RST_TIME = 3;
    
    //待测试的模块例化
    module_name uut(
        .clk       (clk)     ,
        .rst_n     (rst_n)   ,
        .din_0     (din_0)   ,
        .din_1     (din_1)   ,
        .dout_0    (dout_0)  ,
        .dout_1    (dout_1)  
        // ,更多...
    );
    
    //生成本地时钟: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;
        //赋初值
        din_0 = 0;
        #(10*CYCLE);
        //开始赋值
        
    end

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

4.2 相应规范

4.2.1 时序逻辑和组合逻辑写法

在这里插入图片描述

4.2.2 阻塞赋值和非阻塞赋值

在这里插入图片描述

4.2.3 always写法规范

在这里插入图片描述

4.2.4 begin end以及信号的对齐

在这里插入图片描述

4.2.5 信号大小写的规范

在这里插入图片描述

4.2.6 时钟及复位信号问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2.7 reg和wire类型的使用

在这里插入图片描述

  • always里面,等号左边的信号,无论是时序逻辑还是组合逻辑,都必须是reg类型

4.2.8 输入输出的规范

在这里插入图片描述

  • 输出使用寄存器打一拍出去,可以极大降低出现亚稳态的概率。(毛刺)

在这里插入图片描述

4.2.9 总结

在这里插入图片描述
😊

文章来源:https://blog.csdn.net/qq_48035645/article/details/135556949
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。