[Verilog] Verilog 基本格式和语法

news2024/11/24 5:54:20

主页: 元存储博客

全文 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等。


参考文献


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

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

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

相关文章

docker入门小结

docker是什么?它有什么优势? 快速获取开箱即用的程序 docker使得所有的应用传输就像我们日常通过聊天工具文件传输一样,发送方将程序传输到超级码头而接收方也只需通过超级码头进行获取即可,就像一只鲸鱼拖着货物来回运输一样。…

linux一次性调度执行_at命令

........................................................................................................................................................... 9.1 一次性调度执行 Schedule one-time tasks with at. ............................................…

早上好,我的leetcode 【hash】(第二期)

写在前面:坚持才是最难的事情 C代码还是不方便写,改用python了,TAT 文章目录 1.两数之和49. 字母异位词分组128.最长连续序列 1.两数之和 你好,梦开始的地方~ https://leetcode.cn/problems/two-sum/description/?envTypestudy…

n维随机变量、n维随机变量的分布函数

设随机试验E的样本空间是,其中表示样本点。 设是定义在上的随机变量,由它们构成一个n维向量,叫做n维随机向量,也叫n维随机变量。 对于任意n个实数,n元函数 称为n维随机变量的分布函数,也叫联合分布函数。

qt 标准对话框的简单介绍

qt常见的标准对话框主要有,标准文件对话框QFileDialog,标准颜色对话框QColorDialog,标准字体对话框QFontDialog,标准输入对话框QInputDialog,标准消息框QMessageBox...... 1. 标准文件对话框QFileDialog,使用函数getOpenFileName()获取用户选择的文件. //qt 函数getOpenFileN…

geolife笔记:比较不同轨迹相似度方法

1 问题描述 在geolife 笔记:将所有轨迹放入一个DataFrame-CSDN博客中,已经将所有的轨迹放入一个DataFrame中了,我们现在需要比较,在不同的轨迹距离度量方法下,轨迹相似度的效果。 这里采用论文笔记:Deep R…

arthas 线上排查问题基本使用

一、下载 [arthas下载地址]: 下载完成 解压即可使用 二、启动 java -Dfile.encodingUTF-8 -jar arthas-boot.jar 如果直接使用java -jar启动 可能会出现乱码 三、使用 启动成功之后 arthas会自动扫描当前服务器上的jvm进程 选择需要挂载的jvm进程 假如需要挂在坐标【1】的…

【MySQL】(DDL) 数据类型 和 表操作-修改 删除

目录 介绍: 1.数值类型 3.日期类型 修改表: 示列: 介绍: 在之前建表语句内,用到了 int cvarchar ,那么在mysql内除了 以上的数据类型 还有那些常见数据类型 mysql 中的数据类型有很多种 &#xff0c…

机器学习 | 决策树 Decision Tree

—— 分而治之,逐个击破 把特征空间划分区域 每个区域拟合简单模型 分级分类决策 1、核心思想和原理 举例: 特征选择、节点分类、阈值确定 2、信息嫡 熵本身代表不确定性,是不确定性的一种度量。 熵越大,不确定性越高,…

maui中实现加载更多 RefreshView跟ListView 跳转到详情页 传参(3)

效果如图 这里的很多数据是通过传参过来的的。 代码 例表页加入跳转功能&#xff1a; <ListView ItemsSource"{Binding Items}" ItemAppearing"OnItemAppearing" ItemTapped"OnItemTapped" RowHeight"70" Margin"20"…

【C++11特性篇】一文助小白轻松理解 C++中的【左值&左值引用】【右值&右值引用】

前言 大家好吖&#xff0c;欢迎来到 YY 滴C系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一.【左值&#xff06;左值引用】&…

【漏洞复现】CVE-2023-36076:smanga漫画阅读系统 远程命令执行 漏洞复现 附POC 附SQL注入和任意文件读取

漏洞描述 无需配置,docker直装的漫画流媒体阅读工具。以emby plex为灵感,为解决漫画阅读需求而开发的漫画阅读器。在windows环境部署smanga安装环境面板,首先安装小皮面板,下载smanga项目,导入数据库,登录smanga,windows部署smanga。 /php/manga/delete.php接口处存在未…

arthas获取spring bean

参考文章 arthas获取spring bean 写一个工具Util package com.example.lredisson.util;import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import o…

工具在手,创作无忧:一键下载安装Auto CAD工具,让艺术创作更加轻松愉悦!

不要再浪费时间在网上寻找Auto CAD的安装包了&#xff01;因为你所需的一切都可以在这里找到&#xff01;作为全球领先的设计和绘图软件&#xff0c;Auto CAD为艺术家、设计师和工程师们提供了无限的创作潜力。不论是建筑设计、工业设计还是室内装饰&#xff0c;Auto CAD都能助…

ES-组合与聚合

ES组合查询 1 must 满足两个match才会被命中 GET /mergeindex/_search {"query": {"bool": {"must": [{"match": {"name": "liyong"}},{"match_phrase": {"desc": "liyong"}}]}}…

Next.js 学习笔记(一)——安装

安装 系统要求&#xff1a; Node.js 18.17 或更高版本支持 macOS、Windows&#xff08;包括 WSL&#xff09;和 Linux 自动安装 我们建议使用 create-next-app 启动一个新的 Next.js 应用程序&#xff0c;该应用程序会自动为你设置所有内容。要创建项目&#xff0c;请运行&…

HPV治疗期间如何预防重复感染?谭巍主任讲述具体方法

众所周知&#xff0c;人乳头瘤病毒(HPV)是一种常见的性传播疾病&#xff0c;感染后可能会引起生殖器疣、宫颈癌等疾病。在治疗期间&#xff0c;预防重复感染非常重要。今日将介绍一些预防HPV重复感染的方法。 1. 杜绝不洁性行为 在治疗期间&#xff0c;患者应该避免与感染HPV…

SQL、Jdbc、JdbcTemplate、Mybatics

数据库&#xff1a;查询&#xff08;show、select&#xff09;、创建&#xff08;create)、使用(use)、删除(drop)数据库 表&#xff1a;创建&#xff08;【字段】约束、数据类型&#xff09;、查询、修改&#xff08;alter *add&#xff09;、删除 DML&#xff1a;增加(inse…

R语言|分面中嵌入趋势线

简介 关于分面的推文&#xff0c;小编根据实际科研需求&#xff0c;已经分享了很多技巧。例如&#xff1a; 分面中添加不同表格 分面中添加不同的直线 基于分面的面积图绘制 分面中的细节调整汇总 基于分面的折线图绘制 最近科研中又遇到了与分面相关的需求&#xff1a;…

Java 第12章 异常 本章作业

1 编程 两数相除的异常处理 各自属于哪些异常&#xff1a; 数据格式不正确 NumberformatException 缺少命令行参数 ArrayIndexOutOfBoundsException 除0异常处理 ArithmeticException ArrayIndexOutOfBoundsException 为数组下标越界时会抛出的异常&#xff0c;可以在检测到命…