0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Verilog HDL语言的数据类型和运算符

FPGA之家 来源:FPGA之家 作者:FPGA之家 2022-05-18 10:34 次阅读

1、标志符

标识符可以是一组字母、数字、下划线和$符号的组合,且标识符的第一个字符必须是字母或者下划线。另外,标识符区分大小写。要注意的是Verilog HDL定义了一系列保留字作为关键字,但只要小写的关键字才是保留字,所以对于不确定是否为保留字,可以将标识符首字母大写。

2、数据类型

1、wire型

Verilog程序模块中输入、输出信号类型默认时自定义为wire型。

wire型信号的定义格式如下:

wire[n-1:0] 数据名1,数据名2,...数据名N;

总共定义了N条线,每条线的位宽为n。

2、reg型

reg是寄存器数据类型的关键字,是数据存储单元的抽象,通过赋值语句可以改变寄存器存储的值。reg型数据常用来表示always模块内的指定信号,在always块内被赋值的每一个信号都必须定义为reg型。

reg型信号的定义格式如下:

wire[n-1:0] 数据名1,数据名2,...数据名N;

总共定义了N个寄存器变量,每条线的位宽为n。

3、memory型

Verilog通过对reg型变量建立数组来对存储器建模,memory型通过扩展reg型数据的地址范围来达到二维数组的效果。其定义的格式如下:

reg[n-1:0] 存储器名 [m-1:0];

其中,reg[n-1:0]定义了每一个存储器中每一个存储单元的大小;存储器后面的[m-1:0]则定义了存储器的大小。

eg:reg [15:0] ROMA [7:0];

即定义了一个存储位宽为16位,存储深度为8的一个存储器。

要注意的是,一个n位的寄存器可以在一条赋值语句中直接进行赋值,而一个完整的存储器则不行。如果要对memory型存储单元进行读写,则必须要指明地址。

4、parameter型

在Verilog HDL中用parameter来定义常量。

parameter型信号的定义格式如下:

parameter 参数名1=数据名1;

3、模块端口

1、input:模块从外界读取数据的接口,在模块内不可写。

2、output:模块往外界送出数据的接口,在模块内不可读。

3、inout:可读取数据也可送出数据,数据可双向流动。

4、常量集合

Verilog HDL有四种基本数值:

(1)0:逻辑0或“假”;

(2)1:逻辑1或“真”;

(3)x:未知;

(4)z:高阻。

1、整数

整数型可以按如下两种方式书写:简单的十进制数格式及基数表示格式。

(1)简单的十进制数格式

eg:45 -46

负数以补码表示。

(2)基数表示格式

基数表示的整数格式为:

[长度]'基数 数值

eg:6'b9 5'o9 9'd6

2、实数

(1)十进制计数法

eg:2.0 16539.236

(2)科学计数法

eg:235.12e2 5e-4

其中,e与E相同。

3、字符串

字符串是双引号内的字符序列,字符串不能分成多行书写。字符串是8位ASCLL值的序列。

eg:reg[1:8*7]Char;

Char="counter"

5、运算符和表达式

1、基本算术运算符

包含:+、-、*、/、%

其中,取模运算(%)结果的符号位和模运算的第一个操作数的符号保持一致(按照无符号进行运算,再对结果添加符号)。

2、赋值运算符

赋值运算分为连续赋值和过程赋值两种。

(1)连续赋值

连续赋值语句只能用来对线网型变量进行赋值,而不能对寄存器变量进行赋值,在实际使用时,有以下几种应用:

I.对标量线网型赋值

wire a,b;

assign a=b;

II.对矢量线网型赋值

wire [7:0] a,b;

assign a=b;

III.对矢量线网型中的某一位赋值

wire [7:0] a,b;

assign a[3]=b[1];

IV.对矢量线网型中的某几位赋值

wire [7:0] a,b;

assign a[3:0]=b[3:0];

V.对任意拼接的线网型赋值

wire a,b;

wire [1:0] c;

assign c={a,b};

(2)过程赋值

过程赋值主要用于两种结构化模块(initial模块和always模块)中的赋值语句,在过程块中只能使用过程赋值语句,不能出现连续赋值语句。其中,赋值操作符有两种:“=”和“<=”,分别代表阻塞赋值和非阻塞赋值。

过程赋值语句只能对寄存器类型的变量(reg、integer、real和time)进行操作。对于存储器类型,只能对指定地址单元的整个字进行赋值,不能对其中某些位单独赋值。

3、关系运算符

关系运算符共8种:>、>=、<、<=、==(逻辑相等)、!=(逻辑不相等)、===(实例相等)、!==(实例不相等)。

实例算子===和!==可以比较含有X和Z的操作数。

4、逻辑运算符

(1)&& 逻辑与

(2)|| 逻辑或

(3)!逻辑非

5、条件运算符

三目运算符,格式如下:

y = x ? a : b;

若第一个操作数y=x为True,算子返回第二个操作数a,否则返回第三个操作数b。

6、位运算符

按位进行逻辑运算,共有7中逻辑运算符:

~非、&与、|或、^异或、^~同或、~&与非、|~或非。

如果两个操作数的长度不相等,将会对较短的数高位补零,使输出结果的长度与位宽较长的操作数的长度保持一致。

7、移位运算符

左移<<一位相当于乘2,右移一位相当于除2.

s<

8、一元约简运算符

单目运算符。其运算过程为:首先将操作数的第一位与第二位进行与、或、非运算;然后再将结果和第三位进行与、或、非运算,以此类推,直至最后一位。

eg:reg [3:0] s1;

reg s2;

s2=&s1;

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5342

    浏览量

    120319
  • Verilog
    +关注

    关注

    28

    文章

    1351

    浏览量

    110091

原文标题:Verilog HDL语言(1) : Verilog HDL语言的数据类型和运算符

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Verilog与VHDL的比较 Verilog HDL编程技巧

    理解。 VHDL :VHDL 的语法更接近于 Ada 语言,它是一种更正式的语言,具有丰富的数据类型和结构。VHDL 支持数据流、行为和结构化三种描述方式。 2. 可读性和可维护性
    的头像 发表于 12-17 09:44 141次阅读

    逻辑异或运算符在Python中的用法

    在Python编程语言中,逻辑异或运算符并不直接作为一个内置的操作存在,因为Python更侧重于高级编程和可读性,并没有直接提供异或运算符的简写形式用于逻辑
    的头像 发表于 11-19 09:46 176次阅读

    C语言指针运算符详解

    在C语言中,当你有一个指向数组中某个元素的指针时,你可以对该指针执行某些算术运算,例如加法或减法。这些运算可以用来遍历数组中的元素,如ptr[i]等价于*(ptr + i)。然而,如果你的操作使得指针指向了数组以外的位置(除了数
    的头像 发表于 10-30 11:16 248次阅读

    Verilog语法中运算符的用法

    verilog语法中使用以下两个运算符可以简化我们的位选择代码。
    的头像 发表于 10-25 15:17 715次阅读
    <b class='flag-5'>Verilog</b>语法中<b class='flag-5'>运算符</b>的用法

    FPGA编程语言的入门教程

    编程基础 基本结构 Verilog程序的基本结构包括模块(module)和端口(port)定义。每个模块都有输入(input)、输出(output)和可能的双向(inout)端口。 数据类型
    的头像 发表于 10-25 09:21 257次阅读

    Verilog HDL的基础知识

    本文继续介绍Verilog HDL基础知识,重点介绍赋值语句、阻塞与非阻塞、循环语句、同步与异步、函数与任务语法知识。
    的头像 发表于 10-24 15:00 374次阅读
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>的基础知识

    技术干货驿站 ▏解锁C语言高效编程秘诀:深入解析运算符与优先级

    在C语言的学习过程中,运算符的使用是不可忽视的重要环节。本文将继续深入探讨C语言中的运算符,重点介绍位运算符、赋值
    的头像 发表于 10-13 08:09 255次阅读
    技术干货驿站 ▏解锁C<b class='flag-5'>语言</b>高效编程秘诀:深入解析<b class='flag-5'>运算符</b>与优先级

    技术干货驿站 ▏深入理解C语言:编程高手必备,全方位解析运算符的核心技能!

    在C语言的编程领域中,运算符是实现数据处理与逻辑操作的关键工具。无论是在处理简单的数值计算,还是在构建复杂的逻辑结构时,运算符的使用贯穿始终。作为编程
    的头像 发表于 09-18 15:56 351次阅读
    技术干货驿站 ▏深入理解C<b class='flag-5'>语言</b>:编程高手必备,全方位解析<b class='flag-5'>运算符</b>的核心技能!

    c语言从右到左的运算符有哪些

    以下是一些主要的从右到左运算的C语言运算符: 函数调用运算符 ( () ):当您调用一个函数时,参数列表是从右到左进行求值的。 后置递增运算符
    的头像 发表于 08-20 11:39 945次阅读

    TestStand表达式中常用的语法规则和运算符使用

    TestStand也有自己的语言嘛?在回答这个问题之前大家可以想一下在使用TestStand时有一个和语言密切相关的属性。没错那就是表达式(Expressions),在这篇文章中,小编将以Q&A的方式来带着大家来理解并熟悉TestStand表达式中较为常用的一些语法规则以
    的头像 发表于 08-15 18:10 1422次阅读
    TestStand表达式中常用的语法规则和<b class='flag-5'>运算符</b>使用

    技术干货驿站 ▏深入理解C语言:基本数据类型和变量

    在C语言中,数据类型和变量是编程的基础,也是理解更复杂概念的关键。数据类型决定了变量的内存分配、存储范围和操作方式,而变量则是存储数据的容器。本篇文章将从基本
    的头像 发表于 07-26 17:53 2123次阅读
    技术干货驿站 ▏深入理解C<b class='flag-5'>语言</b>:基本<b class='flag-5'>数据类型</b>和变量

    Golang为何舍弃三元运算符

    golang中不存在?:运算符的原因是因为语言设计者已经预见到三元运算符经常被用来构建一些极其复杂的表达式。虽然使用if进行替代会让代码显得更长,但这毫无疑问可读性更强。
    的头像 发表于 04-03 15:13 699次阅读

    鸿蒙TypeScript入门学习第5天:【TypeScript 运算符

    运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算
    的头像 发表于 04-01 16:18 488次阅读
    鸿蒙TypeScript入门学习第5天:【TypeScript <b class='flag-5'>运算符</b>】

    C语言数据类型有哪些

    在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。
    发表于 03-20 10:56 482次阅读
    C<b class='flag-5'>语言</b><b class='flag-5'>数据类型</b>有哪些

    西门子博途的算术表达式

    算术表达式既可以是一个数字值,也可以是由带有算术运算符的两个值或表达式组合而成。 算术运算符可以处理当前 CPU 所支持的各种数据类型。如果在该运算中有 2 个操作数,那么可根据以下条
    的头像 发表于 01-24 11:36 1009次阅读