VerilogHDL基础语法.ppt_第1页
VerilogHDL基础语法.ppt_第2页
VerilogHDL基础语法.ppt_第3页
VerilogHDL基础语法.ppt_第4页
VerilogHDL基础语法.ppt_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VerilogHDL基础语法 本章主要内容 VerilogHDL语言的特点VerilogHDL语言的描述方式模块与端口注释常量 变量与逻辑值操作符操作数参数编译指令系统任务和函数程序实例 3 1VerilogHDL的特点 并行性 所谓的并行性就是说可以同时做几件事情 Verilog语言不会顾及代码顺序问题 几个代码块可以同时执行 而软件语言必须按顺序执行 上一句执行不成功 就不能执行下一句 时序性 Verilog语言可以用来描述过去的时间和相应发生的事件 而软件语言则做不到 互连 互连是硬件系统中的一个基本概念 Verilog语言中的wire变量可以很好地表达这样的功能 而软件语言并没有这样的描述 3 2VerilogHDL的描述方式 VerilogHDL采用三种描述方式来进行设计 数据流描述 采用assign语句 连续赋值 数据实时变化 赋值对象一般定义为wire型 行为级描述 使用always或者initial语句 过程赋值 赋值对象一般定义为reg型 不一定会形成寄存器 结构化模型 通过实例化已有的功能模块来建模 在一个设计中我们往往会混合使用这三种描述方式 VerilogHDL是对大小写敏感的语言 同样的词汇 大写和小写是不同的符号 图3 1典型的Verilog设计描述示意图 3 3模块和端口 模块是Verilog的基本描述单元 可大可小 大到一个复杂的系统 小到一些基本的逻辑门单元 主要用来描述某个设计的功能或结构及其与其他功能模块通信的外部端口 对于模块而言 需要有一个模块名称来标示模块 在端口列表的括号后面一定要以 结束 模块一般都有端口列表 端口与端口之间用 隔开 但是仿真语言没有端口列表 因为仿真是一个封闭的系统 端口已经实例化在内部 端口声明部分需要声明端口的方向和位宽 module模块名称 端口列表 端口定义声明 input output inout 内部变量及参数声明wire reg functioion task parameter define etc 模块功能实现数据流描述 assign行为级描述 initial always结构化描述 module例化其他用户原语endmodule 例3 1端口声明 PortDeclarationinput 4 0 a 信号名为a的5输入信号inoutb 双向信号boutput 6 0 c 信号名为c的7输出总线信号 有些设计会把端口的声明部分和端口列表写在一起 在端口中可以对每个信号进行注释 例3 2VerilogHDL2001端口声明modulecounter inputclk 全局时钟信号inputreset l 全局复位信号output 7 0 cnt 八位数据总线 模块内部变量声明中 wire型的线网是不具备数据存取功能的 一般而言 input的缺省定义就是wire型 output信号可以是wire型 也可以reg型 定义为wire型的线网是不能够在always语句中被赋值的 只能被连续赋值 而reg型的则可以存取最后一次赋给它的值 定义为reg型的线网只能在always和initial语句中被赋值 不能被连续赋值 注意 所有的关键字都必须小写 定义为reg型的线网不一定会生成寄存器 尽管信号和内部变量定义声明只要出现在被调用的语句之前就行 可是代码风格一般要求在执行语句之前就定义好 这样可以提高代码的可读性 在声明后 便是功能执行语句 功能执行语句包括always语句 initial语句 assign语句 task function 模块例化等等 可以混合描述 没有先后顺序 但是要注意的是initial语句只能用于仿真程序中 不能生成实际的电路 任何一个模块都要以 endmodule 结束 3 4注释 VerilogHDL提供了两种注释的方式 一种以 开始 注释的是一行中的余下部分 例3 3以 开始的注释assigna b c d 输出为a的两输入的选择器 例3 4以 表示的注释assigna b c d 注释下面的功能语句 always beginif b a c elsea d end 3 5常量 变量与逻辑值 常量就是不变的数值 比如说4 d8 表示的是一个4位宽的十进制整数8 在Verilog中 有三种不同类型的常量 整数型 实数型以及字符串型 整数型常量可以直接使用十进制的数字表示 基数表示法的格式如下 长度 数制简写 数字当设定的位宽比实际数字的位宽少 则自动截去左边超出的位数 反之则在左边不够的位置补足0 如果长度不显示 那么数字的位宽则取决于本身的长度 如果遇到的是x或者z时 如4 hx 位宽大于实际数字的位宽 这个时候在左边不是补0 而是补x 变量分为线网型和寄存器型两种 线网型表示电路之间的互连 没有存取功能 它有许多子类型 wire tri tri0 tri1 wor wand trireg supply1 supply0等等 wire可用于可综合的逻辑设计中 而其他的一般用于仿真程序中 另外除了trireg型的变量在未初始化的状态为x态 其它时候都是z态 寄存器型表示数据的存取 在仿真器中会占据一个内存空间 寄存器型也有许多子类型 包括reg integer time real realtime等等 用reg可以表示一位或者多位的寄存器 也可以表示存取器 例3 5采用reg表示的寄存器和存取器rega 1位寄存器areg 4 0 b 5位寄存器breg 7 0 c 10 1 10 8的存取器寄存器可以按位来存取 可是存取器必须按地址来存取 一般采用for语句来给存取器来赋值 定义为reg型的变量可以生成寄存器 也可以生成MUX 所以需要视具体的功能执行而定 x状态是一种未定的状态 描述信号未被初始化的情形 在casex和casez语句中表示不关心 z状态表示高阻状况 用来表示三态建模 在真实的电子世界中以及在综合软件中 都不会出现x状态 只有亚稳态的状况 Verilog的四种逻辑值 0 低 伪 逻辑低 地 VSS 负插入 1 高 真 逻辑高 电源 VDD 正插入 X 不确定 逻辑冲突无法确定其逻辑值 HiZ 高阻抗 三态 无驱动源 3 6操作符 按位操作符是对操作数中的每一位分别进行操作 得出一个新的操作数 其具体的操作符如下所示 表3 1按位操作符 例3 6按位操作符示例A 4 b1011B 4 b1101C 4 b10 x1 A 4 b0100A B 4 b1001A B 4 b1111A B 4 b0110A B A B 4 b1001A C 4 b10 x1 归约操作符是一元操作符 它的表现方式与按位操作符相似或者相同 但是它的操作数只有一个 并且是对操作数中的每一比特分别进行操作 得出一个新的一位宽的操作数表3 2归约操作符 例3 7归约操作符示例B 4 b1101 B 1 1 0 1 1 b0 B 1 1 0 1 1 b1 B 1 1 0 1 1 b1 逻辑操作符是二元操作符 它类似于按位操作符和归约操作符 但是又不同于它们两者 它是对表达式中的操作数整体进行操作 得出一个新的一位宽的操作数 逻辑操作符用于条件判断语句中 而按位操作符 归约操作符用于赋值语句中表3 3逻辑操作符 例3 8逻辑操作符示例A 3 参数AB 0 参数BC 2 b0 x 参数CD 2 b10 参数DA B 0A B 1 A 0C D X 连接复制操作符是一类特殊的操作符 它是将两组或者两组以上的操作数连接成一个操作数 所得结果的位宽将是所有操作数位宽之和表3 4连接复制操作符 例3 9连接复制操作符示例A 2 b00 参数AB 2 b10 参数B A B 4 b0010 2 A 3 B 10 b00 0010 1010 不同操作符之间的地位不一样 数值运算必须遵循优先级由高到低的顺序 为了避免这样的混淆和错误 增加代码的可读性 最好用 来区分表3 5优先级别表 例3 10简单的操作符运算a 4 b1000b 4 b0111 1 a b TRUE FALSE a b a b TRUE FALSE TRUE 2 a b 1 0 0 0 0 1 1 1 TRUE TRUE TRUE 3 a b 1 0 0 0 0 1 1 1 TRUE TRUE TRUE 4 a b 1 0 0 0 0 1 1 1 FALSE FALSE FALSE 5 a b 1 0 0 0 0 1 1 1 FALSE FALSE FALSE 3 7操作数 操作数有许多种 包括常数 参数 线网变量 寄存器变量 向量 存取器单元以及函数的返回值等等 采用操作数进行运算时需要考虑操作数的极性 线网和一般寄存器类型是无符号的 而十进制整数变量则有符号 当无符号数和有符号数一起进行运算时需要考虑极性 3 8参数指令 参数指令 parameter 在Verilog中是一个很重要的概念 通常出现在module里面 有时候在一个系统设计中 把所有的全局参数定义在一个文本文件中 通过 include来调用 常用于定义状态机的状态 数据位宽 延时大小等等 全局定义变量 define 它是用来进行全局定义的 一旦定义就不能改变例3 11参数定义示例parameterCURRENT STATE 4 b1001 3 9编译指令 Verilog语言采用了一些编译指令来实现某些特定的编译 它们主要有 定义宏 define undef 条件编译指令 ifdef else endif 文件包含 include 时间单位和精度定义 timescale 等等 在每个模块前面加一个 timescale编译指令 可以确保在仿真时候延时信息按照timescale所制定的时间单位和精度进行编译 直到遇到下一个 timescale或者 resetall指令为止 timescale的格式 timescale1ns 100ps表示时延单位为1ns 精度为100ps define表示定义宏 是一个全局变量 可以被多个文件采用 直到运到 undef为止 例3 12采用 define定义一个总线宽度为8的总线 条件编译指令的格式一般如下 ifdefNORMALparameterA B elseparameterA C endif如果宏NORMAL事先已经被定义好 则编译器会执行parameterA B 语句 否则执行parameterA C 语句 3 10系统任务和系统函数 显示任务 displaytask 显示任务用于信息的显示和输出 它将特定信息输出到标准输出设备 其基本语法结构如下 task name format specification argument list1 表3 6显示任务编译指令基本信息表 display用来显示变量值 字符串等信息 常用于VerilogHDL断言 其基本格式如下 display Attime t SystemisOK n time 当系统运行到这个语句时 会显示当时的实时时间如下 假设为50 002ns Attime 50 002ns SystemisOK 文件输入 输出任务 FileI Otask 文件的输入输出任务主要分为三部分 文件的打开和关闭 文件的数据读取以及文件的输出 文件的打开和关闭常采用 fopen和 fclose两个关键字来表示 fopen和 fclose是一起配合使用的 表示打开一个文件和关闭一个文件 其基本格式如下 打开一个文件integerfile point fopen file name 关闭一个文件 fclose file point 打开一个文件 就需要对文件进行操作 一般有两种方式 一种是把监视探测到的信息写入文件 另外一种是从文件中读取数据 数据一般从文本文件中读取并将数据保存到存取器中 第一种方式与显示任务相似 它也分为显示 写入 探测和监控系统任务 只是这些任务最终会把数据显示到文件中去 因此需要一个文件指针表3 7文件输入指令基本信息表 readmemb和 readmemh用来从文件中读取数据 文本文件包含空白空间 注释和二进制或十六进制数字 数字与数字之间用空白空间隔离 开始地址对应于存取器最左边的索引 例3 13文件的输入输出任务操作示例integerData OUT Data OUT fopen Data OUT txt fdisplay Data OUT Attime t Systemisoff n time fclose Data out 时间标度任务 timescaletask 时间标度任务 printtimescale用来给出指定模块的时间单位和时间精度 基本格式如下 printtimescale 模块路径 printtimescale 模块路径 时间标度任务 timeformat则用来指明 t格式定义如何报告时间信息 其基本格式如下 timeformat unit number perision suffix numeric field width 模拟控制任务 simulationcontroltask 模拟控制任务主要有两个系统任务 finish和 stop 它们之间主要的不同在于 finish是强迫模拟器退出 并将控制权返回给操作系统 而 stop仅仅是模拟被挂起 模拟器不会被强迫退出 交互命令可以被送往模拟器 时序验证任务 timingchecktask 时序验证任务主要用来检测并报告信号的各种时序是否满足系统要求 包括建立时间 保持时间 时钟周期等 表3 8时序验证任务基本信息表 实数变换函数 conversionfunctionsforreal 表3 9实数变换函数基本信息表 概率分布函数 probabilisticdistributionfunction 概率分布函数一般用来产生一系列随机数来验证系统的功能是否正确 概率分布函数一般采用 random seed 根据种子变量seed的取值按32位的有符号整数形式返回一个随机数 3 11实例 数据选择器 数据选择器的功能是 根据选择信号 决定哪路输入信号送到输出信号 输出信号不仅与输入信号有关 还与选择信号有关 数据选择器的VerilogHDL语言代码如下 moduledataselector 模块的开始a 输入b 输入c 输入d 输入 sel 输入en 输入y 输出 inputa inputb inputc inputd input 1 0 sel 两位的数据选择信号 总共有四个状态inputen 选择器使能信号 outputy 输出结果信号 regy 输出信号寄存器

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论