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

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

3天内不再提示

Verilog的基础知识

我快闭嘴 来源:博客园 作者:南明离火hk 2022-08-15 09:04 次阅读

本节主要讲解了 Verilog 的基础知识,包括 7 个小节,下面我们分别给大家介绍这 7 个小节的内容。

1.Verilog 的逻辑值

我们先看下逻辑电路中有四种值,即四种状态:

逻辑 0:表示低电平,也就是对应我们电路的 GND;

逻辑 1:表示高电平,也就是对应我们电路的 VCC;

逻辑 X:表示未知,有可能是高电平,也有可能是低电平;

逻辑 Z:表示高阻态,外部没有激励信号是一个悬空状态。

如下图所示:

a289540a-1c29-11ed-ba43-dac502259ad0.png

2.Verilog 的标识符

定义 :

标识符(identifier)用于定义模块名、端口名和信号名等。Verilog 的标识符可以是任意一组字母、数字、$和_(下划线)符号的组合,但标识符的第一个字符必须是字母或者下划线。另外,标识符是区分大小写的。以下是标识符的几个例子:

Count,COUNT //与 Count 不同,R56_68,FIVE$;

虽然标识符写法很多,但是要简洁、清晰、易懂,推荐写法如下:

Count,fifo_wr

不建议大小写混合使用,普通内部信号建议全部小写,参数定义建议大写,另外信号命名最好体现信 号的含义。

规范建议 :

以下是一些书写规范的要求:

1、用有意义的有效的名字如 sum、cpu_addr 等。

2、用下划线区分词语组合,如 cpu_addr。

3、采用一些前缀或后缀,比如:时钟采用 clk 前缀:clk_50m,clk_cpu;低电平采用_n 后缀:enable_n;

4、统一缩写,如全局复位信号 rst。

5、同一信号在不同层次保持一致性,如同一时钟信号必须在各模块保持一致。

6、自定义的标识符不能与保留字(关键词)同名。

7、参数统一采用大写,如定义参数使用SIZE。

3.Verilog 的数字进制格式

Verilog 数字进制格式包括二进制、八进制、十进制和十六进制,一般常用的为二进制、十进制和十六 进制。

二进制表示如下:4’b0101 表示 4 位二进制数字 0101;十进制表示如下:4’d2 表示 4 位十进制数字 2(二进制 0010);十六进制表示如下:4’ha 表示 4 位十六进制数字 a(二进制 1010),十六进制的计数方式为 0,1,2…9,a,b,c,d,e,f,最大计数为 f(f:十进制表示为 15)。当代码中没有指定数字的位宽与进制时,默认为 32 位的十进制,比如 100,实际上表示的值为 32’d100。

4.Verilog 的数据类型

在 Verilog 语法中,主要有三大类数据类型,即寄存器类型、线网类型和参数类型。从名称中,我们可 以看出,真正在数字电路中起作用的数据类型应该是寄存器类型和线网类型。

1) 寄存器类型

寄存器类型表示一个抽象的数据存储单元,它只能在 always 语句和 initial 语句中被赋值,并且它的值从一个赋值到另一个赋值过程中被保存下来。如果该过程语句描述的是时序逻辑,即 always 语句带有时钟信号,则该寄存器变量对应为寄存器;如果该过程语句描述的是组合逻辑,即 always 语句不带有时钟信号,则该寄存器变量对应为硬件连线;寄存器类型的缺省值是 x(未知状态)。寄存器数据类型有很多种,如 reg、integer、real 等,其中最常用的就是 reg 类型,它的使用方法如下:

//reg define

reg [31:0] delay_cnt; //延时计数器

reg key_flag ; //按键标志

2) 线网类型

线网表示 Verilog 结构化元件间的物理连线。它的值由驱动元件的值决定,例如连续赋值或门的输出。如果没有驱动元件连接到线网,线网的缺省值为 z(高阻态)。线网类型同寄存器类型一样也是有很多种,如 tri 和 wire 等,其中最常用的就是 wire 类型,它的使用方法如下:

//wire define

wire data_en; //数据使能信号

wire [7:0] data ; //数据

3) 参数类型

我们再来看下参数类型,参数其实就是一个常量,常被用于定义状态机的状态、数据位宽和延迟大小等,由于它可以在编译时修改参数的值,因此它又常被用于一些参数可调的模块中,使用户在实例化模块时,可以根据需要配置参数。在定义参数时,我们可以一次定义多个参数,参数与参数之间需要用逗号隔开。这里我们需要注意的是参数的定义是局部的,只在当前模块中有效。它的使用方法如下:

//parameter define

parameter DATA_WIDTH =8; //数据位宽为8位

5.Verilog 的运算符

大家看完了 Verilog 的数据类型,我们再来介绍下 Verilog 的运算符。Verilog 中的运算符按照功能可以分为下述类型:1、算术运算符、 2、关系运算符、3、逻辑运算符、 4、条件运算符、 5、位运算符、 6、移位运算符、 7、拼接运算符。下面我们分别对这些运算符进行介绍。

1) 算术运算符

算术运算符,简单来说,就是数学运算里面的加减乘除,数字逻辑处理有时候也需要进行数字运算,所以需要算术运算符。常用的算术运算符主要包括加减乘除和模除(模除运算也叫取余运算)如下表所示:

a2b33ed2-1c29-11ed-ba43-dac502259ad0.png

大家要注意下,Verilog 实现乘除比较浪费组合逻辑资源,尤其是除法。一般 2 的指数次幂的乘除法使用移位运算来完成运算,详情可以看移位运算符章节。非 2 的指数次幂的乘除法一般是调用现成的 IP, QUARTUS/ISE 等工具软件会有提供,不过这些工具软件提供的 IP 也是由最底层的组合逻辑(与或非门等)搭建而成的。

2) 关系运算符

关系运算符主要是用来做一些条件判断用的,在进行关系运算符时,如果声明的关系是假的,则返回值是 0,如果声明的关系是真的,则返回值是 1;所有的关系运算符有着相同的优先级别,关系运算符的优先级别低于算术运算符的优先级别如下表所示。

a2c254b2-1c29-11ed-ba43-dac502259ad0.png

3) 逻辑运算符

逻辑运算符是连接多个关系表达式用的,可实现更加复杂的判断,一般不单独使用,都需要配合具体语句来实现完整的意思,如下表所示。

a2edcbce-1c29-11ed-ba43-dac502259ad0.png

4) 条件运算符

条件操作符一般来构建从两个输入中选择一个作为输出的条件选择结构,功能等同于 always 中的 if-else 语句,如下表所示。

a3128c8e-1c29-11ed-ba43-dac502259ad0.png

5) 位运算符

位运算符是一类最基本的运算符,可以认为它们直接对应数字逻辑中的与、或、非门等逻辑门。常用 的位运算符如下表所示。

a3273fa8-1c29-11ed-ba43-dac502259ad0.png

位运算符的与、或、非与逻辑运算符逻辑与、逻辑或、逻辑非使用时候容易混淆,逻辑运算符一在条件判断上,位运算符一般用在信号赋值上。

6) 移位运算符

移位运算符包括左移位运算符和右移位运算符,这两种移位运算符都用 0 来填补移出的空位。如下表所示。

a33a27d0-1c29-11ed-ba43-dac502259ad0.png

假设 a 有 8bit 数据位宽,那么 a<<2,表示 a 左移 2bit,a 还是 8bit 数据位宽,a 的最高 2bit 数据被移位丢弃了,最低 2bit 数据固定补 0。如果 a 是 3(二进制:00000011),那么 3 左移 2bit,3<<2,就是 12(二进制:00001100)。一般使用左移位运算代替乘法,右移位运算代替除法,但是这种也只能表示 2 的指数次幂的乘除法。

7) 拼接运算符

Verilog 中有一个特殊的运算符是 C 语言中没有的,就是位拼接运算符。用这个运算符可以把两个或多个信号的某些位拼接起来进行运算操作。如下表所示。

a35bb864-1c29-11ed-ba43-dac502259ad0.png

8) 运算符的优先级

介绍完了这么多运算符,大家可能会想到究竟哪个运算符高,哪个运算符低。为了便于大家查看这些 运算符的优先级,我们将它们制作成了表格,如下表所示。

a36f38c6-1c29-11ed-ba43-dac502259ad0.png

6.注释

Verilog HDL 中有两种注释的方式,一种是以“/*”符号开始,“*/”结束,在两个符号之间的语句都是注释语句,因此可扩展到多行。如:

/*statement1 ,

statement2,

......

statementn */

以上 n 个语句都是注释语句。

另一种是以//开头的语句,它表示以//开始到本行结束都属于注释语句。如:

//statement1

建议的写法:使用//作为注释。

7.关键字

Verilog 和 C 语言类似,都因编写需要定义了一系列保留字,叫做关键字(或关键词)。这些保留字是识别语法的关键。我们给大家列出了 Verilog 中的关键字,如下表所示。

a3797764-1c29-11ed-ba43-dac502259ad0.png

虽然上表列了很多,但是实际经常使用的不是很多,实际经常使用的主要如下表所示。

a38fca00-1c29-11ed-ba43-dac502259ad0.png

注意只有小写的关键字才是保留字。例如,标识符 always(这是个关键词)与标识符 ALWAYS(非关键词)是不同的。

审核编辑:汤梓红


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

    关注

    28

    文章

    1351

    浏览量

    110113
  • 标识符
    +关注

    关注

    0

    文章

    12

    浏览量

    7360
  • GND
    GND
    +关注

    关注

    2

    文章

    539

    浏览量

    38725

原文标题:七步来学习掌握Verilog 基础知识

文章出处:【微信号:IC学习,微信公众号:IC学习】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    哪有FPGA的verilog编程基础知识

    没接触过FPGA开发,那个verilog编程有什么入门基础知识学习的?
    发表于 04-29 23:09

    Verilog HDL练习题和Verilog基础知识适合verilog新人

    Verilog HDL练习题和Verilog基础知识适合verilog新人Verilog HDL练习题.pdfVerilog
    发表于 08-15 15:08

    Verilog基础知识

    Verilog基础知识
    发表于 09-30 08:50

    【正点原子FPGA连载】第五章Verilog HDL语法-领航者ZYNQ之FPGA开发指南

    5.2Verilog基础知识5.3Verilog程序框架5.4Verilog高级知识点5.5Veril
    发表于 09-21 16:48

    Verilog HDL数字系统设计教程》(第四版)学习笔记 part1 Verilog数字设计基础——第一章知识点总结

    内容,有的没写在总结里,有的在总结里标注出了“存疑”二字,请各位读者阅读时留意。最后也欢迎各位读者指出文章中出现的错误!目录第一章Verilog基础知识1.1Verilog HDL开发的优势:1.2软核
    发表于 03-22 10:26

    Verilog HDL基础知识

    Verilog HDL基础知识:硬件描述语言是硬件设计人员和电子设计自动化工具之间的界面。其主要目的是用来编写设计文件,建立电子系统行为级的仿真模型即利用计算机的巨大能力对用
    发表于 05-31 19:33 49次下载

    Verilog基础知识

    发表于 08-18 12:53 0次下载

    Verilog基础知识教程

    发表于 03-04 14:07 14次下载

    Verilog基础知识

    Verilog基础知识,感兴趣的小伙伴们可以瞧一瞧。
    发表于 11-10 15:29 4次下载

    Verilog_HDL基础知识非常好的学习教程 (1)

    Verilog_HDL基础知识非常好的学习教程 (1)
    发表于 01-04 12:33 0次下载

    锆石FPGA A4_Nano开发板视频:Verilog基础知识和语法的讲解

      Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。
    的头像 发表于 09-27 07:08 1775次阅读
    锆石FPGA A4_Nano开发板视频:<b class='flag-5'>Verilog</b><b class='flag-5'>基础知识</b>和语法的讲解

    Verilog教程之Verilog HDL数字集成电路设计方法和基础知识课件

    本文档的主要内容详细介绍的是Verilog教程之Verilog HDL数字集成电路设计方法和基础知识课件
    发表于 12-09 11:24 53次下载
    <b class='flag-5'>Verilog</b>教程之<b class='flag-5'>Verilog</b> HDL数字集成电路设计方法和<b class='flag-5'>基础知识</b>课件

    Verilog基础知识

    对于Verilog描述初学者来说,最难的莫过于编写测试代码并判断自己写的是否正确。在这里我推荐一个HDL描述练习网站,这个网站上的练习题无需自己编写测试代码,写好逻辑代码之后上传,即可判断你的代码逻辑是否正确。网站链接如下:
    的头像 发表于 08-03 09:06 930次阅读

    verilog基础知识介绍

    组合逻辑:任何时刻电路的稳定输出,仅仅取决于该时刻各个输入变量的取值。
    的头像 发表于 05-29 09:16 1020次阅读
    <b class='flag-5'>verilog</b><b class='flag-5'>基础知识</b>介绍

    Verilog HDL的基础知识

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