Verilog HDL 语言书写规范

来源:互联网 发布:php登录页面完整代码 编辑:程序博客网 时间:2024/05/22 00:47

0. verilog HDL 命名规则

类型 命名方式 实例 顶层文件 对象+功能+top video_online_top.v 逻辑控制文件 对象+ctr ddr_ctr.v 驱动程序 对象+功能+dri lcd+dri.v 参数文件 对象+para lcd+para.v 模块接口 特征域+文件名+u mcb_read; c3+mcb+read+u.v 端口注释 对象+通道+方向 input video_vs_i 时钟信号 对象+功能+特征 phy_txclk_i; sys_50mhz_i 复位信号 对象+功能+极性+特征 phy_rst_n_i; sys_rst_n_i 延迟信号 对象+功能+特征1+特征2 fram_sync_i_r0 特性功能计数 对象(+功能)(+对象)+cnt line_cnt;rd_cnt;mem_wr_cnt 一般计数器 cnt+序号 cnt0 时许同步信号 对象+功能+特征 line_sync_i 使能信号 (对象)+功能+en wr_en; fifo_wr_en

1. Verilog HDL 文件头编写规范

  • 1.文件头需要包含版本信息
  • 2.包含个人信息及文件的描述
  • 3.包含版本的记录
/* ======================== Filename ﹕ Author ﹕Description ﹕Called by ﹕Revision History ﹕Revision 1.0Email ﹕ Company ﹕ Robsense Technology .IncCopyright(c) 2015, xxxx Technology Inc, All right reserved ========================= */

2. Module 列表编写规范

`timescale 1ns/1nsmodel Verilog_Template(    //global clock    input       clk,    //50MHz    input       rst_n,  //global reset    //user interface    output [7:0] led_data   //board test led);endmodel;
  • 1.无论是否仿真,module前必须写`timescale 1ns/1ns
  • 2.全局时钟及复位卸载最前,分别命名为clk 及 rst_n (多时钟时可用 clk_50, clk_24区分)
  • 3.相关的信号根据时钟、复位、时能、控制端的顺序规划再一起,同时必须有注释
  • 4.所有输入/输出、信号命名等,都必须严格对齐
  • 5.所有信号注释必须全部对齐
  • 6.为了解决不同编辑器的兼容,TAB用4个空格来代替
  • 7.禁止使用中文注释
  • ×8.有必要的情况下,需要让逗号也对齐

3.always模块编写规范

//----------------------//Generate for is delay signal localparam  DELAY_TOP = 28'd50_000000;   1sreg[27:0]   delay_cnt;always@(posedage clk or nogedage rst_n)begin    if(!rst_n)        delay_cnt <= 0;    else if(delay_cnt < DELAY_TOP - 1'b1)        delay_cnt <= delay_cnt + 1'b1;    else        delay_cnt <= 0;end//counter for 1s delay is completedwire delay_1s = (delay_cnt == DELAY_TOP -1'b1)? 1'b1 : 1b'0;
  • 1.每一个always模块,必须自称体系,且都必须又功能介绍
  • 2.相关寄存器定义,必须写在当前always模块前
  • 3.相关的宏定义,也必须写在当前always模块前
  • 4.所有的if, else必须对齐
  • 5.else必须写完整
  • 6.信号位宽必须写完整
  • 7.每一个逻辑符号前后都要空一格
  • 8.单/总连出(delay_1s),写在always模块最后

4.Module的例化编写规范

//------------------//Generate water led displayled_input_display#(    .LED_WIDTH      (8))u_led_input_display(    //global clock    .clk        (clk),    .rst_n      (rst_n),    //led interface    .led_en     (1'b1),    .led_value  (led_value),    .led_data   (led_date));

对于Moduel的例化,相当于C语言中的调用函数,需要注意信号列表的格式:
+ 1.每一个Module再例化前必须又module的功能说明
+ 2.Module的例化名采用u_xx的格式
+ 3.信号列表及wire都必须完全对齐
+ 4.相关信号必须写在一起,并且有注释

5.Testbench代码设计风格

1.Testbench文件头编写规范

具体设计格式参照Verilog代码风格。

2.Module列表编写规范

`timescale 1ns/1nsmodule Testbench_tb;wire    [7:0]   led_data;   //led testendmodule

Testbench 不同于Verilog HDL的地方是没有输入/输出类的信号定义,每个激励都是再当前文件中生成的,唯一与外界通信的wire是直连接道需要测试的Module上的。还应该遵循规范:
+ 1.Module前必须写`timescale 1ns/1ns
+ 2.Module后紧跟Testbench需要输出的信号(当模块多时, 紧跟当前modul)
+ 3.相关信号必须卸载一起,并且注释。
+ ×4.设计wire测试信号,测试脚本更加清晰。

后续会继续补充

0 0
原创粉丝点击