首页 veilog数字电路__笔记

veilog数字电路__笔记

举报
开通vip

veilog数字电路__笔记VerilogHDL的基本语法■VerilogHDL既是一种行为描述的语言也是一种结构描述的语言。这也就是说,既可以用电路的功能描述也可以用元器件和它们之间的连接来建立所设计电路的VerilogHDL模型。■抽象的级别和它们对应的模型类型共有以下五种:•系统级(system):用高级语言结构实现设计模块的外部性能的模型。•算法级(algorithm):用高级语言结构实现设计算法的模型。•RTL级(RegisterTransferLevel):描述数据在寄存器之间流动和如何处理这些数据的模型。•门级(gate-lev...

veilog数字电路__笔记
VerilogHDL的基本语法■VerilogHDL既是一种行为描述的语言也是一种结构描述的语言。这也就是说,既可以用电路的功能描述也可以用元器件和它们之间的连接来建立所 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 电路的VerilogHDL模型。■抽象的级别和它们对应的模型类型共有以下五种:•系统级(system):用高级语言结构实现设计模块的外部性能的模型。•算法级(algorithm):用高级语言结构实现设计算法的模型。•RTL级(RegisterTransferLevel):描述数据在寄存器之间流动和如何处理这些数据的模型。•门级(gate-level):描述逻辑门以及逻辑门之间的连接的模型。•开关级(switch-level):描述器件中三极管和储存节点以及它们之间连接的模型。■ 其语法结构非常适合于算法级和RTL级的模型设计。这种行为描述语言具有以下功能:•可描述顺序执行或并行执行的程序结构。•用延迟 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 达式或事件表达式来明确地控制过程的启动时间。•通过命名的事件来触发其它过程里的激活行为或停止行为。•提供了条件、if-else、case、循环程序结构。•提供了可带参数且非零延续时间的任务(task)程序结构。•提供了可定义新的操作符的函数结构(function)。•提供了用于建立表达式的算术运算符、逻辑运算符、位运算符。•VerilogHDL语言作为一种结构化的语言也非常适合于门级和开关级的模型设计。因其结构化的特点又使它具有以下功能:−提供了完整的一套组合型原语(primitive);−提供了双向通路和电阻器件的原语;−可建立MOS器件的电荷分享和电荷衰减动态模型。VerilogHDL的构造性语句可以精确地建立信号的模型。这是因为在VerilogHDL中,提供了延迟和输出强度的原语来建立精确程度很高的信号模型。信号值可以有不同的的强度,可以通过设定宽范围的模糊值来降低不确定条件的影响。■模块的结构Verilog的基本设计单元是“模块”(block)。一个模块是由两部分组成的,一部分描述接口,另一部分描述逻辑功能,即定义输入是如何影响输出的程序模块描述了电路图符号所实现的逻辑功能。上面的Verilog设计中,模块中的第二、第三行说明接口的信号流向,第四、第五行说明了模块的逻辑功能。以上就是设计一个简单的Verilog程序模块所需的全部内容。★每个Verilog程序包括四个主要部分:端口定义、I/O说明、内部信号声明、功能定义。★模块的端口定义:模块的端口声明了模块的输入输出口。其格式如下:module模块名(口1,口2,口3,口4,………);模块内容模块的内容包括I/O说明、内部信号声明、功能定义。􀁹I/O说明的格式如下:输入口:input端口名1,端口名2,………,端口名i;//(共有i个输入口)输出口:output端口名1,端口名2,………,端口名j;//(共有j个输出口)I/O说明也可以写在端口声明语句里。其格式如下:modulemodule_name(inputport1,inputport2,…outputport1,outputport2…);●内部信号说明:在模块内用到的和与端口有关的wire和reg变量的声明。如:reg[width-1:0]R变量1,R变量2。。。。;wire[width-1:0]W变量1,W变量2。。。。;●功能定义:模块中最重要的部分是逻辑功能定义部分。有三种 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 可在模块中产生逻辑。1).用“assign”声明语句如:assigna=b&c;这种方法的句法很简单,只需写一个“assign”,后面再加一个方程式即可。例子中的方程式描述了一个有两个输入的与门。2).用实例元件如:andand_inst(q,a,b);采用实例元件的方法象在电路图输入方式下,调入库元件一样。键入元件的名字和相连的引脚即可,表示在设计中用到一个跟与门(and)一样的名为and_inst的与门,其输入端为a,b,输出为q。要求每个实例元件的名字必须是唯一的,以避免与其他调用与门(and)的实例混淆。3).用“always”块如:always@(posedgeclkorposedgeclr)beginif(clr)q<=0;elseif(en)q<=d;end采用“assign”语句是描述组合逻辑最常用的方法之一。而“always”块既可用于描述组合逻辑也可描述时序逻辑。上面的例子用“always”块生成了一个带有异步清除端的D触发器。“always”块可用很多种描述手段来表达逻辑,例如上例中就用了if...else语句来表达逻辑关系。如按一定的风格来编写“always”块,可以通过综合工具把源代码自动综合成用门级结构表示的组合或时序逻辑电路。注意:如果用Verilog模块实现一定的功能,首先应该清楚哪些是同时发生的,哪些是顺序发生的。上面三个例子分别采用了“assign”语句、实例元件和“always”块。这三个例子描述的逻辑功能是同时执行的。也就是说,如果把这三项写到一个VeriIog模块文件中去,它们的次序不会影响逻辑实现的功能。这三项是同时执行的,也就是并发的。然而,在“always”模块内,逻辑是按照指定的顺序执行的。“always”块中的语句称为“顺序语句”,因为它们是顺序执行的。请注意,两个或更多的“always”模块也是同时执行的,但是模块内部的语句是顺序执行的。看一下“always”内的语句,你就会明白它是如何实现功能的。if..else…if必须顺序执行,否则其功能就没有任何意义。如果else语句在if语句之前执行,功能就会不符合要求!为了能实现上述描述的功能,“always”模块内部的语句将按照书写的顺序执行。◆数据类型及其常量、变量:数据类型:是用来表示数字电路硬件中的数据储存和传送元素的。重点考查:reg型、wire型、integer型、parameter型VerilogHDL中总共有十九种数据类型:large型、medium型、scalared型、time型、small型、tri型、trio型、tri1型、triand型、trior型、trireg型、vectored型、wand型、wor型。◆常量概念:在程序运行过程中,其值不能被改变的量称为常量。在VerilogHDL语言中使用的数字及其表示方式进行介绍。整数:在VerilogHDL中,整型常量即整常数有以下四种进制表示形式:1)二进制整数(b或B)2)十进制整数(d或D)3)十六进制整数(h或H)4)八进制整数(o或O)数字表达方式有以下三种:1)<位宽><进制><数字>这是一种全面的描述方式。2)<进制><数字>在这种描述方式中,数字的位宽采用缺省位宽(这由具体的机器系统决定,但至少32位)。3)<数字>在这种描述方式中,采用缺省进制十进制。例如:8'b10101100//位宽为8的数的二进制表示,'b表示二进制8'ha2//位宽为8的数的十六进制,'h表示十六进制。􀁹x和z值:在数字电路中,x代表不定值,z代表高阻值。一个x可以用来定义十六进制数的四位二进制数的状态,八进制数的三位,二进制数的一位。z的表示方式同x类似。z还有一种表达方式是可以写作?。在使用case表达式时建议使用这种写法,以提高程序的可读性。见下例:4'b10x0//位宽为4的二进制数从低位数起第二位为不定值4'b101z//位宽为4的二进制数从低位数起第一位为高阻值12'dz//位宽为12的十进制数其值为高阻值(第一种表达方式)12'd?//位宽为12的十进制数其值为高阻值(第二种表达方式)8'h4x//位宽为8的十六进制数其低四位值为不定值􀁹负数:一个数字可以被定义为负数,只需在位宽表达式前加一个减号减号必须写在数字定义表达式的最前面。注意减号不可以放在位宽和进制之间也不可以放在进制和具体的数之间。见下例:-8'd5//这个表达式代表5的补数(用八位二进制数表示)8'd-5//非法格式􀁹下划线(underscore_):下划线可以用来分隔开数的表达以提高程序可读性。但不可以用在位宽和进制处,只能用在具体的数字之间。见下例:16'b1010_1011_1111_1010//合法格式8'b_0011_1010//非法格式当常量不说明位数时,默认值是32位,每个字母用8位的ASCII值表示。例:10=32’d10=32’b1010■参数(Parameter)型在VerilogHDL中用parameter来定义常量,即用parameter来定义一个标识符代表一个常量,称为符号常量,即标识符形式的常量,采用标识符代表一个常量可提高程序的可读性和可维护性。其说明格式如下:parameter参数名1=表达式,参数名2=表达式,…,参数名n=表达式;parameter是参数型数据的确认符,确认符后跟着一个用逗号分隔开的赋值语句表。在每一个赋值语句的右边必须是一个常数表达式。也就是说,该表达式只能包含数字或先前已定义过的参数。见下列:parametermsb=7;//定义参数msb为常量7parametere=25,f=29;//定义二个常数参数parameterr=5.7;//声明r为一个实型参数parameterbyte_size=8,byte_msb=byte_size-1;//用常数表达式赋值parameteraverage_delay=(rf)/2;//用常数表达式赋值■变量wire型数据常用来表示用于以assign关键字指定的组合逻辑信号。Verilog程序模块中输入输出信号类型缺省时自动定义为wire型。wire型信号可以用作任何方程式的输入,也可以用作“assign”语句或实例元件的输出。wire型信号的格式同reg型信号的很类似。其格式如下:wire[n-1:0]数据名1,数据名2,…数据名i;//共有i条总线,每条总线内有n条线路wire[n:1]数据名1,数据名2,…数据名i;wire是wire型数据的确认符,[n-1:0]和[n:1]代表该数据的位宽,即该数据有几位。最后跟着的是数据的名字。如果一次定义多个数据,数据名之间用逗号隔开。声明语句的最后要用分号表示语句结束。看下面的几个例子。wirea;//定义了一个一位的wire型数据wire[7:0]b;//定义了一个八位的wire型数据wire[4:1]c,d;//定义了二个四位的wire型数据■ reg型寄存器是数据储存单元的抽象。寄存器数据类型的关键字是reg.通过赋值语句可以改变寄存器储存的值,其作用与改变触发器储存的值相当。reg类型数据的缺省初始值为不定值,x。reg型数据常用来表示用于“always”模块内的指定信号,常代表触发器。通常,在设计中要由“always”块通过使用行为描述语句来表达逻辑关系。在“always”块内被赋值的每一个信号都必须定义成reg型。reg型数据的格式如下:reg[n-1:0]数据名1,数据名2,…数据名i;reg[n:1]数据名1,数据名2,…数据名i;reg是reg型数据的确认标识符,[n-1:0]和[n:1]代表该数据的位宽,即该数据有几位(bit)。regrega;//定义了一个一位的名为rega的reg型数据reg[3:0]regb;//定义了一个四位的名为regb的reg型数据reg[4:1]regc,regd;//定义了两个四位的名为regc和regd的reg型数据对于reg型数据,其赋值语句的作用就象改变一组触发器的存储单元的值。在Verilog中有许多构造(construct)用来控制何时或是否执行这些赋值语句。这些控制构造可用来描述硬件触发器的各种具体情况,如触发条件用时钟的上升沿等,或用来描述具体判断逻辑的细节,如各种多路选择器。reg型数据的缺省初始值是不定值。reg型数据可以赋正值,也可以赋负值。但当一个reg型数据是一个表达式中的操作数时,它的值被当作是无符号值,即正值。例如:当一个四位的寄存器用作表达式中的操作数时,如果开始寄存器被赋以值-1,则在表达式中进行运算时,其值被认为是15。注意:reg型只表示被定义的信号将用在“always”块内,理解这一点很重要。并不是说reg型信号一定是寄存器或触发器的输出。虽然reg型信号常常是寄存器或触发器的输出,但并不一定总是这样。在本书中我们还会对这一点作更详细的解释。■memory型数据是通过扩展reg型数据的地址范围来生成的。其格式如下:reg[n-1:0]存储器名[m-1:0];reg[n-1:0]存储器名[m:1];在这里,reg[n-1:0]定义了存储器中每一个存储单元的大小,即该存储单元是一个n位的寄存器。存储器名后的[m-1:0]或[m:1]则定义了该存储器中有多少个这样的寄存器。最后用分号结束定义语句。下面举例说明:reg[7:0]mema[255:0];这个例子定义了一个名为mema的存储器,该存储器有256个8位的存储器该存储器的地址范围是0到255。注意:对存储器进行地址索引的表达式必须是常数表达式。在同一个数据类型声明语句里,可以同时定义存储器型数据和reg型数据。见下例:parameterwordsize=16,//定义二个参数。memsize=256;reg[wordsize-1:0]mem[memsize-1:0],writereg,readreg;■运算符及表达式VerilogHDL语言的运算符范围很广,其运算符按其功能可分为以下几类:1)算术运算符(,-,×,/,%)2)赋值运算符(=,<=)3)关系运算符(>,<,>=,<=)4)逻辑运算符(&&,||,!)5)条件运算符(?:)6)位运算符(~,|,^,&,^~)7)移位运算符(<<,>>)8)拼接运算符({})9)其它在VerilogHDL语言中运算符所带的操作数是不同的,按其所带操作数的个数运算符可分为三种:1)单目运算符(unaryoperator):可以带一个操作数,操作数放在运算符的右边。2)二目运算符(binaryoperator):可以带二个操作数,操作数放在运算符的两边。3)三目运算符(ternaryoperator):可以带三个操作,这三个操作数用三目运算符分隔开。见下例:clock=~clock;//~是一个单目取反运算符,clock是操作数。c=a|b;//是一个二目按位或运算符,a和b是操作数。r=s?t:u;//?:是一个三目条件运算符,s,t,u是操作数。■基本的算术运算符在VerilogHDL语言中,算术运算符又称为二进制运算符,共有下面几种:1)(加法运算符,或正值运算符,如rega+regb,+3)2)-(减法运算符,或负值运算符,如rega-3,-3)3)×(乘法运算符,如rega*3)4)/(除法运算符,如5/3)5)%(模运算符,或称为求余运算符,要求%两侧均为整型数据。如7%3的值为1)在进行整数除法运算时,结果值要略去小数部分,只取整数部分。而进行取模运算时,结果值的符号位采用模运算式里第一个操作数的符号位。见下例。模运算表达式结果说明10%31余数为111%32余数为212%30余数为0即无余数-10%3-1结果取第一个操作数的符号位,所以余数为-111%32结果取第一个操作数的符号位,所以余数为2.注意:在进行算术运算操作时,如果某一个操作数有不确定的值x,则整个结果也为不定值x。■ 位运算符VerilogHDL作为一种硬件描述语言,是针对硬件电路而言的。在硬件电路中信号有四种状态值1,0,x,z.在电路中信号进行与或非时,反映在VerilogHDL中则是相应的操作数的位运算。VerilogHDL提供了以下五种位运算符:1)~//取反2)&//按位与3)|//按位或4)^//按位异或5)^~//按位同或(异或非)不同长度的数据进行位运算两个长度不同的数据进行位运算时,系统会自动的将两者按右端对齐.位数少的操作数会在相应的高位用0填满,以使两个操作数按位进行■逻辑运算符在VerilogHDL语言中存在三种逻辑运算符:1)&&逻辑与2)||逻辑或3)!逻辑非"&&"和"||"是二目运算符,它要求有两个操作数,如(a>b)&&(b>c),(ab)&&(x>y)可写成:a>b&&x>y(a==b)||(x==y)可写成:a==b||x==y(!a)||(a>b)可写成:!a||a>b为了提高程序的可读性,明确表达各运算符间的优先关系,建议使用括号.■关系运算符关系运算符共有以下四种:aba大于ba<=ba小于或等于ba>=ba大于或等于b在进行关系运算时,如果声明的关系是假的(flase),则返回值是0,如果声明的关系是真的(true),则返回值是1,如果某个操作数的值不定,则关系是模糊的,返回值是不定值。所有的关系运算符有着相同的优先级别。关系运算符的优先级别低于算术运算符的优先级别。见下例:a>(右移位运算符)。其使用方法如下:a>>n或a<
本文档为【veilog数字电路__笔记】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_751406
暂无简介~
格式:doc
大小:41KB
软件:Word
页数:21
分类:
上传时间:2022-08-01
浏览量:0