硬件描述语言verilogHDL基础ppt课件.ppt

上传人:sccc 文档编号:5630853 上传时间:2023-08-04 格式:PPT 页数:302 大小:8.83MB
返回 下载 相关 举报
硬件描述语言verilogHDL基础ppt课件.ppt_第1页
第1页 / 共302页
硬件描述语言verilogHDL基础ppt课件.ppt_第2页
第2页 / 共302页
硬件描述语言verilogHDL基础ppt课件.ppt_第3页
第3页 / 共302页
硬件描述语言verilogHDL基础ppt课件.ppt_第4页
第4页 / 共302页
硬件描述语言verilogHDL基础ppt课件.ppt_第5页
第5页 / 共302页
点击查看更多>>
资源描述

《硬件描述语言verilogHDL基础ppt课件.ppt》由会员分享,可在线阅读,更多相关《硬件描述语言verilogHDL基础ppt课件.ppt(302页珍藏版)》请在三一办公上搜索。

1、Verilog HDL 基础 第一部分 初级篇,第一讲 Verilog 的基本概念,2023/8/4,2,硬件描述语言HDL(Hardware Description Language)是硬件设计人员和电子设计自动化(EDA)工具之间的接口,其主要目的是用来编写设计文件,建立电子系统行为级的仿真模型。,1.1 硬件描述语言HDL,2023/8/4,3,1.1 硬件描述语言HDL,硬件描述语言利用计算机的巨大能力对用HDL建模的复杂数字逻辑进行仿真,然后再自动综合以生成符合要求且在电路结构上可以实现的数字逻辑网表(Netlist),根据网表和某种工艺的器件自动生成具体电路然后生成该工艺条件下这种

2、具体电路的延时模型。仿真验证无误后用于制造ASIC芯片或写入CPLD和FPGA器件中。,2023/8/4,4,什么是硬件描述语言,具有特殊结构能够对硬件逻辑电路的功能进行描述的一种高级编程语言这种特殊结构能够:描述电路的连接描述电路的功能在不同抽象级上描述电路描述电路的时序表达具有并行性HDL主要有两种:Verilog和VHDLVerilog起源于C语言,因此非常类似于C语言,容易掌握VHDL格式严谨VHDL出现较晚,但标准化早。IEEE 1706-1985标准。,2023/8/4,5,为什么要使用硬件描述语言,电路的逻辑功能容易理解;便于计算机对逻辑进行分析处理;把逻辑设计与具体电路的实现分

3、成两个独立的阶段来操作;逻辑设计与实现的工艺无关;逻辑设计的资源积累可以重复利用;可以由多人共同更好更快地设计非常复杂的逻辑电路(几十万门以上的逻辑系统)。,2023/8/4,6,1.2 Verilog HDL 的历史,1.2.1 什么是Verilog HDL Verilog HDL是硬件描述语言的一种,用于数字电子系统设计。设计者可用它进行各种级别的逻辑设计,可用它进行数字逻辑系统的仿真验证、时序分析、逻辑综合。它是目前应用最广泛的一种硬件描述语言。,2023/8/4,7,1.2 Verilog HDL 的历史,1.2.2 Verilog HDL的产生及发展Verilog HDL是在1983

4、年由GDA(GateWay Design Automation)公司的Phil Moorby所创。Phi Moorby后来成为Verilog-XL的主要设计者和Cadence公司的第一个合伙人。在19841985年间,Moorby设计出了第一个Verilog-XL的仿真器。1986年,Moorby提出了用于快速门级仿真的XL算法。1990年,Cadence公司收购了GDA公司1991年,Cadence公司公开发表Verilog语言,成立了OVI(Open Verilog International)组织来负责Verilog HDL语言的发展。1995年制定了Verilog HDL的IEEE标准

5、,即IEEE1364。,2023/8/4,8,1.2 Verilog HDL 的历史,2023/8/4,9,VHDL-比VerilogHDL早几年成为I EEE标准;-语法/结构比较严格,因而编写出的 模块风格比较清晰;-比较适合由较多的设计人员合作完成 的特大型项目(一百万门以上)。,1.3 Verilog HDL 和 VHDL的比较,2023/8/4,10,Verilog HDL-较多的第三方工具的支持-语法结构比VHDL简单-学习起来比VHDL容易-仿真工具比较好使-测试激励模块容易编写,1.3 Verilog HDL 和 VHDL的比较,2023/8/4,11,1.3 Verilog

6、HDL 和 VHDL的比较,2023/8/4,12,1.4 Verilog 目前的应用情况和适用的设计,Verilog的主要应用包括:ASIC和FPGA工程师编写可综合的RTL代码高抽象级系统仿真进行系统结构开发测试工程师用于编写各种层次的测试程序用于ASIC和FPGA单元或更高层次的模块的模型开发,2023/8/4,13,1.4 Verilog 目前的应用情况和适用的设计,Verilog 较为适合系统级(System)、算法级(Alogrithem)、寄存器传输级(RTL)、逻辑(Logic)、门级(Gate)和电路开关级(Switch)的设计,而对于特大型(千万门级以上)的系统级(Syst

7、em)设计,则VHDL更为合适。,2023/8/4,14,1.5 采用 Verilog HDL 设计复杂数字电路的优点,1.5.1 传统设计方法电路原理图输入法 采用电路原理图输入法进行设计,周期长、需要专门的设计工具、需手工布线等。这种低水平的设计方法大大延长了设计周期。,2023/8/4,15,采用Verilog输入法,可以很容易地把完成的设计移植到不同厂家的不同芯片中去,并在不同规模应用时可以较容易地作修改。采用Verilog输入法最大的优点是其与工艺无关性。实际上这是利用了计算机的巨大能力并在EDA工具帮助下,把逻辑验证与具体工艺库匹配、布线即时延计算分成不同的阶段来实现,从而减轻了人

8、们的繁琐劳动。,1.5.2 Verilog HDL 设计法与传统的电路原理图输入法的比较,2023/8/4,16,1.5 采用 Verilog HDL 设计复杂数字电路的优点,1.5.3 Verilog 的标准化与软核的重用 Verilog 是在1983年由GDA公司首先开发成功的,经过诸多改进,于1995年11月正式被批准为Verilog IEEE13631995标准,又于2001年3月在原标准的基础上经过改进和补充推出Verilog IEEE13642001新标准。由于Verilog HDL设计方法与工艺无关性,因而大大提高了Verilog 模型的可重用性。我们把功能经过验证的、可综合的、

9、实现后电路结构总门数在5000门以上的Verilog HDL模型称之为“软核”(Softcore),而把由软核构成的器件成为虚拟器件。利用软核和虚拟器件的可重复利用的特性就可大大缩短设计周期,加快了复杂电路的设计。,2023/8/4,17,1.5.4 软核、固核和硬核的概念以及它 们的重用,显而易见,在具体实现手段和工艺技术尚未确定的逻辑设计阶段,软核具有最大的灵活性。而近年来电路实现工艺技术的发展是相当迅速的,为了逻辑电路设计成果的积累,和更快更好地设计更大规模的电路,发展软核的设计和推广软核的重用技术是非常有必要的。,把在某一种专用半导体集成电路工艺的(ASIC)器件上实现的经验证是正确的

10、总门数在5000门以上的电路结构掩膜,称之为“硬核”。,把在某一种现场可编程门阵列(FPGA)器件上实现的,经验证是正确的总门数在5000门以上电路结构编码文件,称之为“固核”。,2023/8/4,18,1.6 Verilog HDL 的设计流程简介,自顶向下的设计是从系统级开始,把系统级划分为若干个基本单元,然后再把每个基本单元划分为下一层次的基本单元,一直这样做下去,直到可以直接用EDA元件库的基本元件来实现为止图1.1.3为自顶向下(Top-Down)的示意图,以设计树的形式绘出。,1.6.1 自顶向下(Top-Down)设计的基本概念,图 1.1.3 Top-Down 设计思想,202

11、3/8/4,19,1.6 Verilog HDL 的设计流程简介,1.6.2 层次管理的基本概念 复杂数字逻辑电路和系统的层次化、结构化设计隐含着硬件设计方案的逐次分解。完整的硬件设计可以由图1.1.3所示的设计树描述。在这个设计树上,节点对应着该层次上基本单元的行为描述,树枝对应着基本单元的结构分解。在不同的层次都可以进行仿真以对设计思想进行验证。EDA工具提供了有效的手段来管理错综复杂的层次,即可以很方便地查看某一层次某模块的源代码或电路图以改正仿真时发现的错误。,2023/8/4,20,1.6.3 具体模块的设计编译和仿真的过程,1.6 Verilog HDL 的设计流程简介,从左图可以

12、看出,模块设计流程主要由两大主要功能部分组成:1)设计开发:即从编写设计文件综合到布局布线投片生成这样一系列步骤。2)设计验证:也就是进行各种仿真的一系列步骤,如果在仿真过程中发现问题就返回设计输入进行修改。,2023/8/4,21,1.6 Verilog HDL 的设计流程简介,1.6.4 对应具体工艺器件的优化、映象和布局布线 由于各种ASIC和FPFA器件的工艺各不相同,因而当用不同厂家的不同器件来实现已验证的逻辑网表(EDIF文件)时,就需要不同的基本单元库与布线延迟模型与之对应才能进行准确的优化、映象、和布局布线。基本单元库与布线延迟模型由熟悉本厂工艺的工程师提供,再由EDA厂商的工

13、程师编入相应的处理程序,而逻辑电路设计师只需用一文件说明所用的工艺器件和约束条件,EDA工具就会自动地根据这一文件选择相应的库和模型进行准确的处理从而大大提高设计效率。,2023/8/4,22,1.7 小结,掌握HDL设计方法应从学习Verilog HDL设计方法开始。由于Top-Down的设计方法是首先从系统设计入手的,因而从顶层进行功能划分和结构设计。系统的总体仿真是顶层进行功能化分的重要环节,这时的设计与工艺无关。从底向上的设计在某种意义上讲是Top-Down设计的逆过程。,Verilog 数字系统设计教程,第二讲 Verilog 语法的基本概念,2023/8/4,24,概述,Veril

14、og既是一种行为描述的语言也是一种结构描述语言。Verilog模型可以是实际电路的不同级别的抽象。这些抽象的级别包括:系统级(system):用高级语言结构实现设计模块的外部性能的模型。算法级(algorithm):用高级语言结构实现设计算法的模型。RTL级(Register Transfer Level):描述数据在寄存器之间流动和如何处理、控制这些数据流动的模型。以上三种都属于行为描述,只有RTL级才与逻辑电路有明确的对应关系。门级(gate-level):描述逻辑门以及逻辑门之间的连接的模型。开关级(switch-level):描述器件中三极管和储存节点以及它们之间连接的模型。,2023

15、/8/4,25,Verilog HDL行为描述语言具有以下功能:可描述顺序执行或并行执行的程序结构。用延迟表达式或事件表达式来明确地控制过程的启动时间。通过命名的事件来触发其它过程里的激活行为或停止行为。提供了条件如if-else、case、循环程序结构。提供了可带参数且非零延续时间的任务(task)程序结构。提供了可定义新的操作符的函数结构(function)。提供了用于建立表达式的算术运算符、逻辑运算符、位运算符。Verilog HDL语言作为一种结构化的语言也非常适合于门级和开关级的模型设计。,概述,2023/8/4,26,概述,因其结构化的特点又使它具有以下功能:提供了一套完整的表示组

16、合逻辑的基本元件的原语(primitive);提供了双向通路(总线)和电阻器件的原语;可建立MOS器件的电荷分享和电荷衰减动态模型。,2023/8/4,27,2.1 Verilog 模块的基本概念,下面先介绍几个简单的Verilog HDL 程序,从中了解Verilog模块的特性【例 2.1】module muxtwo(out,a,b,sl);input a,b,sl;output out;reg out;always(sl or a or b)if(!sl)out=a;else out=b;endmodule,a,b,sl,out,2023/8/4,28,2.1 Verilog 模块的基本概

17、念,MUX(多路选择器)的行为可以描述为:只要信号a或b或sl发生变化,如果sl为0则选择a输出;否则选择b输出。这个行为的描述并没有说明如果输入 a 或 b是三态的(高阻时)输出应该是什么,但有具体结构的真实电路是有一定的输出的。没有考虑延时问题,2023/8/4,29,2.1 Verilog 模块的基本概念,【例2.2】,module twomux(out,a,b,sl);input a,b,sl;output out;not u1(nsl,sl);and#1 u2(sela,a,nsel);and#1 u3(selb,b,sl);or#2 u4(out,sela,selb);endmod

18、ule,MUX的结构级描述,采用Verilog基本单元(门)描述。描述中含有传输延时。,2023/8/4,30,2.1 Verilog 模块的基本概念,【例 2.3】module adder(count,sum,a,b,cin);input 2:0 a,b;input cin;output count;output 2:0 sum;assign count,sum=a+b+cin;endmodule,这个例子描述了一个三位的加法器。从例子中可以看出,整个Verilog HDL程序是位于module和endmodule声明语句之间的,2023/8/4,31,2.1 Verilog 模块的基本概念

19、,【例 2.4】module compare(equal,a,b);output equal;/声明输出信号equal input 1:0 a,b;/声明输入信号a,b assign equal=(a=b)?1:0;/*如果两个输入信号相等则输出为1。否则输出为0*/endmodule,这个程序描述了一个比较器.在这个程中,/*.*/和/.表示注释部分,注释只是为了方便程序员理解程序,对编译是不起作用的。,2023/8/4,32,【例2.5】module trist2(out,in,enable);output out;input in,enable;bufil1 mybuf(out,in,e

20、nable);endmodule,2.1 Verilog 模块的基本概念,程序通过调用一个在Verilog语言提供的原语库中现存的三态驱动器元件bufil1来实现其逻辑功能。这个调用过程也称为库元件bufif1的实例化,在本模块中它被具体化为mybuf.,33,【例2.6】module trist1(sout,sin,ena);output sout;input sin,ena;mytri tri_inst(.out(sout),.in(sin),.enable(ena);/调用由mytri模块定义的实例元件tri_inst,即把已定义的模块myfri在本模块中具体化为tri_instendm

21、odulemodule mytri(out,in,enable);output out;input in,enable;assign out=enable?in:bz;endmodule,2.1 Verilog 模块的基本概念,2023/8/4,34,2.2 Verilog 用于模块的测试,如何检查上述例子其功能是否正确?需要有测试激励信号输入到被测模块 需要记录被测模块的输出信号 需要把用功能和行为描述的Verilog模块转换为门级电路互连的电路结构(综合)。需要对已经转换为门级电路结构的逻辑进行测试(门级电路仿真)。需要对布局布线后的电路结构进行测试。(布局布线后仿真)。,35,2.2 V

22、erilog 用于模块的测试,36,2.3 小结,通过上面的例子可以看到:(1)Verilog HDL程序是由模块构成的。每个模块的内容都是位于module和endmodule两个语句之间。每个模块实现特定的功能。(2)模块是可以进行层次嵌套的。(3)每个模块要进行端口定义,并说明输入输出口,然后对模块的功能进行描述。(4)Verilog HDL程序的书写格式自由,一行可以写几个语句,一个语句也可以分写多行。(5)除了endmodule语句外,每个语句和数据定义的最后必须有分号。(6)可以用/*.*/和/.对Verilog HDL程序的任何部分作注释。一个好的,有使用价值的源程序都应当加上必要

23、的注释,以增强程序的可读性和可维护性。,Verilog 数字系统设计教程,第三讲 常用Verilog 语法之一,3.1 模块的结构,Verilog的基本设计单元是“模块”(block)。一个模块是由两部分组成的,一部分描述接口,另一部分描述逻辑功能,即定义输入是如何影响输出的。module block1(a,b,c,d);input a,b;output c,d;assign c=a|b;assign d=a endmodule,a,b,c,d,Verilog 模块的结构由在module和endmodule 关键词之间的四个主要部分组成:-端口定义:module block1(a,b,c,d)

24、;-I/O说明:input a,b,c;output d;-内部信号声明:wire x;-功能定义:assign d=a|x;assign x=(b endmodule,3.1 模块的结构,3.1 模块的结构,3.1.1 模块的端口定义 模块的端口声明了模块的输入输出口。其格式如下:module 模块名(口1,口2,口3,口4,);3.1.2 模块内容 模块的内容包括I/O说明、内部信号声明、功能定义。I/O说明的格式 输入口:input信号位宽1:0 端口名1;input信号位宽1:0 端口名2;input信号位宽1:0 端口名i;/(共有i个输入口),3.1 模块的结构,输出口 outpu

25、t信号位宽1:0 端口名1;output信号位宽1:0 端口名2;output信号位宽1:0 端口名j;/(共有j个输出口)输入/输出口:inout信号位宽1:0 端口名1;inout信号位宽1:0 端口名2;inout信号位宽1:0 端口名k;/(共有k个双向总线端口)I/O说明也可以写在端口声明语句里。其格式如下:module module_name(input port1,input port2,output port1,output port2);,3.1 模块的结构,内部信号说明 在模块内用到的和与端口有关的wire 和 reg 变量的声明。如:reg width-1:0 R变量1,

26、R变量2;wire width-1:0 W变量1,W变量2;,3.1 模块的结构,功能定义 模块中最重要的部分是逻辑功能定义部分。有三种方法可在模块中产生逻辑。-用 assign 语句(数据流描述):assign a=b end,3.1 模块的结构,3.1.3 理解要点如在模块中逻辑功能由下面三个语句块组成:assign cs=(a0 end三条语句是并行的,它们产生独立的逻辑电路;而在 always 块中:begin 与 end 之间是顺序执行的。,3.2 数据类型及其常量及变量,3.2.1.常量 在程序运行过程中,其值不能被改变的量称为常量。一数字整数。在Verilog HDL中,整型常量

27、即整常数有以下四种进制表示形式:1)二进制整数(b或B)2)十进制整数(d或D)3)十六进制整数(h或H)4)八进制整数(o或O)数字表达方式有以下三种:1)这是一种全面的描述方式。2)在这种描述方式中,数字的位宽采用缺省位宽(这由具体的机器系统决定,但至少32位)。3)在这种描述方式中,采用缺省进制十进制。,3.1.2 数值1.Verilog HDL中的数值可取下面的四类值:,Verilog HDL中有两类数值常量 整型数和实型数,下划线符号“_”除了不能放于数值的首位以外,可以随意用在整型数与实型数中,他们对数值的大小没有任何改变,只是为了提高可读性。1)整型数及其表示 Verilog H

28、DL的整数可以使二进制(b或B)、十进制(d或D)、十六进制(h或H)与八进制(o或O),有下面三种书写形式(1)简单的十进制格式;(2)缺省位宽的基数格式;(3)指定位宽的基数格式。,Verilog HDL中有两类数值常量 整型数和实型数,()简单的十进制格式:用的数字串组成的十进制数,可以用符号“”或“”来表示数的正负()缺省位宽的基数格式;表示形式为:符号“”为基数格式表示的固有字符,该字符不能省略,否则为非法表示形式;参数用于说明数值采用的进制格式;参数为相应进制格式下的一串数字这种格式未指定位宽,其缺省值至少为位()指定位宽的基数格式:表示形式为:sizebase_formatnum

29、ber参数size用来指定所表示数字的位宽当位宽小于数值的实际大小时,相应的高位部分被忽略;当位宽大于数值的实际位数,且数值的最高位是或时,相应的高位部分补;而当位宽大于数值的实际位数,但数值的最高位是x或z时,相应的高位部分补或,Verilog HDL中有两类数值常量 整型数和实型数,基数符号及其合法的表示值,Verilog HDL中有两类数值常量 整型数和实型数,例;三种格式的整数表示法,15(十进制15)简单的十进制h15(十进制21,十六进制15)缺省位宽的十六进制5b10011(十进制19,二进制10011)位的二进制12h01F(十进制31,十六进制01F)位的十六进制,Veril

30、og HDL中有两类数值常量 整型数和实型数,Verilog HDL中的实数可以用十进制与科学计数法两种格式来表示,如果采用十进制格式,小数点两边必须都有数字,否则为非法的表示形式实数表示法的实例1.8/十进制计数法3.8e10/科学计数法2.1E-9/科学计数法可用e或E表示,其结果相同3_2387.3398_3047/使用下划线提高可读性3./非法表示,小数点两遍都必须有数.2e6/非法表示,小数点两遍都必须有数.12/非法表示,小数点两遍都必须有数,实型数及其表示,Verilog HDL中有两类数值常量 整型数和实型数,3.2 数据类型及其常量及变量,x和z值。在数字电路中,x代表不定值

31、,z代表高阻值。一个x可以用来定义十六进制数的4位二进制数的状态,八进制数的3位,二进制数的1位。z的表示方式同x类似。z还有一种表达方式是可以写作“?”。,3.2 数据类型及其常量及变量,负数。一个数字可以被定义为负数,只需在位宽表达式前加一个减号,减号必须写在数字定义表达式的最前面。注意减号不可以放在位宽和进制之间也不可以放在进制和具体的数之间。-8d5/这个表达式代表5的补数(用八位二进制数表示)8d-5/非法格式下画线(underscore_)。下划线可以用来分隔开数的表达以提高程序可读性。但不可以用在位宽和进制处,只能用在具体的数字之间。16b1010_1011_1111_1010/

32、合法格式 8b_0011_1010/非法格式 当常量不说明位数时,默认值是32位,每个字母用8位的ASCII值表示。,3.2 数据类型及其常量及变量,二参数(parameter)型用参数声明一个可变常量,常用于定义延时及宽度变量。参数定义的语法:parameter;可一次定义多个参数,用逗号隔开。在使用文字(literal)的地方都可以使用参数。参数的定义是局部的,只在当前模块中有效。参数定义可使用以前定义的整数和实数参数。,module mod1(out,in1,in2);.parameter cycle=20,prop_ del=3,setup=cycle/2-prop_del,p1=8,

33、x_ word=16bx,file=/usr1/jdough/design/mem_ file.dat;.wire p1:0 w1;/A wire declaration using parameter.endmodule,注意:参数file不是string,而是一个整数,其值是所有字母的扩展ASCII值。若file=“AB”,则file值为8h4142。用法:$fopen(file);$display(“%s”,file);,3.2 数据类型及其常量及变量,3.2.2 变量 变量即在程序运行过程中其值可以改变的量。常用的网络数据类型包括wire型和tri型。wire型变量通常是用来表示单个门

34、驱动或连续赋值语句驱动的网络型数据,tri型变量则用来表示多驱动器驱动的网络型数据。表 1.3.1 Wire/tri 变量的真值,3.2 数据类型及其常量及变量,一 wire型 wire型数据常用来表示用于以assign关键字指定的组合逻辑信号。Verilog程序模块中输入输出信号类型缺省时自动定义为wire型。其格式如下:wire n-1:0 数据名1,数据名2,数据名i;/共有i条总线,每条总线内有n条线路,或 wire n:1 数据名1,数据名2,数据名i;,3.2 数据类型及其常量及变量,二 reg型 寄存器是数据储存单元的抽象。寄存器数据类型的关键字是 reg。reg类型数据的默认初

35、始值为不定值x。reg型数据常用来表示用于“always”模块内的指定信号,常代表触发器。在“always”块内被赋值的每一个信号都必须定义成reg型。reg型数据的格式如下:reg n-1:0 数据名1,数据名2,数据名i;或 reg n:1 数据名1,数据名2,数据名i;,module top;wire y;reg a,b;DUT u1(y,a,b);initial begin a=0;b=0;#10 a=1;.endendmodule,module DUT(Y,A,B_);output Y;input A,B:wire Y,A,B;and(Y,A,B);endmodule,举例说明数据类

36、型的选择,输入口(input)可以由寄存器或网络连接驱动,但它本身只能驱动网络连接。输出口(output)可以由寄存器或网络连接驱动,但它本身只能驱动网络连接。输入/输出口(inout)只可以由网络连接驱动,它本身也只能驱动网络连接。如果信号变量是在过程块(initial块 或 always块)中被赋值的,必须把它声明为寄存器类型变量,如何选择正确的数据类型?,如何选择正确的数据类型,module top;wire y;reg a,b;DUT u1(y,a,b);initial begina=0;b=0;#5 a=1;endendmodule,module DUT(Y,A,B);output

37、Y;input A,B;wire Y,A,B;and(Y,A,B);endmodule,输入端口可以由net/register驱动,但输入端口只能是net,输出端口可以是net/register类型,输出端口只能驱动net,在过程块中只能给register类型赋值,若Y,A,B说明为reg则会产生错误。,in1,in2,O,A,B,Y,双向端口输入/输出只能是net类型,选择数据类型时常犯的错误举例,修改前:module example(o1,o2,a,b,c,d);input a,b,c,d;output o1,o2;reg c,d;reg o2 and u1(o2,c,d);always(

38、a or b)if(a)o1=b;else o1=0;endmodule,修改后:module example(o1,o2,a,b,c,d);input a,b,c,d;output o1,o2;/reg c,d;/reg o2 reg o1;and u1(o2,c,d);always(a or b)if(a)o1=b;else o1=0;endmodule,example.v,选择数据类型时常犯的错误举例,Compiling source file example.vError!Illegal left-hand-side assignment Verilog-ILHSA example.v

39、,11:o1=b;Error!Illegal left-hand-side assignment Verilog-ILHSA example.v,12:o1=0;2 errors,第一次编译信息verilog c example.v,第二次编译信息,Compiling source file example.vError!Incompatible declaration,(c)defined as input at line 2 Verilog-IDDIL example.v,5:Error!Incompatible declaration,(d)defined as input at lin

40、e 2 Verilog-IDDIL example.v,5:Error!Gate(u1)has illegal output specification Verilog-GHIOS example.v,8:3 errors,3.2 数据类型及其常量及变量,三 memory型 Verilog HDL通过对reg型变量建立数组来对存储器建模,可以描述RAM型存储器,ROM存储器和reg文件。数组中的每一个单元通过一个数组索引进行寻址。在Verilog语言中没有多维数组存在。memory型数据是通过扩展reg型数据的地址范围来生成的。其格式如下:reg n-1:0 存储器名m-1:0;或 reg n

41、-1:0 存储器名m:1;,3.3 运算符及表达式,Verilog HDL语言的运算符范围很广,其运算符按其功能可分为以下几类:,3.3 运算符及表达式,在Verilog HDL语言中运算符所带的操作数是不同的,按其所带操作数的个数运算符可分为三种:1)单目运算符(unary operator):可以带一个操作数,操作数放在运算符的右边。2)二目运算符(binary operator):可以带二个操作数,操作数放在运算符的两边。3)三目运算符(ternary operator):可以带三个操作,这三个操作数用三目运算符分隔开。见下例:clock=clock;/是一个单目取反运算符,clock是

42、操作数。c=a|b;/是一个二目按位或运算符,a 和 b是操作数。r=s?t:u;/?:是一个三目条件运算符,s,t,u是操作数。,3.3 运算符及表达式,3.3.1.基本的算术运算符,+加-减*乘/除%模,将负数赋值给reg或其它无符号变量使用2的补码算术。如果操作数的某一位是x或z,则结果为x 在整数除法中,余数舍弃 模运算中使用第一个操作数的符号,module arithops();parameter five=5;integer ans,int;reg 3:0 rega,regb;reg 3:0 num;initial begin rega=3;regb=4b1010;int=-3;/

43、int=11111111_1101 end initial fork#10 ans=five*int;/ans=-15#20 ans=(int+5)/2;/ans=1#30 ans=five/int;/ans=-1#40 num=rega+regb;/num=1101#50 num=rega+1;/num=0100#60 num=int;/num=1101#70 num=regb%rega;/num=1#80$finish;joinendmodule,注意integer和reg类型在算术运算时的差别。integer是有符号数,而reg是无符号数。,3.3 运算符及表达式,3.3.2.位运算符,

44、not&and|or xor xnor xnor,按位操作符对矢量中相对应位运算。regb=4b1 0 1 0regc=4b1 x 1 0num=regb 位值为x时不一定产生x结果。如#50时的or计算。,module bitwise();reg 3:0 rega,regb,regc;reg 3:0 num;initial begin rega=4b1001;regb=4b1010;regc=4b11x0;end initial fork#10 num=rega joinendmodule,五类按位操作符的运算规则,五类按位操作符的运算规则,module bitTest;reg3:0a,b,

45、c;initial begin a=4b1100;b=4b0011;c=4,b0101;$displayb(a);/按位非运算符,结果为4b0011$displayb(a/按位异或非运算符,结果为4b0110 end endmodule,按位运算的例子,3.3 运算符及表达式,3.3.2.位运算符,当两个操作数位数不同时,位数少的操作数零扩展到相同位数。,a=4b1011;b=8b01010011;c=a|b;/a零扩展为 8b00001011,位运算符中除了是单目运算符以外,均为二目运算符,即要求运算符两侧各有一个操作数.位运算符中的二目运算符要求对两个操作数的相应位进行运算操作。,Veri

46、log 数字系统设计教程,第四讲 常用 Verilog 语法之二,4.1 逻辑运算符,!not&and|or,逻辑操作符的结果为一位1,0或x。逻辑操作符只对逻辑值运算。如操作数为全0,则其逻辑值为false如操作数有一位为1,则其逻辑值为true若操作数只包含0、x、z,则逻辑值为x,逻辑反操作符将操作数的逻辑值取反。例如,若操作数为全0,则其逻辑值为0,逻辑反操作值为1。,module logical();parameter five=5;reg ans;reg 3:0 rega,regb,regc;initial begin rega=4b0011;/逻辑值为“1”regb=4b10 x

47、z;/逻辑值为“1”regc=4b0z0 x;/逻辑值为“x”end initial fork#10 ans=rega joinendmodule,Verilog HDL提供了三种逻辑运算符:逻辑与运算符:&逻辑或运算符:|逻辑非运算符:!其中逻辑与和逻辑或是双目运算符,逻辑非是单目运算符,逻辑运算的真值表,4.1 逻辑运算符,module logicalTest;reg3:0a,b,c;initial begin a=2;b=0;c=4hx;$display(a&b);/逻辑与,结果为0$display(a|b);/逻辑或,结果为1$display(!a);/逻辑非,结果为0$display

48、(a|c);/结果为1,未知数|1(=1)$display(!c);/结果为未知数 endendmodule,4.1 逻辑运算符,4.2 关系运算符,大于=大于等于=小于等于,module relationals();reg 3:0 rega,regb,regc;reg val;initial begin rega=4b0011;regb=4b1010;regc=4b0 x10;end initial fork#10 val=regc rega;/val=x#20 val=regb=rega;/val=1#40 val=regb regc;/val=1#50$finish;joinendmod

49、ule,rega和regc的关系取决于x,无论x为何值,regbregc,其结果是1b1、1b0或1bx。,4.3 等式运算符,赋值操作符,将等式右边表达式的值拷贝到左边。,逻辑等,case等,a=2b1x;b=2b1x;if(a=b)$display(a is equal to b);else$display(a is not equal to b);,a=2b1x;b=2b1x;if(a=b)$display(a is identical to b);else$display(a is not identical to b);,注意逻辑等与case等的差别,2b1x=2b0 x 值为0,因

50、为不相等2b1x=2b1x 值为x,因为可能不相等,也可能相等,2b1x=2b0 x 值为0,因为不相同2b1x=2b1x 值为1,因为相同,4.3 等式运算符,=逻辑等!=逻辑不等,其结果是1b1、1b0或1bx。如果左边及右边为确定值并且相等,则结果为1。如果左边及右边为确定值并且不相等,则结果为0。如果左边及右边有值不能确定的位,但值确定的位相等,则结果为x。!=的结果与=相反,值确定是指所有的位为0或1。不确定值是有值为x或z的位。,module equalities1();reg 3:0 rega,regb,regc;reg val;initial begin rega=4b0011

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号