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 总结

😊

相关推荐
9527华安13 小时前
Xilinx系列FPGA实现DP1.4视频收发,支持4K60帧分辨率,提供2套工程源码和技术支持
fpga开发·音视频·dp1.4·4k60帧
cycf15 小时前
高速接口基础
fpga开发
forgeda21 小时前
从Vivado集成Lint功能,看FPGA设计的日益ASIC化趋势
fpga开发·vivado·lint·eco·静态检查功能
hexiaoyan8271 天前
国产化FPGA开发板:2050-基于JFMK50T4(XC7A50T)的核心板
fpga开发·工业图像输出·vc709e板卡·zynq 通用计算平台·模拟型号处理
雨洛lhw1 天前
The Xilinx 7 series FPGAs 设计PCB 该选择绑定哪个bank引脚,约束引脚时如何定义引脚电平标准?
fpga开发·bank·电平标准
红糖果仁沙琪玛1 天前
FPGA ad9248驱动
fpga开发
minglie12 天前
XSCT/Vitis 裸机 JTAG 调试与常用命令
fpga开发
沐欣工作室_lvyiyi2 天前
基于FPGA的电梯控制系统设计(论文+源码)
单片机·fpga开发·毕业设计·计算机毕业设计·电子交易系统
阿sir1982 天前
ZYNQ PS XADC读取芯片内部温度值,电压值。
fpga开发
@晓凡2 天前
NIOS ii工程移植路径问题
fpga开发·nios ii