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

参考资料
【明德扬_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 总结

在这里插入图片描述
😊

相关推荐

  1. Verilog基本语法概述

    2024-01-16 14:02:02       63 阅读
  2. FPGA | Verilog基础语法

    2024-01-16 14:02:02       68 阅读
  3. FPGA ——Verilog语法示例

    2024-01-16 14:02:02       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-16 14:02:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-16 14:02:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-16 14:02:02       87 阅读
  4. Python语言-面向对象

    2024-01-16 14:02:02       96 阅读

热门阅读

  1. 关于js学习-初体验

    2024-01-16 14:02:02       62 阅读
  2. js some方法的使用

    2024-01-16 14:02:02       56 阅读
  3. el-date-picker的使用

    2024-01-16 14:02:02       61 阅读
  4. openssl3.2 - 官方demo学习 - mac - siphash.c

    2024-01-16 14:02:02       56 阅读
  5. SQL Server查询优化方法

    2024-01-16 14:02:02       42 阅读
  6. hash 路由和 history 路由的区别

    2024-01-16 14:02:02       55 阅读
  7. js let 和 var 的区别

    2024-01-16 14:02:02       61 阅读
  8. Unix Network Programming Episode 84

    2024-01-16 14:02:02       36 阅读
  9. Leetcode刷题(二十四)

    2024-01-16 14:02:02       59 阅读
  10. 01-15网络编程-XML

    2024-01-16 14:02:02       48 阅读