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

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

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

4.1 Verilog工程模板

4.1.1 设计模块模板

clike 复制代码
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 测试模块模板

clike 复制代码
`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 总结

😊

相关推荐
尤老师FPGA10 天前
使用DDR4控制器实现多通道数据读写(十六)
fpga开发·ddr4
HX科技10 天前
STM32给FPGA的外挂FLASH进行升级
stm32·嵌入式硬件·fpga开发·flash·fpga升级
sz66cm10 天前
FPGA基础 -- Verilog 驱动强度(drive strength)与电荷强度(charge strength)
fpga开发
海涛高软10 天前
FPGA深度和突发长度计算
fpga开发
hahaha601610 天前
vivado使用非自带的第三方编辑器
fpga开发
芝士不会写代码10 天前
【FPGA学习】DDS信号发生器设计
学习·fpga开发
9527华安11 天前
国产安路FPGA实现MIPI视频解码转HDMI输出,基于SC500摄像头,提供TD工程源码和技术支持
fpga开发·音视频·csi·mipi·dphy·安路fpga·sc500
可编程芯片开发11 天前
基于FPGA的白噪声信号发生器verilog实现,包含testbench和开发板硬件测试
fpga开发·白噪声·snr
风释雪FPGA11 天前
[XILINX]ZYNQ7010_7020_软件LVDS设计
fpga开发
XINVRY-FPGA11 天前
XCVU47P-2FSVH2892E Xilinx Virtex UltraScale+ FPGA AMD
c语言·c++·人工智能·嵌入式硬件·阿里云·fpga开发·fpga