Verilog 代码规范

搬自https://hitsz-cslab.gitee.io/cpu/home/codingstyle/

1. 标题命名规范

1.1 标题文件命名规范

仿真文件应使用后缀“_sim”,如modulename_sim;

测试文件应使用后缀“_tb”,如modulename_tb。

1.2 模块命名规范

一个文件只定义一个module;

module名应与文件名一致;

module名用小写英文表示。

1.3 信号命名规范

用小写字母定义wire、reg和input、inout、output信号;

用大写字母定义parameter、localparam和宏定义;

信号名应反映信号的含义/用途,不建议使用单个字母命名;

变量名若含有多个单词,用下划线分开,如ram_addr;

输入信号应使用后缀“_i”,如addr_i;

输出信号应使用后缀“_o”,如data_o;

时钟信号应使用前缀“clk”,如clk_i;

复位信号应使用前缀“rst”,如rst_n_i;

低电平有效的信号应使用后缀“_n”,如cs_n;

使用降序排列定义向量有效位顺序,最低位为0。

2. 代码编写规范

2.1 模块定义规范

每个模块加timescale,Vivado默认为“`timescale 1ns / 1ps”;

一般可采用如图1、图2所示的两种写法来定义模块。建议使用如图2所示的写法。
在这里插入图片描述

图1 模块定义写法1
1|module some_module (
2|    input               clk_i,
3|    input               rst_n_i,
4|
5|    input       [1:0]   sel_i,
6|    input       [7:0]   addr_i,
7|    output reg  [7:0]   data_o
8|);
9|
10|    // 模块代码
11|    ......
12|
13|endmodule

图2 模块定义写法2

2.2 参数规范

不需在模块实例化时设置的参数,应将其定义为局部参数(localparam);

全局参数建议放在I/O端口前面,如图3所示。
在这里插入图片描述

图3 全局参数规范

2.3 模块实例化规范

模块实例应用U_xx_x表示(多次例化用序号0、1、2等表示);

一般可采用如图4、图5所示的两种写法来实例化模块。建议使用如图5所示的写法。

1|    some_module U_some_module_0 #(
2|        clk_fpga,
3|        rst_fpga_n,
4|        ......
5|    );

图4 模块实例化写法1
1|    some_module U_some_module_0 #(
2|        .clk_i      (clk_fpga),
3|        .rst_n_i    (rst_fpga_n),
4|        ......
5|    );

图5 模块实例化写法2

2.4 通用规范

尽量采用参数化设计;

所有的if语句应有与之对应的else;

case语句应考虑default情况;

if语句尽量不要嵌套太多;

if-else嵌套时使用图6所示的方式,尽量不使用图7所示的方式。

1|    if (...) begin
2|        ...
3|    end else if (...) begin
4|        ...
5|    end else begin
6|        ...
7|    end

图6 推荐的if-else嵌套方式
1|    if (...) begin
2|        if (...)
3|            ...
4|        else
5|            ...
6|    end else begin
7|        ...
8|    end

图7 不推荐的if-else嵌套方式
在RTL级代码中不能含有initial结构,也不可对任何信号进行初始化赋值。若需要初始化,应采用复位的方式;

尽量不产生未连接的端口;

数据位宽要匹配;

顶层模块的输出信号必须被寄存;

常量应标注其位宽,如1’b0;

不要使用include、wait、forever、repeat、while等语句;

如非必要,不使用integer类型;

尽量不使用复杂的表达式,可以使用三目运算符“?:”。

2.5 组合逻辑规范

尽量不使用always语句,除非需要使用case语句;

2.6 时序逻辑规范

采用同步设计,避免使用异步逻辑(全局信号复位除外);

同步时序逻辑的always块中有且只有一个时钟信号,并且在同一个沿动作(如上升沿);

在时序always块的敏感信号列表中必须都是沿触发,不允许出现电平触发;

敏感信号列表中不允许出现表达式;

除异步复位之外,敏感信号列表中不允许同时出现posedge和negedge;

时序逻辑语句块中统一使用非阻塞型赋值;

建议一个always块只对一个变量赋值;

建议多使用中间变量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/123220.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CPU及并发

2.9G Hz,即每秒进行2.9G次运算(即29亿次) 几个命令 us: 用户使用的cpu sy: 系统(内核)使用的cpu id: idle,即空闲cpu wa: 等待I/O的cpu st: 开虚拟机后会有的一个指标,即虚拟机的cpu使用率 一个进程拥有一整套虚拟地址空间,该进程的所有线程都共享该地址空间. 线程是CPU运算的最…

ZYNQ上的简单 FSK 基带发射器

绪论 由于某种需求需要生成正弦波,因此使用 C 应用程序中的sin()函数来计算单位圆的幅度值,然后将该幅度值转换为 AD9717 的适当 DAC 代码(当然将每个角度值转换为弧度)。 能够使用DAC生成简单的正弦波,下一个想法就是…

QT QToolBox控件使用详解

本文详细的介绍了QToolBox控件的各种操作,例如:新建界面、添加页签、索引设置当前项、获取当前项的索引、获取当前项窗口、获取索引值是int的窗口、移除索引值项、获取项的数量、获取指定索引值、设置索引项是否激活、获取索引值项是否激活、设置项的图标…

vue+antd——table组件实现动态列+表头下拉选择功能——技能提升

Table 表格 展示行列数据。 何时使用 当有大量结构化的数据需要展现时; 当需要对数据进行排序、搜索、分页、自定义操作等复杂行为时。 最近在写vueantd的框架,遇到一个需求:就是要实现table表格的动态列,并且相应的表头要实现下拉…

el-date-picker 禁止选择当前年之前或者之后的年份

<el-date-picker v-model"ruleForm.years" type"year" :disabled-date"pickerOptions"placeholder"请选择获奖年度" class"wih-650p" value-format"YYYY" />之前 const disabledDateFun (time: any) >…

用户案例 | 蜀海供应链基于 Apache DolphinScheduler 的数据表血缘探索与跨大版本升级经验

导读 蜀海供应链是集销售、研发、采购、生产、品保、仓储、运输、信息、金融为一体的餐饮供应链服务企业。2021年初&#xff0c;蜀海信息技术中心大数据技术研发团队开始测试用DolphinScheduler作为数据中台和各业务产品项目的任务调度系统工具。本文主要分享了蜀海供应链在海…

YOLO目标检测——火焰检测数据集+已标注xml和txt格式标签下载分享

实际项目应用&#xff1a;火灾预警系统、智能监控系统、工业安全管理、森林火灾监测以及城市规划和消防设计等应用场景中具有广泛的应用潜力&#xff0c;可以提高火灾检测的准确性和效率&#xff0c;保障人员和财产的安全。数据集说明&#xff1a;YOLO火焰目标检测数据集&#…

Python接口自动化封装导出excel方法和读写excel数据

一、首先需要思考&#xff0c;我们在页面导出excel&#xff0c;用python导出如何写入文件的 封装前需要确认python导出excel接口返回的是一个什么样的数据类型 如下&#xff1a;我们先看下不对返回结果做处理&#xff0c;直接接收数据类型是一个对象&#xff0c;无法获取返回值…

Java“牵手”微店商品列表数据,关键词搜索微店商品数据接口,微店API申请指南

微店商城是一个网上购物平台&#xff0c;售卖各类商品&#xff0c;包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取微店商品列表和商品详情页面数据&#xff0c;您可以通过开放平台的接口或者直接访问微店商城的网页来获取商品详情信息。以下是两种常用方法的介绍&…

【位运算】leetcode371:两整数之和

一.题目描述 两整数之和 二.思路分析 题目要求我们实现两整数相加&#xff0c;但是不能使用加号&#xff0c;应该立马想到是用位运算来解决问题。之前说过&#xff0c;异或就是“无进位相加”&#xff0c;故本题可以先将两数异或&#xff0c;然后想办法让得到的结果进位即可。…

Xubuntu16.04系统中解决无法识别exFAT格式的U盘

问题描述 将exFAT格式的U盘插入到Xubuntu16.04系统中&#xff0c;发现系统可以识别到此U盘&#xff0c;但是打不开&#xff0c;查询后发现需要安装exfat-utils库才行。 解决方案&#xff1a; 1.设备有网络的情况下 apt-get install exfat-utils直接安装exfat-utils库即可 2.设备…

任天堂开发全新独立VR设备,或为下一代主机?将提供混合现实体验

根据爆料人Nash Weedle在X平台上的发文&#xff0c;我们得知任天堂正在秘密开发一款全新的独立VR设备&#xff0c;该设备将拥有一块MicroLED屏幕&#xff0c;并且独立于任天堂传闻中的下一代主机。与此同时&#xff0c;谷歌也参与了这款VR产品的研发工作。 这一新的VR设备被设计…

iTunes备份文件在哪?苹果手机怎么恢复iTunes备份?

iTunes是苹果手机的一个常见应用&#xff0c;很多小伙伴都使用它来备份手机上的重要数据。通过iTunes备份数据到电脑后还可以进行随时管理和查看。itunes备份文件在哪&#xff1f;手机数据丢失怎么恢复iTunes备份&#xff1f;接下来&#xff0c;本文将给大家介绍一下&#xff0…

vue 脚手架新手入门(vue cli 3)

文章目录 1、vue中的 “:” 绑定和 “” 监听1.1、v-model 双向绑定 2、if 、else 、for3、computed 计算属性4、生命周期&#xff08;属性加载顺序&#xff09;5、watch 侦听器6、 components 组件6.1、props 从父组件获取收据6.2、emits 向父组件触发事件6.3、slots插槽&…

Agisoft/PhotoScan手动对齐照片

所以我到网上查了一下资料&#xff0c;了解了如何通过添加标记的方式&#xff0c;手动对齐照片。参考文档是PhotoScan的用户手册(http://www.agisoft.com/pdf/photoscan-pro_1_4_en.pdf)。 手动对齐照片&#xff0c;需要在未对齐照片上添加四个及以上标记&#xff0c;并在已对…

前端开发从 0 到 1 掌握 docker

文章目录 前端从 0 到 1 掌握 docker一、docker 的一些基础概念概念定义question&#xff1a;什么是docker&#xff1f; 为什么要使用docker&#xff1f; 二、实战操作 (墙裂建议读者实操一遍)Part1 - Linux CentOS 服务安装 DockerPart2 - 启动、使用、查看等命令Part3 - 示例…

羊城杯2023 部分wp

目录 D0nt pl4y g4m3!!!(php7.4.21源码泄露&pop链构造) Serpent(pickle反序列化&python提权) ArkNights(环境变量泄露) Ez_misc(win10sinpping_tools恢复) D0nt pl4y g4m3!!!(php7.4.21源码泄露&pop链构造) 访问/p0p.php 跳转到了游戏界面 应该是存在302跳转…

stable diffusion实践操作-随机种子seed

系列文章目录 stable diffusion实践操作 文章目录 系列文章目录前言一、seed是什么&#xff1f;二、使用步骤1.多批次随机生成多张图片2.提取图片seed3. 根据seed 再次培养4 seed使用4.1 复原别人图4.1 轻微修改4.2 固定某个人物-修改背景 三、差异随机种子1. webUI位置2. 什么…

Nebula数据库安装

1、什么是nebula NebulaGraph是一款开源的、分布式的、易扩展的原生图数据库&#xff0c;能够承载包含数千亿个点和数万亿条边的超大规模数据集&#xff0c;并且提供毫秒级查询。 2、利用docker-compose安装Nebula数据库 1、前提条件 主机中安装了docker主机中安装了Docke…

Linux上安装FTP

1、登录FTP&#xff0c;执行安装命令 yum -y install vsftpd 2、启动FTP服务器&#xff0c;设置开启自启动 systemctl enable vsftpd.service systemctl start vsftpd.service systemctl status vsftpd.service #查看状态, 显示active说明FTP启动成功 3、修改FTP配置文件/et…