[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
  // 条件为假时执行的代码
end

for (initialization; condition; increment) begin
  // 循环执行的代码
end

case (expression)
  value1: begin
  	// 执行代码
  end
  value2: begin
  	// 执行代码
  end
  default: 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) begin
      out = 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等。


参考文献


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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VM虚拟机打不开原来保存的虚拟机文件夹ubuntu

VMWare虚拟机打不开原来保存的虚拟机文件夹ubuntu 换了电脑把之前的虚拟机克隆的文件夹直接拿来用 报这个错: 指定的文件不是虚拟磁盘 打不开磁盘“D:\ubuntu_iso\ubuntu_location\Ubuntu 64 位-s002.vmdk”或它所依赖的某个快照磁盘。 模块“Disk”启动失败。 未…

图像生成算法评估指标

IS P(y|x)分布越尖越好,说明他质量好,能够被模型很好的识别;P(y)表示生成n张图片的概率的均值,越平说明每个类别生成越平均,说明多样性好;IS越大说明这两个分布差别越大,…

php查询数据库,并通过表格展示

第一步:创建数据库 创建一个数据库php-crud 第二步:创建数据库表 在数据库php-crud下创建一个歌曲表song /*Navicat Premium Data TransferSource Server : MariaDBSource Server Type : MariaDBSource Server Version : 100605 (10.6.5-M…

HarmonyOS给应用添加消息通知

给您的应用添加通知 通知介绍 通知旨在让用户以合适的方式及时获得有用的新消息,帮助用户高效地处理任务。应用可以通过通知接口发送通知消息,用户可以通过通知栏查看通知内容,也可以点击通知来打开应用,通知主要有以下使用场景…

nodejs微信小程序+python+PHP技术下的音乐推送系统-计算机毕业设计推荐

音乐推送系统采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作,采取MySQL作为后台数据的主要存储单元,  本文设计了一款音乐推送系统,系统为人…

PrimDiffusion:3D 人类生成的体积基元扩散模型NeurIPS 2023

NeurIPS2023 ,这是一种用于 3D 人体生成的体积基元扩散模型,可通过离体拓扑实现明确的姿势、视图和形状控制。 PrimDiffusion 对一组紧凑地代表 3D 人体的基元执行扩散和去噪过程。这种生成建模可以实现明确的姿势、视图和形状控制,并能够在…

CSS margin-trim

margin-trim 主角登场主角的局限性兼容性 margin-trim &#x1f9ea;这是一个实验性的属性, 目前仅有 Safari 支持 看这个属性的名字就知道, 外边距修剪. 平常都会遇到一些排版上的问题, 比如垂直排列的元素之间增加下外边距 <div><li>123</li><li>…

方差分析实例

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

SpringBoot2

将SpringBoot项目打包 将打好的jar包发给前端&#xff08;前端只需要安装jdk&#xff09; 在jar包所在目录执行dos命令&#xff1a;java -jar xxx.jar&#xff0c;就可以启动项目 也可以在命令后面修改配置&#xff0c;例如&#xff1a;java -jar xxx.jar --server.port8081&…

【MySQL】启动 和 连接 MySQL

启动停止 mysql安装成功后在cmd输入 net start mysql80 //启动 net stop mysql80 //停止 mysql连接 方式1. 通过客户端去连接 方式2.使用cmd去连接 描述&#xff1a;-u是指定 用户 -p是指定密码 mysql -u root -p password

哈希扩展:位图与布隆过滤器

目录 1. 位图1.1 位图引入1.2 位图概念1.3 位图的模拟实现1.4 位图相关问题1.5 位图的应用 2. 布隆过滤器2.1 布隆过滤器概念2.2 模拟实现2.3 布隆过滤器相关问题2.3.1 哈希切分 1. 位图 1.1 位图引入 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&…

MySQL,分组order by

一、创建分组 ## 创建分组 -- 返回每个发布会的参会人数 SELECT event_id,COUNT(*) as canjia_num FROM sign_guest GROUP BY event_id; 1、group by子句可以包含任意个列&#xff0c;但是但指定的所有列都是一起计算的。 group by 后2个字段一起计算的 2、group by后面可以跟…

QT Widget - 随便画个圆

简介 实现在界面中画一个圆, 其实目的是想画一个LED效果的圆。代码 #include <QApplication> #include <QWidget> #include <QPainter> #include <QColor> #include <QPen>class LEDWidget : public QWidget { public:LEDWidget(QWidget *pare…

正态总体的假设检验

一、三种情况 1.均值μ的假设检验 (1)σ已知 (2)σ未知 2.方差σ的假设检验 二、例题

Docker部署wordpress和Jenkins

准备机器&#xff1a; 192.168.58.151 &#xff08;关闭防火墙和selinux&#xff09; 安装好docker服务 &#xff08;详细参照&#xff1a;http://t.csdnimg.cn/usG0s 中的国内源安装docker&#xff09; 部署wordpress: 创建目录&#xff1a; [rootdocker ~]# mkdi…

【Java JVM】运行时数据区

JVM 在执行 Java 程序的过程中会把它管理的内存分为若干个不同的数据区域, 这些区域有着各自的用途。 根据《Java虚拟机规范》中规定, JVM 所管理的内存大致包括以下几个运行时数据区域, 如图所示: 这个运行时数据区被分为了 5 大块 方法区 (Method Area)堆 (Heap)虚拟机栈 (V…

Facebook广告系统结构

Facebook广告系统是一个复杂的大型系统&#xff0c;由多个组件和子系统相互配合工作&#xff0c;实现了广告的投放、拍卖、个性化推荐和效果评估等功能。下面小编讲讲Facebook广告系统的结构。 1、广告管理界面 广告管理界面是广告主与Facebook进行交互的入口&#xff0c;广告…

FlinkSQL中的窗口

多维分析 需求&#xff1a;有一张test表&#xff0c;表的字段为&#xff1a;A, B, C, amount, 其中A, B, C为维度字段&#xff0c;求以三个维度任意组合&#xff0c;统计sum(amount) Union方案&#xff1a; A, B, C的任意组合共有8种&#xff0c;分别为&#xff08;A, B,C,AB…

软件工程期末复习+数据仓库ETL

一、软件工程 请用基本路径测试方法为下列程序设计测试用例&#xff0c;并写明中间过程&#xff1a; 第1步&#xff1a;画出流程图 1.菱形用于条件判断。用在有分支的地方。 2.矩形表示一个基本操作。 3.圆形是连接点 第2步&#xff1a;计算程序环路复杂性 流图G的环路复杂…

设计模式——装饰模式(结构型)

引言 装饰模式是一种结构型设计模式&#xff0c; 允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。 假设你正在开发一个提供通知功能的库&#xff0c; 其他程序可使用它向用户发送关于重要事件的通知。 库的最初版本基于 通知器Notifier类&#xff0c;…