




已阅读5页,还剩57页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VerilogHDL基础语法入门 第一讲课程简介 目的 简单介绍VerilogHDL语言和仿真工具介绍讲课计划介绍如何不断地学习新的有关知识 讲座中关于VerilogHDL的主要内容 讲课内容主要包括 Verilog的应用Verilog语言的组成部件结构级的建模与仿真行为级的建模与仿真延迟参数的表示Verilog的测试平台 怎样产生激励信号和控制信号输出响应的产生 记录和验证任务和函数用户定义的元器件 primitives 可综合风格的Verilog建模 讲座中关于Verilog仿真工具的主要内容 讲课内容主要包括 如何对所做的设计进行编译和仿真如何使用元器件库如何用Verilog XL命令行界面调试代码如何用图形用户界面 GUI 延迟的计算和标记仿真性能建模循环多次仿真 目的 了解用HDL语言设计数字逻辑的优点了解Verilog主要应用领域了解Verilog的发展历史了解电路系统的不同层次的Verilog抽象 第二讲 Verilog的应用 VerilogHDL是一种用于数字逻辑电路设计的语言 用VerilogHDL描述的电路设计就是该电路的VerilogHDL模型 VerilogHDL既是一种行为描述的语言也是一种结构描述的语言 这也就是说 既可以用电路的功能描述也可以用元器件和它们之间的连接来建立所设计电路的VerilogHDL模型 Verilog模型可以是实际电路的不同级别的抽象 这些抽象的级别和它们对应的模型类型共有以下五种 Verilog的应用 Verilog的应用 系统级 system 用高级语言结构实现设计模块的外部性能的模算法级 algorithmic 用高级语言结构实现设计算法的模型 RTL级 RegisterTransferLevel 描述数据在寄存器之间流动和如何处理这些数据的模型 门级 gate level 描述逻辑门以及逻辑门之间的连接的模型 开关级 switch level 描述器件中三极管和储存节点以及它们之间连接的模型 Verilog的应用 一个复杂电路的完整VerilogHDL模型是由若个VerilogHDL模块构成的 每一个模块又可以由若干个子模块构成 利用VerilogHDL语言结构所提供的这种功能就可以构造一个模块间的清晰层次结构来描述极其复杂的大型设计 VerilogHDL行为描述语言作为一种结构化和过程性的语言 其语法结构非常适合于算法级和RTL级的模型设计 这种行为描述语言具有以下八项功能 Verilog的应用 可描述顺序执行或并行执行的程序结构 用延迟表达式或事件表达式来明确地控制过程的启动时间 通过命名的事件来触发其它过程里的激活行为或停止行为 提供了条件 if else case 循环程序结构 提供了可带参数且非零延续时间的任务 task 程序结构 提供了可定义新的操作符的函数结构 function Verilog的应用 提供了用于建立表达式的算术运算符 逻辑运算符 位运算符 VerilogHDL语言作为一种结构化的语言也非常适合于门级和开关级的模型设计 VerilogHDL的构造性语句可以精确地建立信号的模型 这是因为在VerilogHDL中 提供了延迟和输出强度的原语来建立精确程度很高的信号模型 信号值可以有不同的的强度 可以通过设定宽范围的模糊值来降低不确定条件的影响 Verilog的应用 VerilogHDL作为一种高级的硬件描述编程语言 有着类似C语言的风格 其中有许多语句如 if语句 case语句等和C语言中的对应语句十分相似 如果读者已经掌握C语言编程的基础 那么学习VerilogHDL并不困难 我们只要对VerilogHDL某些语句的特殊方面着重理解 并加强上机练习就能很好地掌握它 利用它的强大功能来设计复杂的数字逻辑电路 下面我们将对VerilogHDL中的基本语法逐一加以介绍 模块的抽象 技术指标 用文字表示用算法表示用高级行为的Verilog模块表示RTL 功能级 用可综合的Verilog模块表示门级 结构级 用实例引用的Verilog模块表示版图布局 物理级 用几何形状来表示 第三讲 简单的VerilogHDL模块 目的 通过简单的例子了解Verilog模块的基本构成了解Verilog模块的层次结构和行为模块了解Verilog模块的测试 简单的VerilogHDL模块 下面先介绍几个简单的VerilogHDL程序 然后从中分析VerilogHDL程序的特性 例 2 1 1 moduleadder count sum a b cin input 2 0 a b inputcin outputcount output 2 0 sum assign count sum a b cin endmodule这个例子描述了一个三位的加法器 从例子中可以看出整个VerilogHDL程序是嵌套在module和endmodule声明语句里的 简单的VerilogHDL模块 例 2 1 2 modulecompare equal a b outputequal 声明输出信号equalinput 1 0 a b 声明输入信号a bassignequal a b 1 0 如果两个输入信号相等 输出为1 否则为0 endmodule这个程序描述了一个比较器 在这个程序中 和 表示注释部分 注释只是为了方便程序员理解程序 对编译是不起作用的 简单的VerilogHDL模块 例 2 1 3 moduletrist2 out in enable outputout inputin enable bufif1mybuf out in enable endmodule这个程序描述了一个三态驱动器 程序通过调用一个实例元件bufif1来实现其功能 简单的VerilogHDL模块 例 2 1 4 moduletrist1 out in enable outputout inputin enable mytritri inst out in enable endmodulemodulemytri out in enable outputout inputin enable assignout enable In bz endmodule 简单的VerilogHDL模块 上述程序例子通过另一种方法描述了一个三态门 在这个例子中存在着两个模块 模块trist1调用模块mytri的实例元件tri inst 模块trist1是上层模块 模块mytri则被称为子模块 通过这种结构性模块构造可构成特大型模块 简单的VerilogHDL模块 通过上面的例子可以看到 VerilogHDL程序是由模块构成的 模块是可以进行层次嵌套的 正因为如此 才可以将大型的数字电路设计分割成不同的小模块来实现特定的功能 最后通过顶层模块调用子模块来实现整体功能 每个模块要进行端口定义 并说明输入输出口 然后对模块的功能进行行为逻辑描述 VerilogHDL程序的书写格式自由 一行可以写几个语句 一个语句也可以分写多行 除了endmodule语句外 每个语句和数据定义的最后必须有分号可以用 和 对VerilogHDL程序的任何部分作注释 一个好的 有使用价值的源程序都应当加上必要的注释 以增强程序的可读性和可维护性 模块的结构 Verilog的基本设计单元是 模块 block 一个模块是由两部分组成的 一 描述接口 二 描述逻辑功能 即定义输入是如何影响输出的 下面举例说明 模块的结构 从上面的例子可以看出 Verilog模块结构完全嵌在module和endmodule声明语句之间 每个Verilog程序包括四个主要部分 端口定义 I O说明 内部信号声明 功能定义 第四讲模块的测试 如何检查上述例子其功能是否正确 需要有测试激励信号输入到被测模块需要记录被测模块的输出信号需要把用功能和行为描述的Verilog模块转换为门级电路互连的电路结构 综合 需要对已经转换为门级电路结构的逻辑进行测试 门级电路仿真 需要对布局布线后的电路结构进行测试 布局布线后仿真 模块的测试 模块的测试 测试模块常见的形式 modulet reg 被测模块输入 输出变量类型定义wire 被测模块输入 输出变量类型定义initialbegin end 产生测试信号always delaybegin end 产生测试信号Testedmdm in1 ina in2 inb out1 outa out2 outb 被测模块的实例引用initialbegin end 记录输出和响应endmodule 模块的测试 测试模块中常用的过程块 always 所有的过程块都在0时刻同时启动 它们是并行的 在模块中不分前后 initial块只执行一次 always块只要符合触发条件可以循环执行 模块的测试 如何描述激励信号 modulet rega b sel wireout 引用多路器实例mux2 m out a b sel 加入激励信号initialbegina 0 b 1 sel 0 10b 0 10b 1 sel 1 10a 1 10 stop end 模块的测试 如何观察被测模块的响应 在initial块中 用系统任务 time和 monitor time返回当前的仿真时刻 monitor只要在其变量列表中有某一个或某几个变量值发生变化 便在仿真单位时间结束时显示其变量列表中所有变量的值 例 initialbegin monitor time out ba bsel b out a b sel end 模块的测试 如何把被测模块的输出变化记录到数据库文件中 文件格式为VCD 大多数的波形显示工具都能读取该格式 可用以下七个系统任务 dumpfile file dump 打开记录数据变化的数据文件 dumpvars 选择需要记录的变量 dumpflush 把记录在数据文件中的资料转送到硬盘保存 dumpoff 停止记录数据变化 dumpon 重新开始记录数据变化 dumplimit 规定数据文件的大小 字节 dumpall 记录所有指定信号的变化值到数据文件中 模块的测试 如何把被测模块的响应变化记录到数据库文件中 举例说明 dumpvars 记录各层次模块中所有信号的变化 dumpvars 1 top 只记录模块top中所有信号的变化 dumpvars 2 top u1 记录top模块中实例u1和它以下一层子模块所有信号的变化 dumpvars 0 top u2 top u1 u13 q 记录top模块中实例u2和它本层所有信号的变化 还有top u1 u13 q信号的变化 dumpvars 3 top u2 top u1 记录top模块中u2和u1所有信号的变化 包括其两层以下子模块的信号变化 模块的测试 如何把被测模块的响应变化记录到数据库文件中 举例说明 下面的Verilog代码段可以代替测试文件中的系统任务 monitorinitialbegin dumpfile vlog dump dumpvars 0 top end 语法详细讲解第五讲 Verilog语法要点 目标 理解Verilog语言的一些重要规定 学会认识一些有关的重要语言符号 掌握Verilog中如何规定时间单位 语法详细讲解Verilog与C的主要不同点 Verilog有许多语法规则与C语言一致 但与C语言有根本的区别 并行性 块的含义 initial块和always块两种赋值语句 阻塞赋值 非阻塞赋值 语法详细讲解空格和注释 Verilog是一种格式很自由的语言 空格在文本中起一个分离符的作用 别的没有其他用处 单行注释符用 与C语言一致多行注释符用 与C语言一致 语法详细讲解整数和实常数 Verilog语言中常数可以是整数或实数 整数可以标明位数也可以不标明位数 表示方法 位数 基数 值 其中 位数 表明该数用二进制的几位来表示 基数 可以是二 b 八 O 十 d 或十六 h 进制 数值 可以是所选基数的任何合法的值包括不定值x位和高阻值z 如 64 hff018 b1101 0001 h83a实常数可以用十进制表示也可以用科学浮点数表示 如 32e 4 表示0 0032 4 1E3 表示4100 语法详细讲解字符串 Verilog语言中 字符串常常用于表示命令内需要显示的信息 用 括起来的一行字符串 换新一行用 n 字符 与C语言一致 在字符串中可以用C语言中的各种格式控制符 如 t 在字符串中可以用C语言中的各种数值型式控制符 有些不同 如 b 二进制 o 八进制 d 十进制 h 十六进制 t 时间类型 s 字符串类型 语法详细讲解标识符 所谓标识别符就是用户为程序描述中的Verilog对象所起的名字 标识符必须以英语字母 a z A Z 起头 或者用下横线符 起头 其中可以包含数字 符和下横线符 标识符最长可以达到1023个字符 模块名 端口名和实例名都是标识符 Verilog语言是大小写敏感的 因此sel和SEL是两个不同的标识符 语法详细讲解合法和非法标识符 合法的 shift reg abusa indexbus263 非法的 34net 不能用数字开头a b net 不能含有非字母符号 n 263 不能含有非字母符号 Verilog是大小写敏感的 所有的Verilog关键词都是小写的 语法详细讲解特别的标识符 特别标识符是用 符开始 以空格符结束的标识符 它可以包含任何可打印的ASCII字符 但 符和空格并不算是标识符的一部分 特别标识符往往是由RTL级源代码或电路图类型的设计输入经过综合器自动综合生成的网表结构型Verilog语句中的标识符 举例说明 sel bus index A B Top 1 在层次模块中的标识名 语法详细讲解系统任务和函数 符号表示Verilog的系统任务和函数常用的系统任务和函数有下面几种 time 找到当前的仿真时间 display monitor 显示和监视信号值的变化 stop 暂停仿真 finish 结束仿真 例 initial monitor time a b b b a b 每当a或b值变化时该系统任务都显示当前的仿真时刻并分别用二进制和十六进制显示信号a和b的值 语法详细讲解特殊符号 特殊符号 常用来表示延迟 在过程赋值语句时表示延迟 例 initialbegin 10rst 1 50rst 0 end在门级实例引用时表示延迟 例 not 1not1 nsel sel and 2and2 a1 a nsel 在模块实例引用时表示参数传递介绍参数类型变量时再讲 语法详细讲解编译引导语句 编译引导语句用主键盘左上角小写键 起头用于指导仿真编译器在编译时采取一些特殊处理编译引导语句一直保持有效 直到被取消或重写 resetall编译引导语句把所有设置的编译引导恢复到缺省状态常用的编译引导有 define include timescale uselib resetall 语法详细讲解编译引导语句 使用 define编译引导能提供简单的文本替代功能 define在编译时会用宏文本来替代源代码中的宏名 合理地使用 define可以提高程序的可读性举例说明 defineon1 b1 defineoff1 b0 defineand delay 3在程序中可以用有含义的文字来表示没有意思的数码提高了程序的可读性 在程序中可以用 on off and delay分别表示1 0 和 3 语法详细讲解编译引导语句 使用 include编译引导 在编译时能把其指定的整个文件包括进来一起处理举例说明 include global v include parts counter v include library mux v 合理地使用 include可以使程序简洁 清晰 条理清楚 易于查错 语法详细讲解编译引导语句 timescale用于说明程序中的时间单位和仿真精度举例说明 timescale1ns 100ps timescale语句必须放在模块边界前面举例说明 timescale1ns 100psmoduleMUX2 1 out a b sel not 1not1 nsel sel and 2and1 a1 a nsel endmodule尽可能地使精度与时间单位接近 只要满足设计的实际需要就行 举例说明 在上例中所有的时间单位都是1ns的整数倍 语法详细讲解编译引导语句 仿真步长即仿真单位 STU 是所有参加仿真模块中由 timescale指定的精度中最高 即时间最短 的那个决定的 STU 100fs 举例 timescale1ns 10psmoduleM1 not 1 23not1 nsel sel 1 23ns中共有12300个STU 100fs endmodule timescale100ns 1nsmoduleM2 not 1 23not1 nsel sel 123ns中共有1230000个STU 100fs endmodule timescale1ps 100fsmoduleM3 not 1 23not1 nsel sel 1 23ps中共有12个STU 100fs endmodule 语法详细讲解编译引导语句 时间单位 fs 呼秒 femptoseconds 1 0E 15秒ps 皮秒 picoseconds 1 0E 12秒ns 纳秒 nonoseconds 1 0E 9秒us 微秒 microseconds 1 0E 6秒ms 毫秒 milliseconds 1 0E 3秒s 秒 seconds 1 0秒 语法详细讲解编译引导语句 uselib编译引导语句 用于定义仿真器到哪里去找库元件如果该引导语句启动的话 它就一直有效直到遇到另外一个 uselib的定义或 resetall语句比其他配置库搜索路径的命令选项作用大如果仿真器在 uselib定义的地点找不到器件库 它不会转向由编译命令行 v和 y选项指定的器件库去找 语法详细讲解编译引导语句 使用 uselib的语法 uselib器件库1的地点器件库2的地点 上面的器件库地点可用以下两种方法表示 1 file 库文件名的路径2 dir 库目录名的路径libext 文件扩展例如 uselibdir lib FAST lib uselibdir lib TTL lib libext vfile libs TTL U udp lib 语法详细讲解第六讲Verilog的数据类型和逻辑值 目的 掌握Verilog不同逻辑值的含义学习Verilog不同的数据类型理解如何使用和在什么场合下使用不同的数据类型学习声明数据类型的语法 语法详细讲解Verilog的四种逻辑值 0 低 伪 逻辑低 地 VSS 负插入 1 高 真 逻辑高 电源 VDD 正插入 X 不确定 逻辑冲突无法确定其逻辑值 HiZ 高阻抗 三态 无驱动源 语法详细讲解主要的数据类型 Verilog有三种主要的数据类型 Nets表示器件之间的物理连接 称为网络连接类型Register表示抽象的储存单元 称为寄存器 变量类型Parameter表示运行时的常数 称为参数类型 语法详细讲解主要的数据类型 Nets 网络连线 由模块或门驱动的连线 驱动端信号的改变会立刻传递到输出的连线上 例如 右图上 selb的改变 会自动地立刻影响或门的输出 nets 语法详细讲解主要的数据类型 连接 Nets 类型变量的种类 在为不同工艺的基本元件建立库模型的时候 常常需要用不同的连接类型来与之对应 使其行为与实际器件一致 常见的有以下几种 类型功能wire tri对应于标准的互连线 缺省 supply1 supply2对应于电源线或接地线wor trior对应于有多个驱动源的线或逻辑连接wand triand对应于有多个驱动源的线与逻辑连接trireg对应于有电容存在能暂时存储电平的连接tri1 tri0对应于需要上拉或下拉的连接如果不明确地说明连接是何种类型 应该是指wire类型 语法详细讲解主要的数据类型 寄存器 register 类型变量register型变量能保持其值 直到它被赋于新的值 register型变量常用于行为建模 产生测试的激励信号 常用行为语句结构来给寄存器类型的变量赋值 语法详细讲解主要的数据类型 寄存器 register 类型变量的数据类型寄存器类型变量共有四种数据类型 类型功能 reg无符号整数变量 可以选择不同的位宽 integer有符号整数变量 32位宽 算术运算可产生2的补码 real有符号的浮点数 双精度 time无符号整数变量 64位宽 Verilog XL仿真工具用64位的正数来记录仿真时刻 语法详细讲解主要的数据类型 如何选择正确的数据类型 输入口 input 可以由寄存器或网络连接驱动 但它本身只能驱动网络连接 输出口 output 可以由寄存器或网络连接驱动 但它本身只能驱动网络连接 输入 输出口 inout 只可以由网络连接驱动 但它本身只能驱动网络连接 如果信号变量是在过程块 initial块或always块 中被赋值的 必须把它声明为寄存器类型变量 语法详细讲解主要的数据类型 举例说明数据类型的选择moduletop wirey rega b DUTu1 y a b initialbegina 0 b 0 10a 1 endendmodule moduleDUT Y A B outputY inputA B wireY A B and Y A B endmodule 语法详细讲解主要的数据类型 选择数据类型时常犯的错误在过程块中对变量赋值时 忘了把它定义为寄存器类型 reg 或已把它定义为连接类型了 wire 把实例的输出连接出去时 把它定义为寄存器类型了把模块的输入信号定义为寄存器类型了 这
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 多措并举促进教育培训提质增效的策略及实施路径
- 探索河流水质自然恢复路径的策略及实施路径
- 复杂地形区域土石方施工方案
- BIM与AR技术在建筑施工可视化中的应用研究
- 新能源企业2025年国际化能源互联网平台建设报告
- 2025年车工评级考试试题及答案
- 品牌媒体活动策划方案范文
- 北辰区微信营销方案
- 2025年海洋能发电与海岛地区新能源产业协同发展模式研究报告
- 辽宁财务咨询方案
- T-YNX 002-2025 葡萄组培脱毒快繁技术规程
- 衣服投标供货方案(3篇)
- 2025至2030年中国丁酮肟市场现状分析及前景预测报告
- 公司电脑补贴管理办法
- 中石化对供应商管理办法
- Unit 2 Home Sweet Home 语法与阅读专项练习 (含答案) 人教版(2024)八年级上册
- 2025年少先队应知应会知识竞赛考试题库及答案
- 【课件】第14章+全等三角形+数学活动++式+课件2025-2026学年人教版数学八年级上册
- 2025版安全生产法全文
- 2025年中远海运集团招聘笔试备考题库(带答案详解)
- 高中英语高考词汇200句-教师版(简单句80)二
评论
0/150
提交评论