您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > Verilog-HDL基础知识
第2章VerilogHDL基础知识2.1VerilogHDL的语言要素2.2数据类型2.3运算符2.4模块本章小结VerilogHDL语法来源于C语言基本语法,其基本词法约定与C语言类似。程序的语言要素也称为词法,是由符号、数据类型、运算符和表达式构成的,其中符号包括空白符、注释符、标识符和转义标识符、关键字、数值等。2.1VerilogHDL的语言要素2.1.1空白符空白符包括空格符(\b)、制表符(\t)、换行符和换页符。空白符使代码看起来结构清晰,阅读起来更方便。在编译和综合时,空白符被忽略。VerilogHDL程序可以不分行,也可以加入空白符采用多行编写。例2.1-1空白符使用示例。initialbegina=3'b100;b=3'b010;end相当于:initialbegina=3'b100;b=3'b010;end2.1.2注释符VerilogHDL语言中允许插入注释,标明程序代码功能、修改、版本等信息,以增强程序的可阅读性和帮助管理文档。VerilogHDL中有两种形式的注释。(1)单行注释:单行注释以“//”开始,VerilogHDL忽略从此处到行尾的内容。(2)多行注释:多行注释以“/*”开始,到“*/”结束,VerilogHDL忽略其中的注释内容。需要注意的是,多行注释不允许嵌套,但是单行注释可以嵌套在多行注释中。例2.1-2注释符使用示例。单行注释:assigna=b&c;//单行注释多行注释:assigna[3:0]=b[3:0]&c[3:0;];/*注释行1注释行2*/非法多行注释:/*注释内容/*多行注释嵌套多行注释*/注释内容*/合法多行注释:/*注释内容//多行注释嵌套单行注释*/2.1.3标识符和转义标识符在VerilogHDL中,标识符(Identifier)被用来命名信号名、模块名、参数名等,它可以是任意一组字母、数字、$符号和_(下划线)符号的组合。应该注意的是,标识符的字母区分大小写,并且第一个字符必须是字母或者下划线。例2.1-3以下标识符都是合法的。countCOUNT//与count不同_CC_G5B25_78SIX例2.1-4以下标识符都是不正确的。30count//标识符不允许以数字开头out*//标识符中不允许包含字符 *a+b-c//标识符中不允许包含字符 + 和 - n@238//标识符中不允许包含字符@为了使用标识符集合以外的字符或标号,VerilogHDL规定了转义标识符(EscapedIdentifier)。采用转义标识符可以在一条标识符中包含任何可打印的字符。转义标识符以“\”(反斜线)符号开头,以空白结尾(空白可以是一个空格、一个制表字符或换行符)。例2.1-5以下是合法的转义标识符。\a+b=c\7400\.*.$\{******}\~Q\OutGate//与OutGate相同2.1.4关键字VerilogHDL语言内部已经使用的词称为关键字或保留字,它是VerilogHDL语言内部的专用词,是事先定义好的确认符,用来组织语言结构。用户不能随便使用这些关键字。需注意的是,所有关键字都是小写的。例如,ALWAYS不是关键字,它只是标识符,与always(关键字)是不同的。表2.1-1所示为VerilogHDL的常用关键字。表2.1-1VerilogHDL中的常用关键字alwaysendinitialparametersignedtriandandendattributeinoutpmossmalltriorassignendcaseinputposedgespecifytriregattributeendmoduleintegerprimitivespecparamunsignedbeginendfunctionjoinpull0strengthvectoredbufendprimitivelargepull1strong0waitbufif0endspecifymacromodulepullupstrong1wandbufif1endtablemediumpulldownsupply0weak0caseendtaskmodulercmossupply1weak1casexeventnandrealtablewhilecasezfornegedgerealtimetaskwirecmosforcenmosregtimewordeassignforevernorreleasetranxnordefaultforknotrepeattranif0xordefparamfunctionnotif0rtrantranif1disablehighz0notif1rtranif0triedgehighz1orrtranif1tri0elseifoutputscalaredtri12.1.5数值VerilogHDL有四种基本的逻辑数值状态,用数字或字符表达数字电路中传送的逻辑状态和存储信息。VerilogHDL逻辑数值中,x和z都不区分大小写,也就是说,0x1z与值0X1Z是等同的。VerilogHDL中的四值电平逻辑如表2.1-2所示。表2.1-2四值电平逻辑状态含义0低电平、逻辑0或“假”1高电平、逻辑1或“真”x或X不确定或未知的逻辑状态z或Z高阻态在数值中,下划线符号“_”除了不能放于数值的首位外,可以随意用在整型数与实型数中,它们对数值大小没有任何改变,只是为了提高可读性。例如,16'b1011000110001100和16'b1011_0001_1000_1100的数值大小是相同的,只是后一种的表达方式可读性更强。1.整数及其表示VerilogHDL中的整数可以是二进制(b或B)、八进制(o或O)、十进制(d或D)与十六进制(h或H),其基数符号和可以采用的数字字符集如表2.1-3所示。表2.1-3数制的基数符号与数字字符集数制基数符号合法表示符二进制b或B0、1、x、X、z、Z、?、_八进制o或O0~7、x、X、z、Z、?、_十进制d或D0~9、_十六进制h或H0~9、a~f、A~F、x、X、z、Z、?、_整数的表示形式为如下:+/-size'base_formatnumber其中,“+/-”是正数和负数标示;size指换算过后的二进制数的宽度;“'”为基数格式表示的固有字符,该字符不能缺省,否则为非法表示形式;base_format是其基数符号;number是可以使用的数字字符集,形式上是相应进制格式下的一串数值。使用整数时需要注意的是:(1)在较长的数之间可以用下划线来分开,目的是提高可读性,下划线本身没有意义,如16'b1110_1011_0011_1010,但下划线符号不能用作首字符。(2)当数字没有说明位宽时,默认为32位。(3) x或z在二进制中代表1位x或z,在八进制中代表3位x或z,在十六进制中代表4位x或z,其代表的宽度取决于所用的进制。例如:8'b1011xxxx//等价于8'hBx8'b1001zzzz//等价于8'h9z(4)若没有定义一个整数的位宽,其宽度为相应值中定义的位数。例如:'o642//9位八进制数'hBD//8位十六进制数(5)若定义的位宽比实际数的位数大,则在左边用0补齐。但如果数最左边一位为x或z,就相应地用x或z在左边补齐。例如:10'b101//左边补0,得00000001018'bz0x1//左边补z,得zzzzz0x1如果定义的位宽比实际数的位宽小,那么最左边的位被截断。例如:4'b10111011//等价于4'b10116'HFFFB//等价于6'H3B(6) “?”是高阻态z的另一种表示符号。在数字的表示中,字符“?”和Z或z是等价的,可互相替代。例如:4'b???? 等价于4'bzzzz。(7)整数可以带正、负号,并且正、负号应写在最左边。负数表示为二进制的补码形式。例如:-4等价于4'b1100。(8)如果位宽和进制都缺省,则代表十进制数。例如:-15代表十进制数-15。(9)数字中不能有空格,但在表示进制的字母两侧可以有空格。例2.1-6下面是一些合法的整数表示。8'b10001101//位宽为8位的二进制数100011018'ha6//位宽为8位的十六进制数a65'o35//5位八进制数354'd6//4位十进制数64'b1x_01//4位二进制数1x015'hx//5位十六进制数x(扩展的x),即xxxxx4'hz//4位十六进制数z,即zzzz8'h2A//在位宽和字符之间以及进制和数值之间可以有空格,//但数字之间不能有空格例2.1-7下面是错误的整数表示。4'd-4//数值不能为负,有负号应放最左边3'b001// '和基数b之间不允许出现空格(4+4)'b11//位宽不能是表达式形式2.实数及其表示实数有两种表示方法。(1)十进制表示法。采用十进制格式,小数点两边必须都有数字,否则为非法的表示形式。例如:3.0、4.54、0.2等都是正确的,而5.是错误的。(2)科学计数法。例如:564.2e2的值为56420.0,8.7E2的值为870.0(e不分大小写),3E-3的值为0.003。VerilogHDL还定义了实数转换为整数的方法,实数通过四舍五入转换为最相近的整数。例如:-13.74转换为整数是-14,33.27转换为整数是33。例2.1-8实数表示示例。2.7//十进制计数法5.2e8//科学计数法3.5E-6//科学计数法可用e或E表示,其结果相同5_4582.2158_5896//使用下划线提高可读性6.//非法表示.3e5//非法表示3.字符串及其表示字符串是指用双引号括起来的字符序列,它必须包含在同一行中,不能分行书写。若字符串用作VerilogHDL表达式或赋值语句中的操作数,则字符串被看做8位的ASCII值序列,即一个字符对应8位的ASCII值。例如helloworld和AnexampleforVerilogHDL是标准的字符串类型。在VerilogHDL中,数据类型共有19种,分别是wire、tri、tri0、tri1、wand、triand、trireg、trior、wor、reg、large、small、scalared、medium、vectored、integer、time、real、parameter型。2.2数据类型按照抽象程度,VerilogHDL的数据类型又可划分为两大类:物理数据类型(主要包括连线型及寄存器型)和抽象数据类型(主要包括整型、时间型、实型及参数型)。物理数据类型的抽象程度比较低,与实际硬件电路的映射关系比较明显;而抽象数据类型则是进行辅助设计和验证的数据类型。2.2.1物理数据类型VerilogHDL最主要的物理数据类型是连线型、寄存器型和存储器型,并使用四种逻辑电平和八种信号强度对实际的硬件电路建模。四值逻辑电平是对信号的抽象表示方式(见表2.1-2)。信号强度表示数字电路中不同强度的驱动源,用来解决不同驱动强度下的赋值冲突,逻辑0和1可以用表2.2-1列出的强度值表示,驱动强度从supply到highz依次递减。表2.2-1强度等级标记符名称类型强弱程度supply电源级驱动驱动strong强驱动驱动pull上拉级驱动驱动large大容性存储weak弱驱动驱动medium中性驱动存储small小容性存储highz高容性高阻最强最弱1.连线型连线型变量包含多种类型,表2.2-2给出了各种连线型变量类型以及相应的含义。表2.2-2连线型数据类型及其功能描述连线型数据类型功能说明wire,tri标准连线(缺省为该类型)wor,trior多重驱动时,具有线或特性的连线型wand,trand多重驱动时,具有线与特性的连线型trireg具有电荷保持特性的连线型数据(特例)tri1上拉电阻tri0下拉电阻supply1电源线,用于对电源建模,为高电平1supply0电源线,用于对“地”建模,为低电平0连线表示逻辑单元的物理连接,可以对应为电路中的物理信号连线,这种变量类型不能保持电荷(除trireg之外)。
本文标题:Verilog-HDL基础知识
链接地址:https://www.777doc.com/doc-6682483 .html