Verilog HDL 语言书写规范

0. verilog HDL 命名规则

类型命名方式实例
顶层文件对象+功能+topvideo_online_top.v
逻辑控制文件对象+ctrddr_ctr.v
驱动程序对象+功能+drilcd+dri.v
参数文件对象+paralcd+para.v
模块接口特征域+文件名+umcb_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+特征2fram_sync_i_r0
特性功能计数对象(+功能)(+对象)+cntline_cnt;rd_cnt;mem_wr_cnt
一般计数器cnt+序号cnt0
时许同步信号对象+功能+特征line_sync_i
使能信号(对象)+功能+enwr_en; fifo_wr_en

1. Verilog HDL 文件头编写规范

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

2. Module 列表编写规范

`timescale 1ns/1ns
model 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;   1s
reg[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 completed
wire 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 display
led_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/1ns
module Testbench_tb;
wire    [7:0]   led_data;   //led test
endmodule

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

后续会继续补充

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hyunnnnn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值