欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    [工学]中文版Verilog HDL简明教程.doc

    • 资源ID:4532306       资源大小:55.56KB        全文页数:48页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    [工学]中文版Verilog HDL简明教程.doc

    Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。 Verilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机 制。所有这些都使用同一种建模语言。此外,Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟 的具体控制和运行。Verilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模 型能够使用Verilog仿真器进行验证。语言从C编程语言中继承了多种操作符和结构。Verilog HDL提供了扩展的建模能力,其中许多扩展最初很 难理解。但是,Verilog HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯 片到完整的电子系统进行描述。 =中文版Verilog HDL简明教程:第1章 简介      Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。 Verilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机 制。所有这些都使用同一种建模语言。此外,Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟 的具体控制和运行。Verilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模 型能够使用Verilog仿真器进行验证。语言从C编程语言中继承了多种操作符和结构。Verilog HDL提供了扩展的建模能力,其中许多扩展最初很 难理解。但是,Verilog HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯 片到完整的电子系统进行描述。历史Verilog HDL语言最初是于1983年由 Gateway Design Automation公司为其模拟器产品开发的硬件建模语言。那时它只是一种专用语言。由于他们的模拟、仿真器产品的广泛 使用,Verilog HDL 作为一种便于使用且实用的语言逐渐为众多设计者所接受。在一次努力增加语言普及性的活动中,Verilog HDL语言于 1990年被推向公众领域。 Open Verilog International (OVI)是促进Verilog发展的国际性组织。1992年,  OVI决定致力于推广Verilog OVI标准成为IEEE标准。这一努力最后获得成功,Verilog 语言于1995年成为IEEE标准,称为 IEEE Std 13641995。完整的标准在Verilog硬件描述语言参考手册中有详细描述。主要能力下面列出的是Verilog硬件描述语言的主要能力:* 基本逻辑门,例如and、or和nand等都内置在语言中。* 用户定义原语(UDP)创建的灵活性。用户定义的原语既可以是组合逻辑原语,也可以是时序逻辑原语。* 开关级基本结构模型,例如pmos 和nmos等也被内置在语言中。* 提供显式语言结构指定设计中的端口到端口的时延及路径时延和设计的时序检查。* 可采用三种不同方式或混合方式对设计建模。这些方式包括:行为描述方式使用过程化结构建模;数据流方式使用连续赋值语句方式建模;结构化方式使用门和模块实例语句描述建模。* Verilog HDL中有两类数据类型:线网数据类型和寄存器数据类型。线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。* 能够描述层次设计,可使用模块实例结构描述任何层次。* 设计的规模可以是任意的;语言不对设计的规模(大小)施加任何限制。* Verilog HDL不再是某些公司的专有语言而是IEEE标准。* 人和机器都可阅读Verilog 语言,因此它可作为EDA的工具和设计者之间的交互语言。* Verilog HDL语言的描述能力能够通过使用编程语言接口(PLI)机制进一步扩展。PLI是允许外部函数访问Verilog 模块内信息、允许设计者与模拟器交互的例程集合。* 设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级(RTL)到算法级,包括进程和队列级。* 能够使用内置开关级原语在开关级对设计完整建模。* 同一语言可用于生成模拟激励和指定测试的验证约束条件,例如输入值的指定。* Verilog HDL 能够监控模拟验证的执行,即模拟验证执行过程中设计的值能够被监控和显示。这些值也能够用于与期望值比较,在不匹配的情况下,打印报告消息。* 在行为级描述中,Verilog HDL不仅能够在RTL级上进行设计描述,而且能够在体系结构级描述及其算法级行为上进行设计描述。* 能够使用门和模块实例化语句在结构级进行结构描述。* Verilog HDL 的混合方式建模能力,即在一个设计中每个模块均可以在不同设计层次上建模。* Verilog HDL 还具有内置逻辑函数,例如&(按位与)和|(按位或)。* 对高级编程语言结构,例如条件语句、情况语句和循环语句,语言中都可以使用。* 可以显式地对并发和定时进行建模。* 提供强有力的文件读写能力。* 语言在特定情况下是非确定性的,即在不同的模拟器上模型可以产生不同的结果;例如,事件队列上的事件顺序在标准中没有定义。习题1. Verilog HDL 是在哪一年首次被IEEE标准化的?2. Verilog HDL支持哪三种基本描述方式?3. 可以使用Verilog HDL描述一个设计的时序吗?4. 语言中的什么特性能够用于描述参数化设计?5. 能够使用Verilog HDL 编写测试验证程序吗?6. Verilog HDL 是由哪个公司最先开发的?7. Verilog HDL中的两类主要数据类型什么?8. UDP代表什么?9. 写出两个开关级基本门的名称。10. 写出两个基本逻辑门的名称。=中文版Verilog HDL简明教程:第2章 HDL指南      本章提供HDL语言的速成指南。2.1 模块 模块是Verilog 的基本描述单位,用于描述某个设计的功能或结构及其与其他模块通信的外部端口。一个设计的结构可使用开关级原语、门级原语和用户 定义的原语方式描述; 设计的数据流行为使用连续赋值语句进行描述; 时序行为使用过程结构描述。一个模块可以在另一个模块中使用。一个模块的基本语法如下:module module_name (port_list);Declarations:reg, wire, parameter, input, output, inout, function, task, . . . Statements:Initial statementAlways statementModule instantiationGate instantiationUDP instantiationContinuous assignmentendmodule 说明部分用于定义不同的项,例如模块描述中使用的寄存器和参数。语句定义设计的功能和结构。说明部分和语句可以散布在模块中的任何地方;但是变量、寄存 器、线网和参数等的说明部分必须在使用前出现。为了使模块描述清晰和具有良好的可读性, 最好将所有的说明部分放在语句前。本书中的所有实例都遵守这一规 范。以下为建模一个半加器电路的模块的简单实例。module HalfAdder (A, B, Sum, Carry);input A, B;output Sum, Carry;assign #2 Sum = A  B;assign #5 Carry = A & B;endmodule模块的名字是HalfAdder。 模块有4个端口: 两个输入端口A和B,两个输出端口Sum和Carry。由于没有定义端口的位数, 所有端口大小都为1位;同时, 由于没有各端口的数据类型说明, 这四个端口都是线网数据类型。模块包含两条描述半加器数据流行为的连续赋值语句。从这种意义上讲,这些语句在模块中出现的顺序无关紧要,这些语句是并发的。每条语句的执行顺序依赖于发生在变量A和B上的事件。在模块中,可用下述方式描述一个设计:1) 数据流方式;2) 行为方式;3) 结构方式;4) 上述描述方式的混合。下面几节通过实例讲述这些设计描述方式。不过有必要首先对Verilog HDL的时延作简要介绍。2.2 时延Verilog HDL模型中的所有时延都根据时间单位定义。 下面是带时延的连续赋值语句实例。assign #2 Sum = A  B;#2指2个时间单位。使用编译指令将时间单位与物理时间相关联。这样的编译器指令需在模块描述前定义,如下所示: timescale 1ns /100ps此语句说明时延时间单位为1ns并且时间精度为100ps (时间精度是指所有的时延必须被限定在0.1ns内)。 如果此编译器指令所在的模块包含上面的连续赋值语句, #2 代表2ns。如果没有这样的编译器指令, Verilog HDL 模拟器会指定一个缺省时间单位。IEEE Verilog HDL 标准中没有规定缺省时间单位。2.3 数据流描述方式用数据流描述方式对一个设计建模的最基本的机制就是使用连续赋值语句。在连续赋值语句中,某个值被指派给线网变量。 连续赋值语句的语法为:assign delay LHS_net = RHS_ expression;右边表达式使用的操作数无论何时发生变化, 右边表达式都重新计算, 并且在指定的时延后变化值被赋予左边表达式的线网变量。时延定义了右边表达式操作数变化与赋值给左边表达式之间的持续时间。如果没有定义时延值, 缺省时延为0。下面的例子显示了使用数据流描述方式对2-4解码器电路的建模的实例模型。timescale 1ns/ 1nsmodule Decoder2x4 (A, B, EN, Z);input A, B, EN;output  0 :3 Z;wire Abar, Bbar;assign #1 Abar =  A; / / 语句 1。 assign #1 Bbar =  B; / / 语句 2。 assign #2 Z0 =  (Abar & Bbar & EN)  / / 语句 3。 assign #2 Z1 =  (Abar & B & EN)  / / 语句 4。 assign #2 Z2 =  (A & Bbar & EN)  / / 语句 5。 assign #2 Z3 =  (A & B & EN)  / / 语句 6。 endmodule以反引号“  ”开始的第一条语句是编译器指令, 编译器指令timescale 将模块中所有时延的单位设置为1 ns,时间精度为1 ns。例如,在连续赋值语句中时延值#1和#2分别对应时延1 ns和2 ns。模块Decoder2x4有3个输入端口和1个4位输出端口。线网类型说明了两个连线型变量Abar和Bbar (连线类型是线网类型的一种)。此外,模块包含6个连续赋值语句。 当EN在第5 ns变化时,语句3、4、5和6执行。这是因为EN是这些连续赋值语句中右边表达式的操作数。Z0在第7 ns时被赋予新值0。当A 在第15 ns变化时, 语句1、5和6执行。执行语句5和6不影响Z0和Z1的取值。执行语句5导致Z2值在第17 ns变为0。执行语句 1导致Abar在第16 ns被重新赋值。由于Abar的改变,反过来又导致Z0值在第18 ns变为1。请注意连续赋值语句是如何对电路的数据流行为建模的;这种建模方式是隐式而非显式的建模方式。此外,连续赋值语句是并发执行的,也就是说各语句的执行顺序与其在描述中出现的顺序无关。2.4 行为描述方式设计的行为功能使用下述过程语句结构描述:1) initial语句:此语句只执行一次。2) always语句:此语句总是循环执行, 或者说此语句重复执行。只有寄存器类型数据能够在这两种语句中被赋值。寄存器类型数据在被赋新值前保持原有值不变。所有的初始化语句和always语句在0时刻并发执行。下例为always语句对1位全加器电路建模的示例。module FA_Seq (A, B, Cin, Sum, Cout);input A, B, Cin;output Sum, Cout;reg Sum, Cout;reg T1, T2, T3;always ( A or B or Cin ) beginSum = (A  B)  Cin;T1 = A & Cin;T2 = B & Cin;T3 = A & B;Cout = (T1| T2) | T3;endendmodule 模块FA_Seq 有三个输入和两个输出。由于Sum、Cout、T1、T2和T3在always 语句中被赋值,它们被说明为 reg 类型 (reg 是寄存器数据类型的一种)。always 语句中有一个与事件控制(紧跟在字符 后面的表达式)。相关联的顺序过程(begin-end 对)。这意味着只要A、B或Cin 上发生事件,即A、B或Cin之一的值发生变化,顺序过程就执行。在顺序过程中的语句顺序执行,并且在顺序过程执行结 束后被挂起。顺序过程执行完成后,always 语句再次等待A、B或Cin上发生的事件。在顺序过程中出现的语句是过程赋值模块化的实例。模块化过程赋值在下一条语句执行前完成执行。过程赋值可以有一个可选的时延。时延可以细分为两种类型:1) 语句间时延: 这是时延语句执行的时延。2) 语句内时延: 这是右边表达式数值计算与左边表达式赋值间的时延。下面是语句间时延的示例:Sum = (A  B)  Cin;#4 T1 = A & Cin;在第二条语句中的时延规定赋值延迟4个时间单位执行。就是说,在第一条语句执行后等待4个时间单位,然后执行第二条语句。下面是语句内时延的示例。Sum = #3 (A B)  Cin;这个赋值中的时延意味着首先计算右边表达式的值, 等待3个时间单位,然后赋值给Sum。如果在过程赋值中未定义时延,缺省值为0时延,也就是说,赋值立即发生。这种形式以及在always 语句中指定语句的其他形式将在第8章中详细讨论。下面是initial语句的示例:timescale 1ns / 1nsmodule Test (Pop, Pid);output Pop, Pid;reg Pop, Pid;initial beginPop = 0; / 语句 1。Pid = 0; / 语句 2。Pop = #5 1; / 语句 3。Pid = #3 1; / 语句 4。Pop = #6 0; / 语句 5。Pid = #2 0; / 语句 6。endendmodule initial语句包含一个顺序过程。这一顺序过程在0 ns时开始执行,并且在顺序过程中所有语句全部执行完毕后, initial语句永远挂起。这 一顺序过程包含带有定义语句内时延的分组过程赋值的实例。语句1和2在0 ns时执行。第三条语句也在0时刻执行,导致Pop 在第5 ns时被赋值。语 句4在第5 ns执行,并且Pid 在第8 ns被赋值。同样,Pop在14 ns被赋值0,Pid在第16 ns被赋值0。第6条语句执行后, initial语句永远被挂起。2.5 结构化描述形式在Verilog HDL中可使用如下方式描述结构:1) 内置门原语(在门级);2) 开关级原语(在晶体管级);3) 用户定义的原语(在门级);4) 模块实例 (创建层次结构)。通过使用线网来相互连接。下面的结构描述形式使用内置门原语描述的全加器电路实例。module FA_Str (A, B, Cin, Sum, Cout);input A, B, Cin;output Sum, Cout;wire S1, T1, T2, T3;xorX1 (S1, A, B),X2 (Sum, S1, Cin);andA1 (T3, A, B),A2 (T2, B, Cin),A3 (T1, A, Cin),orO1 (Cout, T1, T2, T3);endmodule 在这一实例中,模块包含门的实例语句,也就是说包含内置门xor、and和or 的实例语句。门实例由线网类型变量S1、T1、T2和T3互连。由于没 有指定的顺序, 门实例语句可以以任何顺序出现;图中显示了纯结构;xor、and和or是内置门原语;X1、X2、A1等是实例名称。紧跟在每个门后的 信号列表是它的互连;列表中的第一个是门输出,余下的是输入。例如,S1与xor 门实例X1的输出连接,而A和B与实例X1的输入连接。4位全加器可以使用4个1位全加器模块描述。下面是4位全加器的结构描述形式。module FourBitFA (FA, FB, FCin, FSum, FCout );parameter SIZE = 4;input SIZE:1 FA, FB;output SIZE:1 FSuminput FCin;input FCout;wire  1: SIZE1 FTemp;FA_StrFA1( .A (FA1), .B(FB1), .Cin(FCin),.Sum(FSum1), .Cout(FTemp2),FA2( .A (FA2), .B(FB2), .Cin(FTemp1),.Sum(FSum2), .Cout(FTemp2),FA3(FA3, FB3, FTemp2, FSum3, FTemp3,FA4(FA4, FB4, FTemp3, FSum4, FCout);endmodule 在这一实例中,模块实例用于建模4位全加器。在模块实例语句中,端口可以与名称或位置关联。前两个实例FA1和FA2使用命名关联方式,也就是说,端口 的名称和它连接的线网被显式描述(每一个的形式都为“.port_name (net_name))。最后两个实例语句,实例FA3和FA4使用位置关联 方式将端口与线网关联。这里关联的顺序很重要,例如,在实例FA4中,第一个FA4与FA_Str 的端口A连接,第二个FB4与FA_Str  的端口B连接,余下的由此类推。2.6 混合设计描述方式在模块中,结构的和行为的结构可以自由混合。也就是说,模 块描述中可以包含实例化的门、模块实例化语句、连续赋值语句以及always语句和initial语句的混合。它们之间可以相互包含。来自always语 句和initial语句(切记只有寄存器类型数据可以在这两种语句中赋值)的值能够驱动门或开关,而来自于门或连续赋值语句(只能驱动线网)的值能够反过 来用于触发always语句和initial语句。下面是混合设计方式的1位全加器实例。module FA_Mix (A, B, Cin, Sum, Cout);input A,B, Cin;output Sum, Cout;reg Cout;reg T1, T2, T3;wire S1;xor X1(S1, A, B); / 门实例语句。always ( A or B or Cin ) begin / always 语句。T1 = A & Cin;T2 = B & Cin;T3 = A & B;Cout = (T1| T2) | T3;endassign Sum = S1  Cin; / 连续赋值语句。endmodule只要A或B上有事件发生,门实例语句即被执行。只要A、B或Cin上有事件发生,就执行always 语句,并且只要S1或Cin上有事件发生,就执行连续赋值语句。2.7 设计模拟 Verilog HDL不仅提供描述设计的能力,而且提供对激励、控制、存储响应和设计验证的建模能力。激励和控制可用初始化语句产生。验证运行过程中 的响应可以作为“变化时保存”或作为选通的数据存储。最后,设计验证可以通过在初始化语句中写入相应的语句自动与期望的响应值比较完成。下面是测试模块Top的例子。该例子测试2.3节中讲到的FA_Seq模块。timescale 1ns/1nsmodule Top; / 一个模块可以有一个空的端口列表。reg PA, PB, PCi;wire PCo, PSum;/ 正在测试的实例化模块:FA_Seq F1(PA, PB, PCi, PSum, PCo); / 定位。initialbegin: ONLY_ONCEreg 3:0 Pal;/需要4位, Pal才能取值8。for (Pal = 0; Pal < 8; Pal = Pal + 1)beginPA, PB, PCi = Pal;#5 $display (“PA, PB, PCi = %b%b%b”, PA, PB, PCi,“ : : : PCo, PSum=%b%b”, PCo, PSum);endendendmodule 在测试模块描述中使用位置关联方式将模块实例语句中的信号与模块中的端口相连接。也就是说,PA连接到模块FA_Seq的端口A,PB连接到模块 FA_Seq的端口B,依此类推。注意初始化语句中使用了一个for循环语句,在PA、PB和PCi上产生波形。for 循环中的第一条赋值语句用于表示 合并的目标。自右向左,右端各相应的位赋给左端的参数。初始化语句还包含有一个预先定义好的系统任务。系统任务$display将输入以特定的格式打印输 出。系统任务$display调用中的时延控制规定$display任务在5个时间单位后执行。这5个时间单位基本上代表了逻辑处理时间。即是输入向量的加载至观察到模块在测试条件下输出之间的延迟时间。 这一模型中还有另外一个细微差别。Pal在初始化语句内被局部定义。为完成这一功能,初始化语句中的顺序过程(begin-end)必须标记。在这种情 况下, ONLY_ONCE是顺序过程标记。如果在顺序过程内没有局部声明的变量,就不需要该标记。下面是测试模块产生的输出。PA, PB, PCi = 000 : PCo, PSum = 00PA, PB, PCi = 001 : PCo, PSum = 01PA, PB, PCi = 010 : PCo, PSum = 01PA, PB, PCi = 011 : PCo, PSum = 10PA, PB, PCi = 100 : PCo, PSum = 01PA, PB, PCi = 101 : PCo, PSum = 10PA, PB, PCi = 110 : PCo, PSum = 10PA, PB, PCi = 111 : PCo, PSum = 11验证与非门交叉连接构成的RS_FF模块的测试模块如下例所示。timescale 10ns/1nsmodule RS_FF (Q, Qbar, R, S);output Q, Qbar;input R, S;nand #1 (Q, R, Qbar);nand #1 (Qbar, S, Q,);/在门实例语句中,实例名称是可选的。endmodulemodule Test;reg TS, TR;wire TQ, TQb;/测试模块的实例语句:RS_FF NSTA (.Q(TQ), .S(TS), .R(TR), .Qbar(TQb); /采用端口名相关联的连接方式。/ 加载激励:initialbegin:TR = 0;TS = 0;#5 TS = 1;#5 TS = 0;TR = 1;#5 TS = 1;TR = 0;#5 TS = 0;#5 TR = 1;end/输出显示:initial$monitor ("At time %t ," , $time,"TR = %b, TS=%b, TQ=%b, TQb= %b", TR, TS, TQ, TQb);endmoduleRS_FF模块描述了设计的结构。在门实例语句中使用门时延;例如,第一个实例语句中的门时延为1个时间单位。该门时延意味着如果R或Qbar假定在T时刻变化,Q将在T+1时刻获得计算结果值。模块Test是一个测试模块。测试模块中的RS_FF用实例语句说明其端口用端口名关联方式连接。在这一模块中有两条初始化语句。第一个初始化语句只简单地产生TS和TR上的波形。这一初始化语句包含带有语句间时延的程序块过程赋值语句。第二条初始化语句调用系统任务$monitor。这一系统任务调用的功能是只要参数表中指定的变量值发生变化就打印指定的字符串。下面是测试模块产生的输出。请注意timescale指令在时延上的影响。At time 0, TR=0, TS=0, TQ=x, TQb= xAt time 10, TR=0, TS=0, TQ=1, TQb= 1At time 50, TR=0, TS=1, TQ=1, TQb= 1At time 60, TR=0, TS=1, TQ=1, TQb= 0At time 100, TR=1, TS=0, TQ=1, TQb= 0At time 110, TR=1, TS=0, TQ=1, TQb= 1At time 120, TR=1, TS=0, TQ=0, TQb= 1At time 150, TR=0, TS=1, TQ=0, TQb= 1At time 160, TR=0, TS=1, TQ=1, TQb= 1At time 170, TR=0, TS=1, TQ=1, TQb= 0At time 200, TR=0, TS=0, TQ=1, TQb= 0At time 210, TR=0, TS=0, TQ=1, TQb= 1At time 250, TR=1, TS=0, TQ=1, TQb= 1At time 260, TR=1, TS=0, TQ=0, TQb= 1后面的章节将更详细地讲述这些主题。习题1. 在数据流描述方式中使用什么语句描述一个设计?2. 使用timescale 编译器指令的目的是什么?举出一个实例。3. 在过程赋值语句中可以定义哪两种时延?请举例详细说明。4. initial语句与always 语句的关键区别是什么?5. 为2.3节中描述的模块Decode2x4编写一个测试验证程序。6. 列出你在Verilog HDL模型中使用的两类赋值语句。7. 在顺序过程中何时需要定义标记?8. 找出下面连续赋值语句的错误。assign Reset = #2  WriteBus本章介绍Verilog HDL的基本要素,包括标识符、注释、数值、编译程序指令、系统任务和系统函数。另外,本章还介绍了Verilog硬件描述语言中的两种数据类型。3.1 标识符Verilog HDL中的标识符(identifier)可以是任意一组字母、数字、$符号和_(下划线)符号的组合,但标识符的第一个字符必须是字母或者下划线。另外,标识符是区分大小写的。以下是标识符的几个例子:CountCOUNT /与Count不同。_R1_D2R56_68FIVE$转义标识符(escaped identifier )可以在一条标识符中包含任何可打印字符。转义标识符以 (反斜线)符号开头,以空白结尾(空白可以是一个空格、一个制表字符或换行符)。下面例举了几个转义标识符:7400.*.$*QOutGate 与OutGate相同。最后这个例子解释了在一条转义标识符中,反斜线和结束空格并不是转义标识符的一部分。也就是说,标识符OutGate 和标识符OutGate恒等。Verilog HDL定义了一系列保留字,叫做关键词,它仅用于某些上下文中。 附录A列出了语言中的所有保留字。注意只有小写的关键词才是保留字。例如,标识符always(这是个关键词)与标识符ALWAYS(非关键词)是不同的。另外,转义标识符与关键词并不完全相同。标识符initial 与标识符initial(这是个关键词)不同。注意这一约定与那些转义标识符不同。3.2 注释在Verilog HDL中有两种形式的注释。/*第一种形式:可以扩展至多行 */第二种形式:在本行结束。3.3 格式Verilog HDL区分大小写。也就是说大小写不同的标识符是不同的。此外,Verilog HDL是自由格式的,即结构可以跨越多行编写,也可以在一行内编写。白空(新行、制表符和空格)没有特殊意义。下面通过实例解释说明。initial begin Top = 3' b001; #2 Top = 3' b011; end和下面的指令一样:initialbegin Top = 3' b001; #2 Top = 3' b011;end3.4 系统任务和函数以$字符开始的标识符表示系统任务或系统函数。任务提供了一种封装行为的机制。这种机制可在设计的不同部分被调用。任务可以返回0个或多个值。函数除只能返回一个值以外与任务相同。此外,函数在0时刻执行,即不允许延迟,而任务可以带有延迟。$display ("Hi, you have reached LT today");/* $display 系统任务在新的一行中显示。*/$time/该系统任务返回当前的模拟时间。系统任务和系统函数在第10章中详细讲解。3.5 编译指令以(反引号)开始的某些标识符是编译器指令。在Verilog 语言编译时,特定的编译器指令在整个编译过程中有效(编译过程可跨越多个文件),直到遇到其它的不同编译程序指令。完整的标准编译器指令如下:* define, undef* ifdef, else, endif* default_nettype* include* resetall* timescale* unconnected_drive, nounconnected_drive* celldefine, endcelldefine3.5.1 define 和undefdefine指令用于文本替换,它很像C语言中的#define 指令,如:define MAX_BUS_SIZE 32. . . reg  MAX_BUS_SIZE - 1:0  AddReg;一旦define 指令被编译,其在整个编译过程中都有效。例如,通过另一个文件中的define指令,MAX_BUS_SIZE 能被多个文件使用。undef 指令取消前面定义的宏。例如:define WORD 16 /建立一个文本宏替代。. . .wire  WORD : 1 Bus;. . . undef WORD/ 在undef编译指令后, WORD的宏定义不再有效. 3.5.2 ifdef、else 和endif这些编译指令用于条件编译,如下所示:ifdef WINDOWSparameter WORD_SIZE = 16elseparameter WORD_SIZE = 32endif在编译过程中,如果已定义了名字为WINDOWS的文本宏,就选择第一种参数声明,否则选择第二种参数说明。else 程序指令对于ifdef 指令是可选的。3.5.3 default_nettype该指令用于为隐式线网指定线网类型。也就是将那些没有被说明的连线定义线网类型。default_nettype wand该实例定义的缺省的线网为线与类型。因此,如果在此指令后面的任何模块中没有说明的连线,那么该线网被假定为线与类型。3.5.4 includeinclude 编译器指令用于嵌入内嵌文件的内容。文件既可以用相对路径名定义,也可以用全路径名定义, 例如:include " . . / . . /primitives.v"编译时,这一行由文件“././primitives.v” 的内容替代。3.5.5 resetall 该编译器指令将所有的编译指令重新设置为缺省值。resetall例如,该指令使得缺省连线类型为线网类型。3.5.6 timescale在Verilog HDL 模型中,所有时延都用单位时间表述。使用timescale编译器指令将时间单位与实际时间相关联。该指令用于定义时延的单位和时延精度。timescale编译器指令格式为:timescale time_unit / time_precisiontime_unit 和time_precision 由值

    注意事项

    本文([工学]中文版Verilog HDL简明教程.doc)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开