Verilog语言编程基础ppt课件_第1页
Verilog语言编程基础ppt课件_第2页
Verilog语言编程基础ppt课件_第3页
Verilog语言编程基础ppt课件_第4页
Verilog语言编程基础ppt课件_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

VerilogHDL语言编程基础 大连XXX HDL语言简介 Verilog中的模块 Module Verilog语言中常用语句 Verilog语言中阻塞和非阻塞赋值 Verilog语言中常见的错误 Verilog的语言要素 Verilog语言的4大法宝 HDL语言简介 HDL 硬件描述语言 HardwareDescriptionLanguage 目前通用的HDL语言有VHDL和Verilog两种 目前多数FPGA厂商都有自己的逻辑综合工具 或者采用第三方的设计综合工具来支持自己的器件开发 这是由于HDL完成的设计具有可移植 易维护 好理解的性能 HDL语言简介 VHDL语言最初于1981年由美国国防部 DOD 为解决所有电子产品存档而提出了一种统一标准语言 1987年成为IEEE1076 87标准 1993年后 形成IEEE1164 以解决可综合VHDL描述在不同EDA厂商之间的移植问题 及ASIC FPGA的门级库描述问题 Verilog语言最早由Gateway设计自动化公司于1981年提出 并提供相应的Verilog仿真器 1985年 仿真器增强版Verilog XL推出 Cadence公司于1989年收购Gateway公司 并于1990年把Verilog语言推向市场 而保留了Verilog XL的所有权 1995年 Verilog成为IEEE1364标准 HDL语言简介 VHDL Verilog比较 两种语言均可有效地描述RTL级 寄存器传输级 但在行为 系统级 Verilog需要PLI的支持 门级以下级Verilog则有较大优势 对于两种语言来说 没有一种语言能描述的功能而另一种不能实现的 考虑到目前大多数的ASIC厂家支持Verilog网表 我们今后将主要推行使用VerilogHDL Verilog语言中常用语句 Verilog语言中阻塞和非阻塞赋值 Verilog语言中常见的错误 Verilog的语言要素 Verilog语言的4大法宝 Verilog中的模块 Module Verilog中的模块 模块是Verilog的基本描述单位 用于描述某个设计的功能或结构及其与其他模块通信的外部端口 整个逻辑设计就是通过模块之间的例化 instantiation 来构成一个整体的 逻辑设计的思想体现了自顶向下的设计方法 模块间的例化方法 要求 每个文件只包含一个模块 模块名和文件名保持一致 模块名 实例名 端口信号映射关系 模块的基本语法结构 modulemodule name port list Declarations reg wire parameter input output inout function task Statements InitialstatementAlwaysstatementModuleinstantiationGateinstantiationUDPinstantiationContinuousassignmentendmodule 模块的结构需按上面的顺序进行 声明区用来对信号方向 信号数据类型 函数 任务 参数等进行描述 语句区用来对功能进行描述如 器件调用 Moduleinstantiation 等 Verilog语言中常用语句 Verilog语言中阻塞和非阻塞赋值 Verilog语言中常见的错误 Verilog语言的4大法宝 Verilog的语言要素 标识符注释格式系统任务和函数编译指令值集合数据类型参数 Verilog的语言要素 Verilog的语言要素 标识符 标识符 identifier 用于定义模块名 端口名 信号名等 VerilogHDL中的标识符 identifier 可以是任意一组字母 数字 符号和 下划线 符号的组合 但标识符的第一个字符必须是字母或者下划线 另外 标识符是区分大小写敏感的 以下是标识符的几个例子 VerilogHDL定义了一系列保留字 叫做关键词 附录A列出了语言中的所有保留字 注意只有小写的关键词才是保留字 例如 标识符always 这是个关键词 与标识符ALWAYS 非关键词 是不同的 Verilog的语言要素 注释 两种注释的方式 以 符号开始 结束 在两个符号之间的语句都是注释语句 因此可扩展到多行 如 statement1 statement2 statementn 以上n个语句都是注释语句 是以 开头的语句 它表示以 开始到本行结束都属于注释语句 Verilog的语言要素 格式 自由的书写格式 VerilogHDL的书写格式是自由的 即一条语句可多行书写 一行可写多个语句 白空 新行 制表符 空格 没有特殊意义 如 inputA inputB 与inputA inputB 功能是一样的 但是这方面公司有严格的书写规范 Verilog的语言要素 系统任务 以 字符开始的标识符表示系统任务 任务提供了一种封装行为的机制 这种机制可在设计的不同部分被调用 任务可以返回0个或多个值 函数在0时刻执行 即不允许延迟 display Hi youhavereachedLTtoday display系统任务在新的一行中显示 time 该系统任务返回当前的模拟时间 Verilog的语言要素 编译指令 以 反引号 开始的某些标识符是编译器指令 在Verilog语言编译时 特定的编译器指令在整个编译过程中有效 编译过程可跨越多个文件 直到遇到其它的不同编译程序指令 完整的标准编译器指令如下 define undef ifdef else endif default nettype include resetall timescale unconnected drive nounconnected drive celldefine endcelldefine Verilog的语言要素 值集合 四种基本的值类型 0 逻辑0或 假 1 逻辑1或 真 X 未知值 Z 高阻 注意这四种值的解释都内置于语言中 如一个为z的值总是意味着高阻抗 一个为0的值通常是指逻辑0 Verilog的语言要素 数据类型 两种数据类型 线网类型 nettype 和寄存器类型 regtype 线网类型代表的是物理连接线 因此它不存贮逻辑值 必须由器件所驱动 assign赋值语句必须用线网类型 定义 wirea assignA B C 当一个wire类型的信号没有被驱动时 缺省值为Z 高阻 信号没有定义数据类型时 缺省为wire类型 寄存器类型通常用于对存储单元的描述 如D型触发器 ROM等 存储器类型的信号当在某种触发机制下分配了一个值 在分配下一个值之时保留原值 但必须注意的是 reg类型的变量 不一定是存储单元 注意在always initial语句中必须用reg类型的变量 定义 reg msb lsb reg1 reg2 regN Verilog的语言要素 参数 参数是一个常量 参数经常用于定义时延和变量的宽度 使用参数说明的参数只被赋值一次 参数说明形式如下 下面为具体实例 parameterLINELENGTH 132 parameterALL X S 16 bx Verilog的语言要素 常量 三种常量 整型 实型 字符串型 整型数可以按如下两种方式书写 1 简单的十进制数格式32十进制数322 基数格式 size basevaluesize定义以位计的常量的位长 base为o或O 表示八进制 b或B 表示二进制 d或D 表示十进制 h或H 表示十六进制 之一 value是基于base的值的数字序列 值x和z以及十六进制中的a到f不区分大小写 如 3 b1011h 6字符串是双引号内的字符序列 字符串不能分成多行书写 如 INTERNALERROR REACHED HERE Verilog的语言要素 运算符 算术运算符加法 二元运算符 减法 二元运算符 乘法 二元运算符 关系运算符有 大于 不小于 不大于 逻辑相等 逻辑不等 Verilog的语言要素 运算符 按位逻辑运算符条件运算符cond expr expr1 expr2连接运算符连接操作 将小表达式合并形成大表达式或者说总线的操作 形式如下 expr1 expr2 exprN 例如 wire 7 0 Dbus assignDbus 7 4 Dbus 0 Dbus 1 Dbus 2 Dbus 3 Verilog语言中阻塞和非阻塞赋值 Verilog语言中常见的错误 Verilog语言的4大法宝 Verilog语言中常用语句 Verilog其它常用语句 If语句 使用IF语句的注意事项 当比较向量时 verilog将对位数小的向量做0扩展以使它们的长度相匹配 它的自动扩展为隐式的 建议采用显示扩展 每一个If都应有一个else和它相对应 防止产生latch if语句的嵌套时 应注意每个If条件的优先级 建议采用于if variable 1 不要采用If variable 以增强程序的可读性 Verilog其它常用语句 Case语句 使用Case语句的注意事项 所有的Case应该有一个defaultcase 以免生成不必要的锁存器 允许空语句 Default 避免使用casex IF语句与CASE语句的比较 case语句通常综合成一级多路复用器 而if then else则综合成优先编码的串接的多个多路复用器 case语句仿真要比条件赋值语句快 因为优先编码器的结构仅在信号的到达有先后时使用 if语句有优先级 case语句没有 IF语句与CASE语句的比较 两者综合实现后结果 If语句case语句 同步复位和异步复位 区别在这里 Verilog中不能被综合的语句 initialwaitrepeatwhileforevernamedeventsfork joindeassignforce releaseproceduralassignmentsoperators caseequalityandinequality 另外for语句虽然可以综合 但也不建议使用 Verilog语言中阻塞和非阻塞赋值 Verilog语言中常见的错误 Verilog语言的4大法宝 Verilog语言的4大法宝 Wire 数据类型 Verilog结构化元件间的物理连线 Reg 数据类型 寄存器类型Assign 连续赋值语句Always Always语句只要条件满足始终重复执行 连续赋值语句assign 连续赋值语句的执行是 只要右边表达式任一个变量有变化 表达式立即被计算 计算的结果立即赋给左边信号 连续赋值语句之间是并行语句 因此与位置顺序无关 过程赋值语句Always VerilogHDL有两种过程赋值语句 initial和always语句 实现行为建模 这两种语句之间的执行是并行的 即语句的执行与位置顺序无关 这两种语句通常与语句块 begin end 相结合 则语句块中的执行是按顺序执行的 initial语句只执行一次 即在设计被开始模拟执行时开始 0时刻 通常只用在对设计进行仿真的测试文件中 用于对一些信号进行初始化和产生特定的信号波形 always语句与initial语句相反 是被重复执行 执行机制是通过对一个称为敏感变量表的事件驱动来实现的 Verilog语言的4大法宝 assign always例子 Verilog语言的4大法宝 在assign语句中赋值的变量要定义为wire 在always块中被赋值的变量要定义为reg reg变量并不一定被综合为寄存器 always块也可以用来描述组合逻辑 Reg变量 wire变量 小提示 整个逻辑设计中的Module 以及Module中的Always语句块 Assign语句都是并行动作的 因此Module中的Always语句块 Assign语句 例化Module语句书写位置是没有要求的 Verilog语言中常见的错误 Verilog语言中阻塞和非阻塞赋值 阻塞赋值与非阻塞赋值 阻塞赋值赋值操作符是 的过程赋值是阻塞性过程赋值 阻塞性过程赋值在其后所有语句执行前执行 即在下一语句执行前该赋值语句完成执行 T1赋值首先发生 计算T1 接着执行第二条语句 T2被赋值 然后执行第三条语句 T3被赋值 依此类推 阻塞赋值与非阻塞赋值 非阻塞赋值在非阻塞性过程赋值中 使用赋值符号 当非阻塞性过程赋值被执行时 计算右端表达式 右端值被赋于左端目标 并继续执行下一条语句 非阻塞语句并行执行 第一条语句的执行使Clr在第5个时间单位被赋于值1 第二条语句的执行使Clr在第4个时间单位被赋值为0 从0时刻开始的第4个时间单位 最终 第3条语句的执行使Clr在第10个时间单位被赋值为0 从0时刻开始的第10个时间单位 注意3条语句都是在0时刻执行的 此时 非阻塞性赋值执行次序变得彼此不相关 阻塞赋值与非阻塞赋值使用准则 原则1 对时序逻辑建模时 使用非阻塞赋值 原则2 对锁存器建模时 使用非阻塞赋值 原则3 用always块对组合逻辑建模时 使用阻塞赋值 原则4 在同一always块中对时序逻辑和组合逻辑同时建模时 使用非阻塞赋值 原则5 在同一always块中 不要混合使用阻塞和非阻塞赋值 原则6 不要用多个always块对同一变量进行赋值 原则7

温馨提示

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

最新文档

评论

0/150

提交评论