首页 > > > Verilog HDL 华为入门教程.pdf

Verilog HDL 华为入门教程.pdf

Verilog HDL 华为入门教程.pdf

上传者: wanghao198901 2013-12-08 评分1 评论0 下载0 收藏10 阅读量621 暂无简介 简介 举报

简介:本文档为《Verilog HDL 华为入门教程pdf》,可适用于硬件技术领域,主题内容包含共页资源类别:HDL语言内部公开密级版本文档编号文档中心VerilogHDL入门教程(仅供内部使用)yyyymmdd日期:批准:日期:中研基础批准:符等。

共41页 资源类别: HDL语言 内部公开1.0 密级版本文档编号 文档中心 Verilog HDL入门教程 (仅供内部使用) yyyy/mm/dd日期:批准: 日期:中研基础批准: 2004.8.3日期:中研基础拟制: 版权所有 不得复制 修订记录 初稿完成1.002004.8.3 作者描述修订版本日期 绝密 请输入文档编号Verilog HDL 入门教程 2004-08-16 第2页,共41页 版权所有,侵权必究 目 录 285 结构建模 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274.8 case 语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254.7 条件语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254.6.6 连接运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254.6.5 条件运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244.6.4 按位逻辑运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234.6.3 逻辑运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224.6.2 关系运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214.6.1 算术运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214.6 运算符和表达式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204.5.2 寄存器类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204.5.1 线网类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204.5 数据类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184.4.2 常量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184.4.1 值集合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184.4 数字值集合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184.3 格式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174.2 注释 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174.1.3 书写规范建议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174.1.2 关键词 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174.1.1 定义 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174.1 标识符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Verilog HDL 基本语法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.3.4 混合设计描述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.3.3 行为描述方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.3.2 数据流描述方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.3.1 结构化描述方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.3 三种建模方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.2 时延 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.1.3 模块语法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103.1.2 模块的结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93.1.1 简单事例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93.1 模块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 Verilog HDL 建模概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.4.2 能力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.4.1 历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.4 Verilog HDL简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.3 设计方法学 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.2 硬件描述语言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.1 数字电路设计方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 HDL设计方法学简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 前言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 绝密 请输入文档编号Verilog HDL 入门教程 2004-08-16 第3页,共41页 版权所有,侵权必究 4010 附录A Verilog 保留字 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 其他方面 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377.4 行为建模具体实例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367.3 过程赋值语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357.2 顺序语句块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357.1 简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 行为建模 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346.3 数据流建模具体实例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346.2 阻塞赋值语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346.1 连续赋值语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 数据流建模 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315.4 结构化建模具体实例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295.3 实例化语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285.2 模块端口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285.1 模块定义结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 绝密 请输入文档编号Verilog HDL 入门教程 2004-08-16 第4页,共41页 版权所有,侵权必究 Verilog HDL 入门教程 关键词: 摘 要:本文主要介绍了Verilog HDL 语言的一些基本知识,目的是使初学者能够迅速掌握HDL 设计方法,初步了解并掌握Verilog HDL语言的基本要素,能够读懂简单的设计代码并能 够进行一些简单设计的Verilog HDL建模。 缩略语清单: 对本文所用缩略语进行说明,要求提供每个缩略语的英文全名和中文解释。 参考资料清单: 请在表格中罗列本文档所引用的有关参考文献名称、作者、标题、编号、发布日 期和出版单位等基本信息。 机械工业出版 社 图书馆2000.7J.Bhasker 著 徐振林 等译 Verilog HDL硬 件描述语言 苏文彪 AMBIT Design System Quisck Reference for Verilog HDL 出版单位(若 不为本公司发 布的文献,请 填写此列) 查阅地点或渠 道 发布日期编号作者名称 参考资料清单 1 前言 当前业界的硬件描述语言中主要有VHDL 和Verilog HDL。公司根据本身ASIC设计现有的特 点、现状,主推Verilog HDL 语言,逐渐淡化VHDL语言,从而统一公司的ASIC/FPGA设计平台, 简化流程。 为使新员工在上岗培训中能迅速掌握ASIC/FPGA 设计的基本技能,中研基础部ASIC设计中心 开发了一系列的培训教材。该套HDL语言培训系列包括如下教程: 《Verilog HDL 入门教程》 《Verilog HDL 代码书写规范》 《Verilog 基本电路设计指导书》 《TestBench 编码技术》 系列教材完成得较匆忙,本身尚有许多不完善的地方,同时,可能还需要其他知识方面的培 训但没有形成培训教材,希望大家在培训过程中,多提宝贵意见,以便我们对它进行修改和完 善。 2 HDL设计方法学简介 绝密 请输入文档编号Verilog HDL 入门教程 2004-08-16 第5页,共41页 版权所有,侵权必究 2.1 数字电路设计方法 当前的数字电路设计从层次上分可分成以下几个层次: 1. 算法级设计:利用高级语言如C语言及其他一些系统分析工具(如MATLAB)对设计从系统 的算法级方式进行描述。算法级不需要包含时序信息。 2. RTL级设计:用数据流在寄存器间传输的模式来对设计进行描述。 3. 门级:用逻辑级的与、或、非门等门级之间的连接对设计进行描述。 4. 开关级:用晶体管和寄存器及他们之间的连线关系来对设计进行描述。 算法级是高级的建模,一般对特大型设计或有较复杂的算法时使用,特别是通讯方面的一些 系统,通过算法级的建模来保证设计的系统性能。在算法级通过后,再把算法级用RTL级进行描 述。门级一般对小型设计可适合。开关级一般是在版图级进行。 2.2 硬件描述语言 在传统的设计方法中,当设计工程师设计一个新的硬件、一个新的数字电路或一个数字逻辑 系统时,他或许在CAE 工作站上做设计,为了能在CAE工作站做设计,设计者必须为设计画一张 线路图,通常地,线路图是由表示信号的线和表示基本设计单元的符号连在一起组成线路图,符 号取自设计者用于构造线路图的零件库。若设计者是用标准逻辑器件(如74系列等)做板极设计 线路图,那么在线路图中,符号取自标准逻辑零件符号库;若设计是进行ASIC设计,则这些符号 取自ASIC库的可用的专用宏单元。这就是传统的原理图设计方法。 对线路图的逻辑优化,设计者或许利用一些EDA工具或者人工地进行逻辑的布尔函数逻辑优 化。为了能够对设计进行验证,设计者必须通过搭个硬件平台(如电路板),对设计进行验证。 随着电子设计技术的飞速发展,设计的集成度、复杂度越来越高,传统的设计方法已满足不 了设计的要求,因此要求能够借助当今先进的EDA工具,使用一种描述语言,对数字电路和数字 逻辑系统能够进行形式化的描述,这就是硬件描述语言。 硬件描述语言HDL(Hardware Description Language )是一种用形式化方法来描述数字电路和 数字逻辑系统的语言。数字逻辑电路设计者可利用这种语言来描述自己的设计思想,然后利用 EDA工具进行仿真,再自动综合到门级电路,最后用ASIC或FPGA实现其功能。举个例子,在传统 的设计方法中,对2输入的与门,我们可能需到标准器件库中调个74系列的器件出来,但在硬件描 述语言中,“& ”就是一个与门的形式描述,“C = A & B”就是一个2输入与门的描述。而“and ”就是一个与门器件。 硬件描述语言发展至今已有二十多年历史,当今业界的标准中(IEEE标准)主要有VHDL和 Verilog HDL 这两种硬件描述语言。 2.3 设计方法学 当前的ASIC设计有多种设计方法,但一般地采用自顶向下的设计方法。 随着技术的发展,一个芯片上往往集成了几十万到几百万个器件,传统的自底向上的设计方 法已不太现实。因此,一个设计往往从系统级设计开始,把系统划分成几个大的基本的功能模 块,每个功能模块再按一定的规则分成下一个层次的基本单元,如此一直划分下去。自顶向下的 设计方法可用下面的树状结构表示: 绝密 请输入文档编号Verilog HDL 入门教程 2004-08-16 第6页,共41页 版权所有,侵权必究 系 统 级 的 顶 层 模 块 模 块 A 模 块 B 模 块 C 模 块 B1 模 块 B2 模 块 C1 图1 TOP-DOWN 设计思想 通过自顶向下的设计方法,可实现设计的结构化,使一个复杂的系统设计可由多个设计者分 工合作;还可以实现层次化的管理。 2.4 Verilog HDL简介 Verilog HDL 是一种硬件描述语言,用于从算法级、RTL级、门级到开关级的多种抽象设计层 次的数字系统建模。被建模的数字系统对象的复杂性可介于简单的门级和完整的电子数字系统之 间。数字系统可按层次描述。 2.4.1 历史 Verilog HDL 语言最初是于1983 年由Gateway Design Automation 公司为其模拟器产品开发的硬 件建模语言。那时它只是一种专用语言。由于他们的模拟、仿真器产品的广泛使用,Verilog HDL 作为一种便于使用且实用的语言逐渐为众多设计者所接受。在一次努力增加语言普及性的活动 中,Verilog HDL 语言于1990 年被推向公众领域。Open Verilog International(O V I )是促进 Verilog 发展的国际性组织。1992 年,OVI 决定致力于推广Verilog OVI 标准成为IEEE 标准。这一 努力最后获得成功,Verilog 语言于1995 年成为IEEE 标准,称为IEEE Std1364-1995 。完整的标 准在Verilog 硬件描述语言参考手册中有详细描述。 2.4.2 能力 对初学者,可先大致了解一下Verilog HDL所提供的能力,掌握Verilog HDL 语言的核心子集 就可以了。 1. 概述 Verilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成 以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言。此 外,Verilog HDL 语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设 计,包括模拟的具体控制和运行。 Verilog HDL 语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因 此,用这种语言编写的模型能够使用Verilog 仿真器进行验证。语言从C 编程语言中继承了多种操 作符和结构。Verilog HDL 提供了扩展的建模能力,其中许多扩展最初很难理解。但是,Verilog 绝密 请输入文档编号Verilog HDL 入门教程 2004-08-16 第7页,共41页 版权所有,侵权必究 HDL 语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当然,完整的硬件 描述语言足以对从最复杂的芯片到完整的电子系统进行描述。 2. 主要功能list y 基本逻辑门,例如and 、or 和nand 等都内置在语言中。 y 开关级基本结构模型,例如pmos 和nmos 等也被内置在语言中。 y 可采用三种不同方式或混合方式对设计建模。这些方式包括:行为描述方式—使用过程化 结构建模;数据流方式—使用连续赋值语句方式建模;结构化方式—使用门和模块实例语句描 述建模。 y Verilog HDL 中有两类数据类型:线网数据类型和寄存器数据类型。线网类型表示构件间 的物理连线,而寄存器类型表示抽象的数据存储元件。 y 能够描述层次设计,可使用模块实例结构描述任何层次。 y 设计的规模可以是任意的;语言不对设计的规模(大小)施加任何限制。 y Verilog HDL 不再是某些公司的专有语言而是I E E E 标准。 y 人和机器都可阅读Verilog 语言,因此它可作为E D A 的工具和设计者之间的交互语言。 y 设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级(RT L )到算法级。 y 能够使用内置开关级原语在开关级对设计完整建模。 y 同一语言可用于生成模拟激励和指定测试的验证约束条件,例如输入值的指定。 y Verilog HDL 能够监控模拟验证的执行,即模拟验证执行过程中设计的值能够被监控和显 示。这些值也能够用于与期望值比较,在不匹配的情况下,打印报告消息。 y 在行为级描述中,Verilog HDL 不仅能够在RT L 级上进行设计描述,而且能够在体系结构 级描述及其算法级行为上进行设计描述。 y 能够使用门和模块实例化语句在结构级进行结构描述。 y 对高级编程语言结构,例如条件语句、情况语句和循环语句,语言中都可以使 用。 下图显示了Verilog HDL 的混合方式建模能力,即在一个设计中每个模块均可以在不同设计层 次上建模。 开 关 算 法 RTL 门 门 开 关 图2 混合设计层次建模示意图 绝密 请输入文档编号Verilog HDL 入门教程 2004-08-16 第8页,共41页 版权所有,侵权必究 3 Verilog HDL 建模概述 在数字电路设计中,数字电路可简单归纳为两种要素:线和器件。线是器件管脚之间的物理 连线;器件也可简单归纳为组合逻辑器件(如与或非门等)和时序逻辑器件(如寄存器、锁存 器、RAM等)。一个数字系统(硬件)就是多个器件通过一定的连线关系组合在一块的。因此, Verilog HDL的建模实际上就是如何使用HDL语言对数字电路的两种基本要素的特性及相互之间的 关系进行描述的过程。 下面通过一些实例,以便对Verilog HDL 的设计建模有个大概的印象。 3.1 模块 模块(module)是Verilog 的基本描述单位,用于描述某个设计的功能或结构及与其他模块通 信的外部端口。 模块在概念上可等同一个器件就如我们调用通用器件(与门、三态门等)或通用宏单元(计 数器、ALU、CPU)等,因此,一个模块可在另一个模块中调用。 一个电路设计可由多个模块组合而成,因此一个模块的设计只是一个系统设计中的某个层次 设计,模块设计可采用多种建模方式。 3.1.1 简单事例 下面先介绍几个简单的Verilog HDL程序。 例[1] 加法器 module addr (a, b, cin, count, sum); input [2:0] a; input [2:0] b; input cin; output count; output [2:0] sum; assign {count,sum} = a +b + cin; endmodule 该例描述一个3位加法器,从例子可看出整个模块是以module 开始,endmodule 结束。 例[2] 比较器 module compare (equal,a,b); input [1:0] a,b; // declare the input signal ; output equare ; // declare the output signal; assign equare = (a == b) ? 1:0 ; / * if a = b , output 1, otherwise 0;*/ endmodule 绝密 请输入文档编号Verilog HDL 入门教程 2004-08-16 第9页,共41页 版权所有,侵权必究 该例描述一个比较器, 从上可看到,/* .... */ 和 // ... 表示注释部分。注释只是为了方便设计者 读懂代码,对编译并不起作用。 例[3] 三态驱动器 module mytri (din, d_en, d_out); input din; input d_en; output d_out; // -- Enter your statements here -- // assign d_out = d_en ? din :'bz; endmodule module trist (din, d_en, d_out); input din; input d_en; output d_out; // -- statements here -- // mytri u_mytri(din,d_en,d_out); endmodule 该例描述了一个三态驱动器。其中三态驱动门在模块 mytri 中描述,而在模块trist 中调用了模 块mytri 。模块mytri 对trist 而言相当于一个已存在的器件,在trist 模块中对该器件进行实例化,实 例化名 u_mytri 。 3.1.2 模块的结构 通过上面的实例可看出,一个设计是由一个个模块(module)构成的。一个模块的设计如 下: 1、模块内容是嵌在module 和endmodule两个语句之间。每个模块实现特定的功能,模块可进 行层次的嵌套,因此可以将大型的数字电路设计分割成大小不一的小模块来实现特定的功能,最 后通过由顶层模块调用子模块来实现整体功能,这就是Top-Down的设计思想,如 3.3.1的例[3]。 2、模块包括接口描述部分和逻辑功能描述部分。这可以把模块与器件相类比。 模块的端口定义部分: 如上例: module addr (a, b, cin, count, sum); 其中module 是模块的保留字,addr 是模块的名 字,相当于器件名。()内是该模块的端口声明,定义了该模块的管脚名,是该模块与其他模块 通讯的外部接口,相当于器件的pin 。 模块的内容,包括I/O说明,内部信号、调用模块等的声明语句和功能定义语句。 I/O说明语句如: input [2:0] a; input [2:0] b; input cin; output count; 其中的 input 、 output、inout 是保留字,定义了管脚信号的流向,[n:0]表示该信号的位宽(总线或单根信号线)。 绝密 请输入文档编号Verilog HDL 入门教程 2004-08-16 第10页,共41页 版权所有,侵权必究 逻辑功能描述部分如: assign d_out = d_en ? din :'bz; mytri u_mytri(din,d_en,d_out); 功能描述用来产生各种逻辑(主要是组合逻辑和时序逻辑,可用多种方法进行描述,具体的 用法下面章节有介绍),还可用来实例化一个器件,该器件可以是厂家的器件库也可以是我们自 己用HDL设计的模块(相当于在原理图输入时调用一个库元件)。在逻辑功能描述中,主要用到 assign 和always 两个语句。 3、对每个模块都要进行端口定义,并说明输入、输出口,然后对模块的功能进行逻辑描述, 当然,对测试模块,可以没有输入输出口。 4、Verilog HDL 的书写格式自由,一行可以写几个语句,也可以一个语句分几行写。具体由 代码书写规范约束。 5、除endmodule 语句外,每个语句后面需有分号表示该语句结束。 3.1.3 模块语法 1.一个模块的基本语法如下: 一个模块的基本语法如下: module module_name (port1, port2, ......) ; // D e c l a r a t i o n s : input, output, inout, reg, wire, parameter, function, task, . . . //S t a t e m e n t s : Initial statement Always statement Module instantiation Gate instantiation Continuous assignment endmodule 模块的结构需按上面的顺序进行,声明区用来对信号方向、信号数据类型、函数、任务、参 数等进行描述。语句区用来对功能进行描述如:器件调用 (Module instantiation )等。 2.书写语法建议 一个模块用一个文件; 模块名与文件名要同名; 一行一句语句。 信号方向按输入、输出、双向顺序描述。 设计模块时可尽量考虑采用参数化,提高设计的重用。 以上是初学者的建议,具体的或深入的方面可看相关的文档。下面的有关语法建议类似。 3.2 时延 绝密 请输入文档编号Verilog HDL 入门教程 2004-08-16 第11页,共41页 版权所有,侵权必究 信号在电路中传输会有传播延时等,如线延时、器件延时。时延就是对延时特性的HDL描 述。举例如下: assign # 2 B = A; 表示 B信号在2个时间单位后得到A信号的值。如下图: A: 2 B: 图3 在Verilog HDL中,所有时延都必须根据时间单位进行定义,定义方式为在文件头添加如下语 句: `timescale 1ns /100ps 其中’timescale 是Verilog HDL 提供的预编译处理命令, 1ns 表示时间单位是1ns ,100ps表示 时间精度是100ps。根据该命令,编译工具才可以认知 #2 为2ns。 在Verilog HDL 的IEEE标准中没有规定时间单位的缺省值,由各模拟工具确定。因此,在写代 码时必须确定。 3.3 三种建模方式 在HDL的建模中,主要有结构化描述方式、数据流描述方式和行为描述方式,下面分别举例 说明三者之间的区别。 3.3.1 结构化描述方式 结构化的建模方式就是通过对电路结构的描述来建模,即通过对器件的调用(HDL概念称为 例化),并使用线网来连接各器件的描述方式。这里的器件包括Verilog HDL的内置门如与门and ,异或门xor等,也可以是用户的一个设计。结构化的描述方式反映了一个设计的层次结构。 例[1]:一位全加器 图4 一位全加器的结构图 代码: module FA_struct (A, B, Cin, Sum, Count); input A; input B; input Cin; 绝密 请输入文档编号Verilog HDL 入门教程 2004-08-16 第12页,共41页 版权所有,侵权必究 output Sum; output Count; wire S1, T1, T2, T3; // -- statements -- // xor x1 (S1, A, B); xor x2 (Sum, S1, Cin); and A1 (T3, A, B ); and A2 (T2, B, Cin); and A3 (T1, A, Cin); or O1 (Cout, T1, T2, T3 ); endmodule 该实例显示了一个全加器由两个异或门、三个与门、一个或门构成。S1、T1、T2、T3则是 门与门之间的连线。代码显示了用纯结构的建模方式,其中xor 、and、or 是Verilog HDL 内置的门 器件。以 xor x1 (S1, A, B) 该例化语句为例: xor 表明调用一个内置的异或门,器件名称xor ,代码实例化名x1(类似原理图输入方式)。 括号内的S1,A,B 表明该器件管脚的实际连接线(信号)的名称 ,其中 A、B是输入,S1是 输出。其他同。 例[2]:两位的全加器 两位的全加器可通过调用两个一位的全加器来实现。该设计的设计层次示意图和结构图如 下: Four_bit_FA FA_struct FA_struct A B Cin Sum Count FA A B Cin Sum Count FA Four_bit_FA FA _struct _struct FCin FB FSum FCount 图5 两位全加器的结构示意图 代码: module Four_bit_FA (FA, FB, FCin, FSum, FCout ) ; parameter SIZE = 2; input [SIZE:1] FA; 绝密 请输入文档编号Verilog HDL 入门教程 2004-08-16 第13页,共41页 版权所有,侵权必究 input [SIZE:1] FB; input FCin; output [SIZE:1] FSum; output FCout; wire FTemp; FA_struct FA1( .A (FA[1]), .B (FB[1]), .Cin (FCin) , .Sum (FSum[1]), .Cout (Ftemp) ); FA_struct FA2( .A (FA[2]), .B (FB[2]), .Cin (FTemp) , .Sum (FSum[2]), .Cout (FCount ) ); endmodule 该实例用结构化建模方式进行一个两位的全加器的设计,顶层模块Four_bit_FA 调用了两个一 位的全加器 FA_struct 。在这里,以前的设计模块FA_struct 对顶层而言是一个现成的器件,顶层模 块只要进行例化就可以了。 注意这里的例化中,端口映射(管脚的连线)采用名字关联,如 .A (FA[2]) ,其中.A 表示 调用器件的管脚A,括号中的信号表示接到该管脚A的电路中的具体信号。 wire 保留字表明信号Ftemp 是属线网类型(下面有具体描述)。 另外,在设计中,尽量考虑参数化的问题。 器件的端口映射必须采用名字关联。 3.3.2 数据流描述方式 数据流的建模方式就是通过对数据流在设计中的具体行为的描述的来建模。最基本的机制就 是用连续赋值语句。在连续赋值语句中,某个值被赋给某个线网变量(信号),语法如下: assign [delay] net_name = expression; 如:assign #2 A = B; 绝密 请输入文档编号Verilog HDL 入门教程 2004-08-16 第14页,共41页 版权所有,侵权必究 在数据流描述方式中,还必须借助于HDL提供的一些运算符,如按位逻辑运算符 :逻辑与 (&),逻辑或(|)等。 以上面的全加器为例,可用如下的建模方式: 图6 一位全加器的结构图 `timescale 1ns/100ps module FA_flow(A,B,Cin,Sum,Count) input A,B,Cin; output Sum, Count; wire S1,T1,T2,T3; assign # 2 S1 = A ^ B; assign # 2 Sum = S1 ^ Cin; assign #2 T3 = A & B; assign #2 T1 = A & Cin; assign #2 T2 = B & Cin ; endmodule 注意在各assign 语句之间,是并行执行的,即各语句的执行与语句之间的顺序无关。如上,当 A有个变化时,S1、T3、T1 将同时变化,S1的变化又会造成Sum的变化。 3.3.3 行为描述方式 行为方式的建模是指采用对信号行为级的描述(不是结构级的描述)的方法来建模。在表示 方面,类似数据流的建模方式,但一般是把用initial 块语句或always 块语句描述的归为行为建模方 式。行为建模方式通常需要借助一些行为级的运算符如加法运算符(+),减法运算符(-)等。 以下举个例子,对initial 和always 语句的具体应用可看相关章节的介绍,这里,先对行为建模 方式有个概念。 例[1] 一位全加器的行为建模 module FA_behav1(A, B, Cin, Sum, Cout ); input A,B,Cin; output Sum,Cout; 绝密 请输入文档编号Verilog HDL 入门教程 2004-08-16 第15页,共41页 版权所有,侵权必究 reg Sum, Cout; reg T1,T2,T3; always@ ( A or B or Cin ) begin Sum = (A ^ B) ^ Cin ; T1 = A & Cin; T2 = B & Cin ; T3 = A & B; Cout = (T1| T2) | T3; end endmodule 需要先建立以下概念: 1、只有寄存器类型的信号才可以在always和initial 语句中进行赋值,类型定义通过reg语句实 现。 2、always 语句是一直重复执行,由敏感表(always 语句括号内的变量)中的变量触发。 3、always 语句从0 时刻开始。 4、在begin 和end 之间的语句是顺序执行,属于串行语句。 例[2]:一位全加器的行为建模 module FA_behav2(A, B, Cin, Sum, Cout ); input A,B,Cin; output Sum,Cout; reg Sum, Cout; always@ ( A or B or Cin ) begin {Count ,Sum} = A + B + Cin ; end endmodule 在例2中,采用更加高级(更趋于行为级)描述方式,即直接采用 “+”来描述加法。 {Count,Sum}表示对位数的扩展,因为两个1bit 相加,和有两位,低位放在Sum 变量中,进位放 在Count 中。 3.3.4 混合设计描述 绝密 请输入文档编号Verilog HDL 入门教程 2004-08-16 第16页,共41页 版权所有,侵权必究 在实际的设计中,往往是多种设计模型的混合。一般地,对顶层设计,采用结构描述方式, 对低层模块,可采用数据流、行为级或两者的结合。如上面的两bit 全加器,对顶层模块 (Four_bit_FA)采用结构描述方式对低层进行例化,对低层模块(FA)可采用结构描述、数据流描 述或行为级描述。 4 Verilog HDL 基本语法 本节介绍Verilog HDL 语言的一些基本要素,包括标识符、注释、格式、数字值集合、两种数 据类型、运算符和表达式和一些基本的语句如IF语句等。 4.1 标识符 4.1.1 定义 标识符( identifier)用于定义模块名、端口名、信号名等。 Verilog HDL 中的标识符( identifier )可以是任意一组字母、数字、$符号和_(下划线)符号的组合,但标识符的第一个字符必须是字母 或者下划线。另外,标识符是区分大小写的。以下是标识符的几个例子: Count COUNT //与Count 不同。 R56_68 FIVE$ 4.1.2 关键词 Verilog HDL 定义了一系列保留字,叫做关键词,附录A 列出了语言中的所有保留字。注意只 有小写的关键词才是保留字。例如,标识符always (这是个关键词)与标识符ALWAYS(非关键词)是 不同的。 4.1.3 书写规范建议 以下是一些书写规范的要求,可参考公司的《Verilog 代码书写规范》。 1、用有意义的有效的名字如 Sum 、CPU_addr等。 2、用下划线区分词。 3、采用一些前缀或后缀,如 时钟采用Clk 前缀:Clk_50,Clk_CPU; 低电平采用_n 后缀:Enable_n; 4、统一一定的缩写 如全局复位信号 Rst。 5、同一信号在不同层次保持一致性,如同一时钟信号必须在各模块保持一致。 6、自定义的标识符不能与保留字同名。 7、参数采用大写,如SIZE 。 4.2 注释 Verilog HDL 中有两种注释的方式,一种是以“/*”符号开始,“*/” 结束,在两个符号之间 的语句都是注释语句,因此可扩展到多行。如: 绝密 请输入文档编号Verilog HDL 入门教程 2004-08-16 第17页,共41页 版权所有,侵权必究 /* statement1 , statement2, .. ... statementn */ 以上n个语句都是注释语句。 另一种是以 // 开头的语句,它表示以 // 开始到本行结束都属于注释语句。 4.3 格式 Verilog HDL 是区分大小写的,即大小写不同的标识符是不同的。 另外Verilog HDL的书写格式是自由

该用户的其他资料

  • 名称/格式
  • 评分
  • 下载次数
  • 资料大小
  • 上传时间

用户评论

0/200
    暂无评论
上传我的资料

相关资料

资料评价:

/ 41
所需积分:1 立即下载
返回
顶部
举报
资料
关闭

温馨提示

感谢您对爱问共享资料的支持,精彩活动将尽快为您呈现,敬请期待!