Verilog基本语法初学
一、语言要素
(一)概述
1、空白符(White Space)
空格、换行、换页、Tab等;
是代码错落有致,提高可读性。
2、注释(Comment)
单行注释:“ // ”;
多行注释:“ /* ”~“ */ ”。
3、标识符(Identifier)
字母、数字、_、$,最长1023个字符。
4、关键字(Key Word)
所有的关键字都是小写的。
5、运算符(Operator)
(二)常量
1、整数(Integer)
+/-<位宽>’<进制><数字>
(1)较长的数之间可用下划线分开;
(2)未定义整数位宽,则默认32位;
(3)定义位宽比数值位数长,通常在左边填0补位,如果数最左边一位为x或z,就相应地用x或z在左边补位;
(4)“?”是高阻态z的另一种表示符号,数字表示中与“z”等价可互相替代;
(5)x(或z)在二进制中代表1位x(或z),在八进制中代表3位x(或z),在十六进制中代表4位x(或z),其代表的宽度取决于所用的进制。;
(6)整数可以带符号,且正负号应写在最左边,负数通常表示为二进制补码形式;
(7)位宽与进制默认时默认是十进制数;
(8)位宽和’之间、进制与数值之间允许出现空格,‘和进制之间、数值之间不允许出现空格;
(9)带符号整数定义;例:8’sh5a。
2、实数(Real)
十进制表示法 小数点两侧都必须有数字;
科学计数法
实数转整数 四舍五入
3、字符串(String)
reg型变量
若声明的reg型变量位数大于字符串实际长度,则赋值操作后字符串变量的左端(即高位)补0;若小于,则字符串左端被截去。
(三)数据类型
1、四值逻辑:
0:低电平、逻辑0或逻辑非;
1:高电平、逻辑1或“真”;
z或Z:高阻态;
x或X:不确定或未知的逻辑状态。
2、数据类型:
net型;
相当于硬件电路各物理连接,特点是输出的值紧跟输入值的变化而变化。
(1)wire型
默认为wire型。位连接到驱动,值为高阻态。
(2)tri型
增加程序可读性,可以更清除地表示该信号综合后的电路连线具有三态的功能。
variable型(register型)。
(1)reg型
综合时综合器根据具体情况映射成寄存器或连线。
(2)integer型
多用于表示循环的变量。不能做为位向量访问。
综合时初始值为x。
(3)real型
表示实数寄存器,主要用于仿真,不可综合。
(4)time型
用于对模拟时间的存储与处理,不可综合。
(四)参数
1、参数parameter
2、参数声明
3、参数传递
(1)“#”符号隐式重载
(2)在线显式重载
(3)defparam语句显示重载
4、localparam
定义局部参数。
(五)向量
1、标量与向量
2、位选择和域选择
3、存储器
(六)运算符
1、算数运算符
+
-
*
/
%
2、逻辑运算符
&&
||
!
3、位运算符
~
&
|
^
^~ ,~^
4、关系运算符
<
<=
>
>=
5、等式运算符
== 相等运算符
!=
=== 全等运算符
!==
6、缩减运算符(是单目运算符)
&
~&
|
~|
^ 异或
^~ , ~^ 同或
7、移位运算符
>>
<<
>>>
<<<
算数移位操作符"<<<"">>>"
8、指数运算符
**
9、条件运算符
?:
10、位拼接运算符
{ }
将两个或多个信号某些位拼接起来;符号位扩展;嵌套使用;移位操作。
11、运算符的优先级
二、语句语法
(一)过程语句
initial:用于初始化,只执行一次;
always:重复执行,可综合。
always过程语句
带触发条件
1、敏感信号列表“sensitivity list”
边沿敏感型、电平敏感型
2、posedge与negedge关键字
posedge clk:时钟信号clk的上升沿作为触发条件;
negedge clk:时钟信号clk的下降沿作为触发条件。
3、Verilog-2001标准对敏感信号列表
(1)敏感信号列表中可用逗号分隔敏感信号
(2)敏感信号列表中使用通配符“**”
4、用always过程块实现较复杂的组合点亮
initial过程语句
initial语句不带触发条件,其块语句沿时间轴只执行一次。
(二)块语句
串行块begin-end
并行块fork-join
(三)赋值语句
1、持续赋值与过程赋值
assign 为持续赋值语句,主要用于对wire型变量的赋值;
过程赋值语句主要用于对reg型变量进行赋值。
2、阻塞赋值与非阻塞赋值
(四)条件语句
if-else语句
case语句
1、case语句
2、casez与casex语句
(五)循环语句
for语句
repeat语句:连续执行一条语句n次
while语句
forever语句:连续执行语句;多用在initial块中,以生成时钟等周期性波形。
(六)编译指示语句
1、宏替换define
2、文件包含include
3、条件编译ifdef、else、endif
if 宏名
endif
当宏名在程序中被定义过的话,则下面的语句块参与源文件的编译,否则,该语句块将不参与源文件的编译。
(七)任务与函数
1、任务
2、函数
(八)顺序执行与并发执行
(九)Verilog—2001语言标准
1、改进和增强的语法结构
提高Verilog行为级和RTL级建模的能力;
改进Verilog在深亚微米设计和IP建模的能力;
纠正和改进了Verilog-1995标准中的错误和易产生歧义之处。
(1)ANSI C风格的模块声明
(2)逗号分隔的敏感信号表
(3)在组合逻辑敏感信号列表中使用通配符“ * ”
(4)generate语句
(5)带符号的算数扩展
(6)指数运算符 * *
(7)变量声明时进行赋值
(8)常数函数
(9)向量的位选和域选
(10)多维矩阵
(11)矩阵的位选则和部分选择
(12)模块的实例化时的参数重载
(13)register改为variable
(14)新增条件编译语句
(15)超过32位的自动宽度扩展
(16)可重入任务(Re-entrant Task)和递归函数(Recursive Function)
(17)文件和行编译指示
2、属性及PLI接口
(1)设计管理
(2)属性
(3)增强的文件输入、输出操作
(4)VCD文件的扩展
(5)提高了对SDF(标准延时文件)的支持
(6)编程语言接口(PLI)的改进
三、Verilog设计的层次与风格
(一)Verilog设计的层次
抽象级别5级:
系统级(System Level)
算法级(Algorithm Level)
寄存器传输级(Register Transfer Level,RTL)
门级(Gate Level)
开关级(Switch Level)
描述方式:
结构(Structural)描述
行为(Behavioural)描述
数据流(Data Flow)描述
(二)门级结构描述
1、门元件
2、门级结构描述
3、行为描述
4、数据流描述
5、不同描述风格设计
6、多层次结构电路设计
7、基本组合电路设计
8、基本时序电路设计
9、三态逻辑设计
Verilog基本语法初学相关推荐
- b 计数器位选信号 verilog_Verilog HDL菜鸟学习笔记———三、Verilog常用语法之一...
1.一个完整版实例 上一次Verilog学习笔记中,我通过几个小例子,较为直观的对Verilog编程有了一些了解.这次笔记,我开始着重的系统学习Verilog编程语法基础.在我系统学习语法之前,我先用 ...
- 【正点原子FPGA连载】 第七章 Verilog HDL语法 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0
1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: h ...
- 【正点原子FPGA连载】第七章Verilog HDL语法 -摘自【正点原子】新起点之FPGA开发指南_V2.1
1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:ht ...
- Verilog HDL 语法整理 (一)
目录 导读 一.模块结构 1.模块的端口定义 2.模块内容 二.数据类型 1.常量 2.参量 3.变量 1.寄存器数据类型 2.线网型数据类型 参考声明 导读 本篇博文主要介绍Verilog HDL ...
- Verilog HDL 语法学习笔记
今天给大侠带来Verilog HDL 语法学习笔记,话不多说,上货. 关于详细的VHDL语法以及Verilog HDL语法可参见往期文章. 一周掌握 FPGA VHDL Day 7 暨汇总篇 一周掌握 ...
- RTL是什么,Verilog的语法能不能看我的这一篇大致知道。
Verilog HDL是一种硬件描述语言(HDL:Hardware Description Language),以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图.逻辑表达式,还可 ...
- 一周掌握FPGA Verilog HDL语法 day 4
今天给大侠带来的是一周掌握FPGA Verilog HDL 语法,今天开启第四天. 一周掌握FPGA Verilog HDL语法 day 3 被平台综合了,如果想要看详细介绍的话,可以到公众号内部&q ...
- Verilog全新语法认识--Xilinx language template
文章目录 0.背景 1.verilog语法篇 1.1.common constructs 1.2 .compiler directives(编译指令) define include timescale ...
- verilog always语法_Verilog初级教程(20)Verilog中的`ifdef 条件编译语句
前言 `ifdef条件编译语句在逻辑设计中还是很常见的,但也常见一些滥用的情况,这应该避免. 应该在什么情况下使用呢? 例如:一部分代码可能有时候用,有时候不用,为了避免全部编译占用资源,可以使用条件 ...
最新文章
- Compressor detection can only be called on some ……
- CListCtrl使用条款
- TCP的三次握手与四次挥手图文
- 深度学习的实用层面 —— 1.14 关于梯度检验实现的标记
- 带你读AI论文:SDMG-R结构化提取—无限版式小票场景应用
- 全面总结Java泛型
- 分享400多道算法题,来挑战吧
- NOSQL数据库习题
- glide 4.0 之后 和圆角裁剪CenterCrop冲突
- 如何下载并安装 LaTex
- SVG格式文件可以用什么软件打开?
- CAJ转PDF,仅需5秒还免费,PDF文字还能复制
- P2P流媒体技术原理及应用
- 程序员的2023发展方向
- 原生小程序实现折线图wx-charts(比echars体积小很多)
- ios 保存html,iOS 9“保存PDF到iBooks”与HTML
- 什么是业务,什么是业务架构?
- 理解Java并发编程
- Centos 误删rpm命令拯救
- 两家新三板CRM公司公布业绩 中国SaaS市场能否出个Salesforce?
热门文章
- JPA 2 | 获取联接以及我们是否应该使用它们
- 像Java这样的C ++具有低延迟
- Hibernate继承:每个类层次结构的表
- image 闪烁 c# ajax updatepanel,Why doesn't asp:UpdatePanel refresh an Image?
- java方法2数据求和_Leet Code 2 Add Two Numbers - 链表表示的两个数求和 - Java
- javascript等待异步线程完成_前端:什么是单线程,同步,异步?彻底弄懂 JavaScript 执行机制...
- MySQL联合索引原理_复合索引_组合索引_多列索引
- Java变量(静态变量/成员变量/局部变量)初始化的问题
- 数学建模python教材推荐_数模竞赛专攻python应该准备什么?
- order by 影响效率么_提升开发效率N倍的20+命令行神器