电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

verilog语法介绍

60页
  • 卖家[上传人]:艾力
  • 文档编号:37681587
  • 上传时间:2018-04-20
  • 文档格式:PPTX
  • 文档大小:484.96KB
  • / 60 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、Verilog HDL Verilog语法中采用模块化结构,数据类型和变 量、基本的运算符号等基本的语法,这些内容看起 来比较简单,有许多语法对象和C语言也很类似, 但是,有许多地方则是完全不同的,所以在学习 Verilog语言时要特别注意不同点,并且学习 Verilog语言要与硬件结构、模块联系起来,通过 理解物理意义,牢牢掌握Verilog的语法。Verilog语言简介1. Verilog 模块结构 1 模块的定义 2 模块内容 3 变量定义 4 逻辑功能定义2. Verilog 基本语法 1 标识符,运算符和关键字 2 常用数据类型 3 常用行为语句 4 时延3. Verilog行为逻辑描述方式概 要1. Verilog 模块结构简单的Verilog HDL例子 例 8位全加器 module adder8 ( cout,sum,a,b,cin ); input 7:0 a,b; / 输入端口声明input cin;output cout; / 输出端口声明output 7:0 sum; assign cout,sum=a+b+cin; endmodule assign语句:无论右

      2、边表达式操作数何时发生变化, 右边表达式都会重新计算,并且在指定的延迟后给左 边表达式赋值。I/O说明端口定义功能描述模块名(文件名)模块abcoutsum cinVerilog的基本设计单元是“模块”(block)。一个模块是由两部分组成的,一部分是描述接口,另一部分是描述逻辑功能,即定义输入是如何影响输出的。一、模块的定义模块的端口声明了模块的输入输出口,其格式如下:module 模块名(口 1,口 2,口 3,口 4,);模块的端口表示的是模块的输入还是输出口名。1. Verilog 模块结构6二、模块内容模块的内容包括 I/O说明,内容信号声明和功能定义。1、I/O说明的格式输入口: input信号位宽-1:0端口名;输出口: output信号位宽-1:0端口名 ;输入输出口: (双向)inout 信号位宽-1:0 端口名; I/O说明也可以写在端口声明语句里。其格式如下:module module_name(input port1,input2,.output port1,output port2);两种声明方式是等价的!2.内部信号说明在模块内用到的和与端口有关的变量类型有

      3、二种wire和reg。如: regwidth-1:0 R变量1, R变量2;wire width-1 :0 W变量1,W变量2.; reg型数据用来表示“always”模块内的指定信号,例如触发器。 wire型数据用来表示“assign”关键字指定的组合逻辑信号。若不指定变量类型,默认为wire!Reg assign a = b abc没有存储功能,如何实现诸 如计数器功能?clkposedge 上升沿 reg 7 : 0 count;always (posedge clk)count ,=, ,这是一种全面的描述方式。2) 在 这种描述方式中,数字的位宽采用缺省位宽(这由具体的 机器系统决定,但至少32位)。3) 在这种描述方式中,采用缺省进制(十进制)。在表达式中,位宽指明了数字的精确位数。例: b10101100 /位宽为8的二进制表示,b表示二进制。ha2 /位宽为8的十六进制表示,h表示十六进制。数字表达方式有以下种:2.2 2.2 常用数据类型常用数据类型17(2) x和z的值。在数字电路中,x代表不定值,z代表高阻值。如果十六进制数表示,x用来定义位二进制的状态、八进制数

      4、代表 3位二进制的状态、二进制数代表1位二进制的状态。z的表示方式同x类似。z还有一种表达方式是可以写作“?”。 例: 4b10x0 /位宽为4的二进制数,从低位数起第2位为不定值。4b101z /位宽为4的二进制数,从低位数起第1位为高值值。12dz /位宽为12的十进制数,其值为高阻值。12d? /位宽为12的十进制数,其值为高阻值。8h4x /位宽为8的十六进制数,其低4位值为不定值。2.2 2.2 常用数据类型常用数据类型18(3) 负数。一个数字可以被定义为负数,只需在位宽表达式前加一个减号,减号必须 写在数字表达式的最前面。例: -8d5 /这个表达式代表5的补数(用八位二进制数表示)8d-5 /非法表示格式(4) 下画线。下画线可以用来分隔数的表达式以提高程序可读性,但不可以用在位宽 和进制处,只能用在具体的数字之间。例: 16b1010_1011_1111_1010 /合法格式8b_0011_1010 /非法格式但常量不说明位数时,默认值是32位。例: 10=32d10=32b1010 -1= -32d1=32hFFFFFFFF 2.2 2.2 常用数据类型常用数据类型

      5、19变量即在程序运行过程中其值可以改变的量。在Verilog HDL中变量的数据类型有很多种,介绍常用的几种。网络数据类型表示结构实体(例如门)之间的 物理连接。网 络类型的变量不能储存值,而且它必须受到驱动器的驱动。常用的网络数据类型包括wire型和 tri型. wire型变量通常是 用来表示单个门驱动或连续赋值语句驱动的网络型数据,tri型变量则用来表示多驱动器驱动的网络型数据。二、变量2.2 2.2 常用数据类型常用数据类型201.wire型wire型数据常用来表示以assign关键字指定的组合逻辑信号。wire型信号格式如下:wiren-1:0 数据名 1,数据名2,.数据名i;/共有i条总线,每条总线内有n条 线路,或数据名 1,数据名2,.数据名。wire是wire型数据的确认符; n-1:0和 n:1 代表该数据的位宽,最后跟着的是数据的名字。如果一次定义多个数据,数据名之间用逗号隔开。声明语句的 最后要用分号表示语句结束。例:wire a; /定义了一个1位的wire 型数据aWire 7:0 b; /定义了一个8位的wire 型数据b不可写作0:7212. reg型寄

      6、存器是数据储存单元。寄存器数据类型的关键字reg。通过赋值语 句可以改变寄存器储存的值,其作用与改变触发器储存的值相当。reg型数据常用来表示“always”模块内的 指定信号,常代表触发 器。reg型数据的格式如下:reg n-1:0 数据名1,数据名2,.数据名i;或 reg n:1 数据名1,数据名2,.数据名i; 如下面的例子:reg rega;/定义了一个1位的名为rega的reg型数据reg 3:0 regb;/定义了一个1位的名为regb的reg型数据reg 4:1 regc,regd;/定义了一个1位的名为regc和regd的reg型数据对于reg 型数据,其赋值语句的作用就如同改变一组触发器的存储器单元的值。reg 型数据的缺省初始值是不定值。可以赋正值,也可以赋负值。但当一个reg 型 数据是一个表达式中的操作数时,它的值被当作是无符号的值,即正值。22reg n-1:0 存储器名m-1:0;或 reg n-1:0 存储器名m:1;在这里,reg n-1:0定义了存储器中每一个存储单元的大小,即该存储器是一个 位的寄存器;存储器名后的m-1:0或m:1则定义了该存储

      7、器中有多少个这样的寄 存器,最后用分号结束。另外,在同一个数据类型声明语句里,可以同时定义存储器型数据和reg 型数 据。如下;parameter wordwize=16, /定义两个参数memsize=256;regwordsize-1:0 memmemsize-1:0,writereg,readreg;尽管memory型数据和reg型数据的定义格式很相似,但要注意不同之处。如一个由 n个1位寄存器构成的存储器组是不同于一个n位的寄存器的。如下:3.Memory型 menory型数据是通过扩展reg型数据的地址范围来生成的。其格式如下:23Regn-1:0 rega; /一个n位的寄存器Reg mema n-1;0; /一个由n个1位的寄存器构成的存储器组一个由位的寄存器可以在一条赋值语句里进行赋值,而一个完整的 存储 器则不行。如下:Rega=0; / 合法赋值语句Reg meman-1:0 / 非法赋值语句如果想对memory中的存储器单元进行读写操作 必须指定该单元在存储器中的地址。下面的写法是正确的。mema3=0 /给memory中的第3个存储单元赋值为0 2.3 常用行为

      8、语句一、赋值语句分为两类: (1)连续赋值语句assign语句,用于对wire型 变量赋值,是描述组合逻辑最常用的方法之一。例 assign c=a /a、b、c均为wire型变量(2)过程赋值语句用于对reg型变量赋值,有两 种方式: 非阻塞(non-blocking)赋值方式:赋值符号为b) out1=int1;else if (a=b) out1=int2; else out1=int3; 5点说明: (1) 3种形式的if语句在if后面有“表达式”,一般为逻辑表达式和关系表达式, 系统对表达式的值进行判断,若为0,x,y,按假处理;若为1,按真处理,执行指定的语句;(2) 第(2)(3)种形式的if语句,在每个else前面有一个分号,整个语句结束处有一个分号,例如:if (ab) out1=int1;else out1=int2;各有一个分号;(3) 在if和else后面可以包含一个内嵌的操作语句,也可以有多个操作语句, 此时可用begin和end这两个关健词将几个语句包含起来成为一个复合块语句。例如: if (ab)beginout1 endcase (2 )casez (表

      9、达式)endcase (3) casex (表达式)endcasecase 分支项的一般格式如下:分支表达式: 语句;默认项(default 项):语句;34说明: (1 )case括号内的表达式为控制表达式,case分支项中的表达式称为分支表达式。控制表达式通常表示为控制信号的某些位,分支表达式则用这些控制信号的具体状态值来表示,因此分支表达式又可以称为常量表达式。 (2) 当控制表达式的值与分支表达式的值相等时,就执行分支表达式后面的语句。如果所有分支表达式的值没有与控制表达式的值相匹配,就执行 default项。(3) default项可有可无,一个case语句只准有一个default项。下面使用case语句的例子,该例子中对寄存器rega译码,以确定result的值。35reg15:0 rega; reg9:0 result; case(rega) 16d0: result = 10b0111111111; 16d1: result = 10b1011111111; 16d2: result = 10b1101111111; 16d3: result = 10b1110111111; 16d4: result = 10b1111011111; 16d5: result = 10b1111101111; 16d6: result = 10b1111110111; 16d7:

      《verilog语法介绍》由会员艾力分享,可在线阅读,更多相关《verilog语法介绍》请在金锄头文库上搜索。

      点击阅读更多内容
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.