[Verilog] Verilog 基本格式和语法

主页: 元存储博客

全文 3000 字

文章目录

    • 1. 声明格式
      • 1.1 模块声明
      • 1.2 输入输出声明
      • 1.3 内部信号声明
      • 1.4 内部逻辑声明
      • 1.5 连接声明
      • 1.6 数据类型声明
      • 1.7 运算符和表达式
      • 1.8 控制结构
    • 2. 书写格式
      • 2.1 大小写
      • 2.2 换行
      • 2.3 语句结束符
      • 2.4 注释
      • 2.5 标识符
      • 2.6 关键字

1. 声明格式

1.1 模块声明

module module_name (input_list, output_list);// 模块内部的代码
endmodule

1.2 输入输出声明

input input_name;
output output_name;

1.3 内部信号声明

wire wire_name;
reg reg_name;

1.4 内部逻辑声明

assign wire_name = expression;  // 组合逻辑
always @(posedge clk) begin    // 同步逻辑// 时序逻辑代码
end

1.5 连接声明

module_name instance_name (input_list, output_list);

1.6 数据类型声明

logic [n-1 : 0] signal_name;  // n位逻辑类型
wire [n-1 : 0] signal_name;   // n位有线类型
reg [n-1 : 0] signal_name;    // n位寄存器类型

1.7 运算符和表达式

expression1 + expression2;    // 加法
expression1 - expression2;    // 减法
expression1 * expression2;    // 乘法
expression1 / expression2;    // 除法
expression1 & expression2;    // 与运算
expression1 | expression2;    // 或运算
expression1 ^ expression2;    // 异或运算
~expression;                  // 取反

1.8 控制结构

if (condition) begin// 条件为真时执行的代码
end else begin// 条件为假时执行的代码
endfor (initialization; condition; increment) begin// 循环执行的代码
endcase (expression)value1: begin// 执行代码endvalue2: begin// 执行代码enddefault: begin// 执行代码end
endcase

这只是Verilog语言的基本书写格式,Verilog文本文件通常以.v扩展名保存。实际应用中,还有其他更高级的功能和语法规则,可以根据具体需求进行学习和使用。

2. 书写格式

2.1 大小写

Verilog是一种区分大小写的编程语言。

2.2 换行

在Verilog中,编程格式是自由的,可以在一行内编写,也可以跨多行编写。

因此,下面两种编程方式是等效的。

不换行(不推荐的写法):

module myModule;output reg out;input a,b,c;always@(a or b or c)beginout=a&b|c;endendmodule

换行

module myModule;output reg out;input a,b,c;always @ (a or b or c) beginout = a & b | c;end
endmodule

为什么推荐换行
可读性:在代码中适当的换行可以增加代码的可读性,使代码更易于理解和维护。长长的一行代码可能会导致阅读不便,特别是当代码中包含多个操作符或函数调用时。

错误排查:如果代码出现错误,换行可以帮助更精确定位错误的位置。如果一行代码太长,错误信息可能会显示为超出屏幕范围,让开发者难以找到具体的错误。

2.3 语句结束符

每个Verilog语句必须以分号作为结束符。空白符(换行、制表、空格)在编译阶段可以被忽略。

2.4 注释

在Verilog中,有两种注释方式:单行注释和多行注释。

单行注释:使用"//"符号来注释单行代码。例如:

reg [3:0] count; // 这是一个单行注释

多行注释:使用"/“和”/"符号来注释多行代码。例如:

/*
定义了一个10位宽的有符号整数类型(wire [9:0])的变量age。然后通过赋值语句(assign)将age赋值为10位宽的二进制数10'b1。因为10'b11表示二进制数11,它的十进制值是3。
*/wire [9:0]  age;
assign age= 10'b11 ; 

2.5 标识符

  • 标识符只能包含字母、数字和下划线,不能以数字开头。
  • 标识符区分大小写。
  • 标识符的长度可以是任意的,但是一般不超过1024个字符。
  • Verilog有一些保留字,如always、module等,不能作为标识符使用。
  • 标识符不能包含特殊字符,如空格、制表符等。
  • 在Verilog中,常见的命名规范是使用小写字母和下划线,多个单词之间使用下划线分隔,例如:data_out、counter。

需要注意的是,虽然在Verilog中允许使用Unicode字符,但是为了保持代码的可读性,一般不建议在标识符中使用非ASCII字符。

2.6 关键字

Verilog的关键字包括以下内容:
在这里插入图片描述

and、always、assign、automatic、begin、buf、bufif0、bufif1、case、casex、casez、cmos、deassign、default、defparam、disable、edge、else、end、endcase、endfunction、endmodule、endprimitive、endspecify、endtable、endtask、event、for、force、forever、fork、function、highz0、highz1、if、ifnone、initial、inout、input、integer、join、large、macromodule、medium、module、nand、negedge、nmos、nor、not、notif0、notif1、or、output、packed、parameter、pmos、posedge、primitive、pull0、pull1、pulldown、pullup、rcmos、real、reg、release、repeat、rnmos、rpmos、rtran、rtranif0、rtranif1、scalared、signed、small、specify、specparam、strong0、strong1、supply0、supply1、table、task、time、tran、tranif0、tranif1、tri、tri0、tri1、triand、trior、trireg、unsigned、use、vectored、wait、wand、weak0、weak1、while、wire、wor、xnor、xor等。


参考文献


声明
本文仅为学习交流目的。
文中部分文字和图片来源于互联网,列在参考的文献,但可能有遗漏。如有侵权,请告知我删除。

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

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

相关文章

[RTOS移植]--STM32F767移植RTThread

文章目录 通过STM32cube创建一个工程选择要移植的RTOS源下载到本地如果没有重启软件选择对应配置后续补充 通过STM32cube创建一个工程 选择要移植的RTOS源 下载到本地 如果没有重启软件 选择对应配置 Build started: Project: STM32F767 *** Using Compiler V5.06 update 7 (b…

淘宝类目信息API接口获取淘宝商品分类信息API调用说明(含APIkey密钥)

cat_get-获得淘宝分类详情 item_cat_get-获得淘宝商品类目 公共参数 名称类型必须描述keyString是调用key(点此获取)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,item_search_…

Redis-数据结构

参考资料 极客时间Redis(亚风) Redis数据结构 SDS sds(Simple Dynamic String) 字符串接结构体: struct --attribute_- ((-_packed__)) sdshdr8{uint8_t len;/* buf已保祥的字符串字节数,不包含结束标示*/uint8_t alloc&#…

ArrayList和LinkedList区别

目录 一、性质不同 二、作用不同 三、特点不同 一、性质不同 1、arraylist:ArrayList就是动态数组,用MSDN中的说法,就是Array的复杂版本。 2、linkedlist:LinkedList 是一个继承于AbstractSequentialList的双向链表。 二、作…

Hadoop分布式配置小白篇(附加各阶段问题解决方式)

看的黑马的课,记录一下配置步骤 目录 1.VMware安装: 方法1: 方法2: 2.创建虚拟机 1.ISO镜像文件获取(CentOS): 2.创建(简略步骤) 3.克隆虚拟机(克隆伪…

nodejs+vue+微信小程序+python+PHP运动项目推荐系统-计算机毕业设计推荐

运动项目推荐系统的整体架构确定以后,再来看运动项目推荐系统的主要功能模块图。整体的功能模块包括前台和后台,前台只要实现了注册用户功能,主要的页面,包括首页,体育资讯,体育项目,公告信息等…

论文润色优化讨论部分 PaperBERT

大家好,今天来聊聊论文润色优化讨论部分,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧,可以借助此类工具: 标题:论文润色优化讨论部分――提升论文深度与影响力的关键…

方差分析实例

目录 方差分析步骤 相关概念 基本思想 随机误差 系统误差 组内方差 组间方差 方差的比较 方差分析的前提 1.每个总体都应服从正态分布 2.各个总体的方差必须相同 3.观察值是独立的 原假设成立 备择假设成立 单因素方差分析 提出假设 检验的统计量 水平的均值…

基于JSP+Servlet+Mysql的建设工程监管信息

基于JSPServletMysql的建设工程监管信息 一、系统介绍二、功能展示1.企业信息列表2.录入项目信息3.项目信息列表 四、其它1.其他系统实现五.获取源码 一、系统介绍 项目名称:基于JSPServlet的建设工程监管信息 项目架构:B/S架构 开发语言:…

漏刻有时数据可视化Echarts组件开发(44)提示框组件与返回多边形

CSS样式表 #lock_box {padding: 0;margin: 0;height: 100%;width: 100%;}.tipsBox {background: transparent url("images/tipsbg.png") top center no-repeat;width: 260px;height: 203px;box-shadow: none;}.tipsBox > p:first-child {padding-left: 35px;font…

git的安装及使用

git的安装及使用 git的安装 官网地址:https://git-scm.com/download/win 在任何位置输入bash或sh,进入git 设置用户名邮箱。 git config --global user.name “wfyfly” git config --global user.email 2423217861qq.com 查看配置信息 git config --list --globa…

C++核心编程思路(1):①程序的内存模型②引用的作用

文章目录 前言一、不同的存储类型变量,会被存储在什么区?①const修饰的局部变量放在栈区,全局变量放在只读数据区。②static修饰的全局和局部变量都放在静态区(即数据区中的一个小区) 二、栈区1.如果在函数A中定义了一…

2019年AMC8数学竞赛真题的典型考点和详细解析

从战争中学习战争。 对于2024年1月19日的AMC8竞赛,最后一个月的时间如何备考和冲刺取得更好的成绩?很多高分考生的经验是刷真题,查漏补缺。那么如何提高刷真题的效率呢?使用六分成长独家制作的在线真题集练习是个不错的方式&…

基于linux系统的Tomcat+Mysql+Jdk环境搭建(四)linux安装Mysql

1.切换到你需要安装mysql的路径 cd /root/usr/ 2.在线安装 安装网上的安装方式都有很多,可以自己百度一下 我们这里是自己搭建测试环境,可以直接选择在线安装,命令如下:yum install mysql-server, 但是我失败了 ┭┮…

【C++11特性篇】C++11中新增的initializer_list——初始化的小利器(2)

前言 大家好吖,欢迎来到 YY 滴C11系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! 目录 一.探究std::initializer_list是什么…

【MySQL】SQL通用语法 、介绍SQL分类

SQL通用语法 1.SQL语句可以单行或多行书写,以分号结尾 2.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。 3.注释: 单行注释: -- 或 # 多行注释: /* */ SQL分类 SQL分类主要分为4类 分别是 DDL DML DQL DCL

谷歌浏览器标签页显示内存使用率

Chrome 桌面浏览器的新更新现在可让您查看每个标签页占用了多少内存,这可以帮助您确定哪些标签页占用了多少内存,网站正在减慢您笔记本电脑的速度。 今年早些时候在 Google Chrome 中引入内存节省程序之后,Google 又发布了一项功能&#xff…

论文阅读:PointCLIP V2: Prompting CLIP and GPT for Powerful3D Open-world Learning

https://arxiv.org/abs/2211.11682 0 Abstract 大规模的预训练模型在视觉和语言任务的开放世界中都表现出了良好的表现。然而,它们在三维点云上的传输能力仍然有限,仅局限于分类任务。在本文中,我们首先协作CLIP和GPT成为一个统一的3D开放世…

科大讯飞(深圳)测开面试真题

一面(测试组长面) 1、上家公司项目以及团队的规模是怎么样的? 2、你负责的项目整体的流程是怎么样的? 3、自动化实施过程中,是如何和业务测试进行沟通的? 4、在上家公司你已经是专职做自动化了&#xf…

医药行业的数据安全革新者:上海迅软DSE成功案例揭秘

随着网络化办公在医药企业中不断的深入应用,企业内部的药品保密配方、研发成果、技术资料等重要信息都散布在电脑或流转于网络之中,同时各种内部系统又集中存放着大量的敏感数据,一旦这些数据资产发生泄密,将对企业的持续运营造成…