Verilog 基础知识

这篇具有很好参考价值的文章主要介绍了Verilog 基础知识。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

Verilog 基础知识

1、Verilog 和 VHDL 区别

2、Verilog 和 C 的区别

3、Verilog 基础知识

3.1、Verilog 的逻辑值

3.2、Verilog 的标识符

3.2.1、规范建议

3.3、Verilog 的数字进制格式

3.4、Verilog 的数据类型

3.4.1、寄存器类型

3.4.2、线网类型

3.4.3、参数类型

4、Verilog 的运算符

4.1、算术运算符

4.2、关系运算符

4.3、逻辑运算符

4.4、条件运算符

4.5、位运算符

4.6、移位运算符

4.7、拼接运算符

4.8、运算符的优先级

5、程序框架

6、关键字


Verilog 基础知识

        Verilog HDL(Hardware Description Language)是在用途最广泛的 C 语言的基础上发展起来的一种硬件描述语言,具有灵活性高、易学易用等特点。Verilog HDL 可以在较短的时间内学习和掌握,目前已经在 FPGA 开发/IC 设计领域占据绝对的领导地位。

        Verilog 是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。数字电路设计者利用这种语言,可以从顶层到底层逐层描述自己的设计思想,用一系列分层次的模块来表示极其复杂的数字系统。然后利用电子设计自动化(EDA)工具,逐层进行仿真验证,再把其中需要变为实际电路的模块组合,经过自动综合工具转换到门级电路网表。接下来,再用专用集成电路 ASIC 或 FPGA 自动布局布线工具,把网表转换为要实现的具体电路结构。

1、Verilog 和 VHDL 区别

        这两种语言都是用于数字电路系统设计的硬件描述语言,而且都已经是 IEEE 的标准。 VHDL 1987 年成为标准,而 Verilog 1995 年才成为标准的。这是因为 VHDL 是美国军方组织开发的,而 Verilog 是由一个公司的私有财产转化而来。为什么 Verilog 能成为 IEEE 标准呢?它一定有其独特的优越性才行,所以说Verilog 有更强的生命力。

这两者有其共同的特点:

  • 1. 能形式化的抽象表示电路的行为和结构;
  • 2. 支持逻辑设计中层次与范围的描述;
  • 3. 可借用高级语言的精巧结构来简化电路行为和结构;
  • 4. 支持电路描述由高层到低层的综合转换;
  • 5. 硬件描述和实现工艺无关。

        但是两者也各有特点。Verilog 推出已经有 20 年了,拥有广泛的设计群体,成熟的资源,且 Verilog 容易掌握,只要有 C 语言的编程基础,通过比较短的时间,经过一些实际的操作,可以在 1 个月左右掌握这种语言。而 VHDL 设计相对要难一点,这个是因为 VHDL 不是很直观,一般认为至少要半年以上的专业培训才能掌握。

       近 10 年来,EDA 界一直在对数字逻辑设计中究竟用哪一种硬件描述语言争论不休,目前在美国,高层次数字系统设计领域中,应用 Verilog VHDL 的比率是 80%和 20%;日本与中国台湾和美国差不多;而在欧洲 VHDL 发展的比较好;在中国很多集成电路设计公司都采用 Verilog。我们推荐大家学习 Verilog,使用 Verilog 开发。

2、Verilog 和 C 的区别

        Verilog 是硬件描述语言,在编译下载到 FPGA 之后,FPGA 会生成电路,所以 Verilog 全部是并行处理与运行的;C 语言是软件语言,编译下载到单片机/CPU 之后,还是软件指令,而不会根据你的代码生成相应的硬件电路,而单片机/CPU 处理软件指令需要取址、译码、执行,是串行执行的。

        Verilog 和 C 的区别也是 FPGA 和单片机/CPU 的区别,由于 FPGA 全部并行处理,所以处理速度非常快,这个是 FPGA 的最大优势,这一点是单片机/CPU 替代不了的。

3、Verilog 基础知识

3.1、Verilog 的逻辑值

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

  • 逻辑 0:表示低电平,也就是对应我们电路的 GND;
  • 逻辑 1:表示高电平,也就是对应我们电路的 VCC;
  • 逻辑 X:表示未知,有可能是高电平,也有可能是低电平;
  • 逻辑 Z:表示高阻态,外部没有激励信号是一个悬空状态。

如下图所示:

Verilog 基础知识

3.2、Verilog 的标识符

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

  • Count
  • COUNT //与 Count 不同。
  • R56_68
  • FIVE$

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

  • count
  • fifo_wr

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

3.2.1、规范建议

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

  • 1、用有意义的有效的名字如 sumcpu_addr 等。
  • 2、用下划线区分词语组合,如 cpu_addr
  • 3、采用一些前缀或后缀,比如:时钟采用 clk 前缀:clk_50mclk_cpu;低电平采用_n 后缀: enable_n;
  • 4、统一缩写,如全局复位信号 rst
  • 5、同一信号在不同层次保持一致性,如同一时钟信号必须在各模块保持一致。
  • 6、自定义的标识符不能与保留字(关键词)同名。
  • 7、参数统一采用大写,如定义参数使用 SIZE

3.3、Verilog 的数字进制格式

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

  • 二进制表示如下:4’b0101 表示 4 位二进制数字 0101
  • 十进制表示如下:4’d2 表示 4 位十进制数字 2(二进制 0010);
  • 十六进制表示如下:4’ha 表示 4 位十六进制数字 a(二进制 1010),十六进制的计数方式为 01,2…9,abcdef,最大计数为 f(f:十进制表示为 15)。

       当代码中没有指定数字的位宽与进制时,默认为 32 位的十进制,比如 100,实际上表示的值为 32’d100。

3.4、Verilog 的数据类型

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

3.4.1、寄存器类型

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

       寄存器数据类型有很多种,如 regintegerreal 等,其中最常用的就是 reg 类型它的使用方法如下:

//reg define
reg [31:0]  delay_cnt; //延时计数器
reg         key_flag;  //按键标志

3.4.2、线网类型

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

//wire define
wire       data_en; //数据使能信号 
wire [7:0] data;    //数据

3.4.3、参数类型

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

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

4、Verilog 的运算符

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

4.1、算术运算符

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

Verilog 基础知识

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

4.2、关系运算符

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

Verilog 基础知识

4.3、逻辑运算符

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

Verilog 基础知识

4.4、条件运算符

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

Verilog 基础知识

4.5、位运算符

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

Verilog 基础知识

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

4.6、移位运算符

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

Verilog 基础知识

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

4.7、拼接运算符

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

Verilog 基础知识

4.8、运算符的优先级

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

 Verilog 基础知识

5、程序框架

       我们以 LED 流水灯程序为例来给大家展示 Verilog 的程序框架,代码如下所示(注意:代码中前面的行号只是为了方便大家阅读代码与快速定位到行号的位置,在实际编写代码时不可以添加行号,否则编译代码时会报错)。

Verilog 基础知识

 Verilog 基础知识

        在这里需要补充一点的是,在 always 语句中编写 if 语句或 else 语句时,后面需要加 begin end 吗?其实这个主要看 if 条件后面跟着几条赋值语句,如果只有一条赋值语句时,if 后面可以加 begin end,也可以不加;如果超过一条赋值语句时,就必须加上 begin end

       if 条件只有一条赋值语句时,下面两种写法都是可以的,这里更推荐第一种写法,因为第二种写法会占用更多的行号,代码如下所示:

Verilog 基础知识

6、关键字

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

Verilog 基础知识

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

Verilog 基础知识

        注意只有小写的关键字才是保留字。例如,标识符 always(这是个关键词)与标识符 ALWAYS(非关键词)是不同的。 文章来源地址https://www.toymoban.com/news/detail-484320.html

到了这里,关于Verilog 基础知识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数电与Verilog基础知识之同步和异步、同步复位与异步复位

    同步和异步是两种不同的处理方式,它们的区别主要在于是否需要等待结果。同步是指一个任务在执行过程中,必须等待上一个任务完成后才能继续执行下一个任务;异步是指一个任务在执行过程中,不需要等待上一个任务完成,可以同时执行多个任务。同步和异步的优缺点

    2024年02月14日
    浏览(53)
  • C#,入门教程(28)——文件夹(目录)、文件读(Read)与写(Write)的基础知识

    上一篇:   C#,入门教程(27)——应用程序(Application)的基础知识 https://blog.csdn.net/beijinghorn/article/details/125094837 C#知识比你的预期简单的多,但也远远超乎你的想象! 与 文件 相关的知识,不算多。 作为初学者,先学习 文本文件 的读写,就足够应付好几年了。 文件 自然是

    2024年01月23日
    浏览(56)
  • 路由器与交换机的区别(基础知识)

    交换机(Switch)是一种基于MAC(网卡的硬件地址)识别,能完成封装转发数据包功能的网络设备。 交换机可以“学习”MAC地址,并把其存放在内部地址表中,通过在数据帧的始发者和目标接收者之间建立临时的交换路径,使数据帧直接由源地址到达目的地址。 交换机分为:二层

    2024年02月03日
    浏览(55)
  • c#多线程—基础概念到“双色球”项目实现(附知识点目录、代码、视频)

    总结:视频中对于多线程讲的非常透彻,从线程基础概念—.net不同版本出现的线程方法—多线程常出现问题—双色球项目实践,每个知识点都有代码实操,受益匪浅。附上学习笔记和实操代码。 视频 线程:程序执行的最小单位,任何操作都是由线程完成的,使用同步时,资

    2024年02月11日
    浏览(52)
  • (学习笔记-TCP基础知识)TCP与UDP区别

    UDP不提供复杂的控制机制,利用IP提供面向[无连接]的通信服务。 UDP协议非常简单,头部只有8个字节(位),UDP的头部格式如下: 目标和源端口:主要是告诉UDP协议应该把报文发给哪个进程 包长度:该字段保存了UDP首部的长度跟数据的长度之和 校验和:提供可靠的UDP首部和数

    2024年02月17日
    浏览(42)
  • Docker 基础知识解析:容器与虚拟化的区别与优势

    🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通Golang(基础入门篇)》学会Golang语言

    2024年02月15日
    浏览(45)
  • vue基础知识十:Vue中组件和插件有什么区别?

    一、组件是什么 回顾以前对组件的定义: 组件就是把图形、非图形的各种逻辑均抽象为一个统一的概念(组件)来实现开发的模式,在Vue中每一个.vue文件都可以视为一个组件 组件的优势 降低整个系统的耦合度,在保持接口不变的情况下,我们可以替换不同的组件快速完成

    2024年02月08日
    浏览(38)
  • webpack基础知识十:与webpack类似的工具还有哪些?区别?

    一、模块化工具 模块化是一种处理复杂系统分解为更好的可管理模块的方式 可以用来分割,组织和打包应用。每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体(bundle) 在前端领域中,并非只有webpack这一款优秀的模块打包工具,还有其他类似的

    2024年02月13日
    浏览(33)
  • 基础知识:HTTP协议以及GET请求和POST请求的区别

    qq对于HTTP协议,做Web编程的开发人员再熟悉不过了。  不论是前端Html页面通过Ajax还是客户端通过 HttpClient 又或服务端与服务端之间的Rest请求,这都需要通过Http协议完成请求  。在HTTP协议中,我们最常用的是GET和POST请求,对于这两个方法,应该是最基础的东西。但是,两

    2024年02月08日
    浏览(94)
  • css基础知识二十:说说对Css预编语言的理解?有哪些区别?

    一、是什么 Css 作为一门标记性语言,语法相对简单,对使用者的要求较低,但同时也带来一些问题 需要书写大量看似没有逻辑的代码,不方便维护及扩展,不利于复用,尤其对于非前端开发工程师来讲,往往会因为缺少 Css 编写经验而很难写出组织良好且易于维护的 Css 代码

    2024年02月16日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包