EDA第5章verilogHDL语法规范2_第1页
EDA第5章verilogHDL语法规范2_第2页
EDA第5章verilogHDL语法规范2_第3页
EDA第5章verilogHDL语法规范2_第4页
EDA第5章verilogHDL语法规范2_第5页
已阅读5页,还剩112页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Verilog Verilog HDLHDL数据类型包括数据类型包括:p值值的的集合集合p网络网络和和变量变量p向量向量p强度强度p隐含声明隐含声明p网络类型网络类型p寄存器类型寄存器类型p整数整数/ /实数实数/ /时间时间p数组数组p参数参数pVerilogVerilog名字名字空间空间Verilog Verilog HDLHDL有下列四种基本的值:有下列四种基本的值:p 0 逻辑逻辑0或或“假假”状态。状态。p 1 逻辑逻辑1或或“真真”状态。状态。p x(X) 未知未知状态,对大小写不敏感。状态,对大小写不敏感。p z(Z) 高高阻状态,对大小写不敏感。阻状态,对大小写不敏感。 在在V

2、erilog HDLVerilog HDL中,根据中,根据赋值赋值和和对值的保持方式对值的保持方式不同,不同,可将数据类型主要分为两大类可将数据类型主要分为两大类:p网络型网络型:表示表示器件之间的物理连接,需要器件之间的物理连接,需要门和模块的驱动门和模块的驱动。p变量型变量型:变量是对数据存储元件的抽象。变量是对数据存储元件的抽象。 声明声明网络网络类型类型的语法的语法格式如下格式如下:net_typenet_type range delay range delay net_namenet_name ,net_namenet_name;其中:其中:p net_type net_type 表

3、示表示网络网络类类型数据。型数据。p range range 用来用来表示表示数据数据为标量或矢量。若没有声明范围,则表为标量或矢量。若没有声明范围,则表示示数据为数据为1 1位的标量。否则,由该项指定数据的矢量形式位的标量。否则,由该项指定数据的矢量形式。p delay delay 指定仿真延迟时间。指定仿真延迟时间。p net_name net_name 网络名字。可以一网络名字。可以一次定义次定义多个网络多个网络,多个网络之间多个网络之间用用逗号逗号隔隔开开。声明声明网络网络类型类型的的Verilog HDLVerilog HDL描述的描述的例子例子 wand wand w; w; /

4、/ 一个标一个标量量wandwand网络网络类型类型 tri tri 15: 0 bus; 15: 0 bus; / / 1616位三位三态态总线总线网络类型网络类型 wire 0: 31 w1, w2; / wire 0: 31 w1, w2; / 两个两个3232位位网络网络类型类型,MSBMSB为为bit0bit0变量变量是对数据存储元件的抽象是对数据存储元件的抽象。p从从当前当前赋值赋值到下一次赋值之前,变量应当到下一次赋值之前,变量应当保持保持当前的当前的值值不不变变。注注:p对于对于regreg,timetime和和integerinteger这些这些变量变量类类型数据,型数据,它

5、们的初始值应当它们的初始值应当是是x x。p对于对于realreal和和realtimerealtime变量变量类类型数据,型数据,默认的初始值是默认的初始值是0.00.0。p在在变量数据类型中,只有变量数据类型中,只有regreg和和integerinteger变量型数据类型是可综合的,变量型数据类型是可综合的,其它是不可综合的。其它是不可综合的。p驱动强度驱动强度u在在一个网络型数据的声明语句一个网络型数据的声明语句中,如果中,如果对数据对象对数据对象进行了连续赋值,就可以为声明的数据对象指定驱进行了连续赋值,就可以为声明的数据对象指定驱动强度动强度。u门门级元件的声明只能指定驱动强度级元

6、件的声明只能指定驱动强度。根据。根据驱动源的驱动源的强度,其驱动强度可以强度,其驱动强度可以是:是:SupplyStrongpull/weak 如果如果没有显示声明网络或者变量,则在下面的情况没有显示声明网络或者变量,则在下面的情况中,默中,默认认将其指定为网络类型:将其指定为网络类型:p在在一个端口表达式的声明中,如果没有对端口的数据类型进行显式说一个端口表达式的声明中,如果没有对端口的数据类型进行显式说明,则默认的端口数据类型就为明,则默认的端口数据类型就为wirewire型型。input a,b;input a,b;p模块模块例化的端口列表中,如果先前没有对端口的数据类型进行显式说例化的

7、端口列表中,如果先前没有对端口的数据类型进行显式说明,那么默认的端口数据类型为网络型标量明,那么默认的端口数据类型为网络型标量。 FADD fadd1(a,b,cout,sum) FADD fadd1(a,b,cout,sum)p如果一个标识符出现在如果一个标识符出现在连续赋值语句连续赋值语句的左侧,而该标识符先前未曾被的左侧,而该标识符先前未曾被声明,那么该标识符的数据类型就被隐式声明为网络型标量声明,那么该标识符的数据类型就被隐式声明为网络型标量。 assign A=B; assign A=B;下下表表给给出了这些常用的不同网络类型的功能及其可综合性。出了这些常用的不同网络类型的功能及其可

8、综合性。类型类型功能功能可可综合性综合性wire,tri标准标准内部连接线内部连接线supply1,supply0电源电源和地和地wor,trior多多驱动源线或驱动源线或wand,triand多多驱动源线与驱动源线与trireg能能保存电荷的保存电荷的nettri1,tri0无无驱动时上拉驱动时上拉/下拉下拉简单的网络类型说明格式为简单的网络类型说明格式为: net_kindmsb:lsbnet1,net2, . . . , netN;其中:其中:p net_kind 是是上述网络类型的一种。上述网络类型的一种。p msb和和lsb 用于用于定义网络范围的常量表达式。其范围定义是可选的。定义

9、网络范围的常量表达式。其范围定义是可选的。如果没有定义范围,默认的网络类型为如果没有定义范围,默认的网络类型为1位。位。wirewire和和tritri网络类型网络类型p 用于用于连接单元的连线是最常见的网络类型。连线(连接单元的连线是最常见的网络类型。连线(wire)网络网络与与 三态三态(tri)网络语法和语义一致)网络语法和语义一致。p 三态网络可以用于描述多个驱动源驱动同一根线的网络三态网络可以用于描述多个驱动源驱动同一根线的网络类型类型, 并且并且没有其他特殊的意义没有其他特殊的意义。p 如果如果多个驱动源驱动一个连线(或三态网络)由多个驱动源驱动一个连线(或三态网络)由下表下表确确

10、定定网络网络 的有效值的有效值。Wire/tri01xz00 xx01x1x1xxxxxz01xz由由关键词关键词wirewire定义常用的网络类型。定义常用的网络类型。wirewire型型网络网络的的语法语法格式格式如下如下:wire n-1:0 ,;其中其中: name1,namen表示表示wire型型网络的网络的名字。名字。wire型变量的说明型变量的说明 wire L; /将上述电路的输出信号将上述电路的输出信号L 声明为声明为网络网络类类型型 wire 7:0 data_bus; /声明一个声明一个8位宽的网络位宽的网络 类类型总线型总线tri0tri0和和tri1tri1网络网络类

11、型类型p 这这类网络类型可用类网络类型可用于于带有上拉或下拉电阻网络的建模。带有上拉或下拉电阻网络的建模。ptri0/tri1tri0/tri1网络的特征是网络的特征是:u无无驱动源驱动源驱动驱动该网络时该网络时,它的值为它的值为0 0(tri1tri1的值为的值为1 1)。u网络网络值的驱动强度都为值的驱动强度都为pullpull。p tri0 tri0相当于这样一相当于这样一个网络个网络:有一个强度为:有一个强度为pullpull的的0 0值连续驱动值连续驱动该该网络网络。p tri1tri1相当于这样一相当于这样一个网络个网络:有一个强度为:有一个强度为pullpull的的1 1值连续驱

12、动值连续驱动该该网络网络。下下表给表给出在多个驱动源情况下出在多个驱动源情况下tri0tri0或或tri1tri1网的有效值。网的有效值。Tri0/tri101xz00 xx01x1x1xxxxxz01x0/1supply0supply0和和supply1supply1网络类型网络类型p supply0 supply0用于对用于对“地地”建模,即低电平建模,即低电平0.0.p supply1 supply1网用于对电源建模,即高电平网用于对电源建模,即高电平1 1。supply0和和supply1网络类型网络类型描述描述 supply0 Gnd,ClkGnd; supply1 2:0 Vcc;

13、未未说明的网络说明的网络p在在Verilog HDLVerilog HDL中,有可能不必声明某种网络类型。在这样的中,有可能不必声明某种网络类型。在这样的情况下,网络类型为情况下,网络类型为1 1位网络。可以使用位网络。可以使用default_nettypedefault_nettype编编译器指令改变这一隐式网络说明方式。使用方法如下译器指令改变这一隐式网络说明方式。使用方法如下: default_nettype net_kind带有带有下列编译器指令:下列编译器指令:default_nettype wanddefault_nettype wand任何未被说明的网默认为任何未被说明的网默认为

14、1 1位线与网。位线与网。 通过通过过程分配语句给寄存器类型变量分配值。过程分配语句给寄存器类型变量分配值。在在每个每个分配分配的过程中间,的过程中间,寄存器寄存器保持保持上次分配的上次分配的值。值。p它用于对硬件寄存器进行建模。可以对边沿敏感(比如:触发器)它用于对硬件寄存器进行建模。可以对边沿敏感(比如:触发器)和电平敏感(比如:置位和电平敏感(比如:置位/ /复位和锁存器)复位和锁存器)的的存储元件存储元件进行进行建模。建模。注:注: 一一个寄存器变量不一定代表一个硬件保存元素,这是因为它也能个寄存器变量不一定代表一个硬件保存元素,这是因为它也能用于表示一个组合逻辑。用于表示一个组合逻辑

15、。寄存器寄存器型变量型变量与网络类型的区别主要在于:与网络类型的区别主要在于:p寄存器寄存器型变量保持最后一次的赋值。只能在型变量保持最后一次的赋值。只能在initial或或always内部对内部对寄存器型变量进行寄存器型变量进行赋值赋值操作操作。p网络网络型型数据需要有连续的数据需要有连续的驱动驱动源源。寄存器型变量声明的格式如下:寄存器型变量声明的格式如下: reg_type range reg_name, reg_name; 其中:其中:preg_type为寄存器类型。为寄存器类型。prange为矢量范围,为矢量范围,MSB:LSB格式,只对格式,只对reg类型有效。类型有效。preg_

16、name为为reg型变量的名字,一次可定义多个型变量的名字,一次可定义多个reg型变型变量,使用逗号分开。量,使用逗号分开。例例: : 寄存器型变量的寄存器型变量的Verilog HDLVerilog HDL描述例子描述例子module ff( input clk, input rst, input A_IN, output reg B_OUT );initialbegin B_OUT=1b0;endalways (posedge clk or posedge rst)begin if(rst) B_OUT=1b1; else B_OUT = =关系关系操作符操作符!逻辑逻辑非非&逻辑逻辑与与

17、|逻辑逻辑或或=逻辑逻辑相等相等!=逻辑逻辑不相等不相等=条件条件(case)相等相等!=条件条件(case)不相等不相等按按位取反位取反&按按位与位与|按按位或位或按按位异或位异或或者或者按按位异或非位异或非&规约规约与与&规约规约与非与非 |规约规约或或|规约规约或非或非规约规约异或异或或者或者规约规约异或非异或非 逻辑逻辑右移右移 算术算术右移右移?:条件条件实数实数支持的操作符支持的操作符一元一元+和和一元一元-一一元操作符元操作符+ - * / *算术运算算术运算符符 = =关系关系操作符操作符! & |逻辑逻辑= !=逻辑逻辑相等相等?:条件条件同同一行内的操作符具有相同的优先级一

18、行内的操作符具有相同的优先级。+ - ! & & | | (一元一元)最高最高优先级优先级* / %+ - (二元二元) = != = !=&(二元)(二元) (二元)(二元) |(二元)(二元)&|?:(条件操作符)(条件操作符) 最低最低优先级优先级算术操作符算术操作符 下下表表给给出了二元操作符的定义出了二元操作符的定义列表列表a+ba加加ba-ba减减ba*ba乘乘ba/ba除除ba%ba模模ba*ba的的b次幂乘次幂乘p 整数除法截断任何小数部分。例如:整数除法截断任何小数部分。例如:7/47/4结果为结果为1 1。p 对于除法和取模运算,如果第二个操作数为对于除法和取模运算,如果第

19、二个操作数为0 0,则整个,则整个结果的值为结果的值为x x。p取取模操作符求出与第一个操作符符号相同的余数。模操作符求出与第一个操作符符号相同的余数。7%47%4结果结果为为3 3,而:,而:-7%4 -7%4 结果为结果为-3-3。幂乘操作符规则幂乘操作符规则op1op2负数负数1正数正数op1*op2op2是奇数是奇数-1op2是偶数是偶数-101op1*op2零零11111负数负数0op2是奇数是奇数-1op2是偶数是偶数-1x10如果幂乘的第一个操作数为如果幂乘的第一个操作数为0 0,并且第二个操作数不是正数;或者第一,并且第二个操作数不是正数;或者第一个操作数实负数,第二个操作数不

20、是整数,则没有个操作数实负数,第二个操作数不是整数,则没有定义定义其结果。其结果。p 对于一元操作,其优先级大于二元操作对于一元操作,其优先级大于二元操作。 下表给出了一元下表给出了一元操作符操作符p 在在算术算术操作符操作符中中,如果,如果任任何何操作数操作数的位值的位值是是x x或或z z,那么,那么整个整个结果结果为为x x。p 算术表达式结果的长度由最长的操作数决定。在算术表达式结果的长度由最长的操作数决定。在赋值语赋值语句句中中, , 算术算术操作结果的长度由操作符左端目标操作结果的长度由操作符左端目标长度决定长度决定。+m一一元加元加m(和(和m一样)一样)-m一一元减元减m算术算

21、术操作的操作的Verilog HDL描述描述例子例子 10%3=1 11%3=2 12%3=0 -10%3=-1 11%-3=2 -4d12%3=1 3*2=9 2*3=8 2*0=1 0*0=1 2.0*-3sb1=0.5 2*-3sb1=0 0*-1=x 9*0.5=3.0 9.0*(1/2)=1.0 -3.0*2.0=9.0在表达式中使用整数和寄存器数据类型的在表达式中使用整数和寄存器数据类型的Verilog Verilog HDLHDL描述的例子描述的例子 integer intA; reg 15:0 regA; reg signed 15:0 regS; intA = -4d12;

22、regA = intA / 3; /表达式是表达式是-4, intA是整数数据类型是整数数据类型,regA的值的值是是65532regal = -4d12; / regA是是65524intA = regA / 3; / 表达式的值为表达式的值为21841,regA是是寄存器寄存器类型数据类型数据intA = -4d12 / 3; / 表达式的结果为表达式的结果为1431655761,是,是一一个个32位的位的 寄存器寄存器数据数据regA = -12 / 3; / 表达式结果表达式结果-4,一个整数类型,一个整数类型,regA 是是 65532regS = -12 / 3; / 表达式结果表

23、达式结果-4。regS是有符号寄存器是有符号寄存器regS = -4sd12 / 3; / 表达式结果表达式结果1。-4sd12为为4关系操作符关系操作符关系关系操作符列表操作符列表aba大于大于ba=ba大于等于大于等于b关系关系操作符有下面特点:操作符有下面特点:p 关系关系操作符的结果为真(操作符的结果为真(1)或假()或假(0)。)。p 如果如果操作数中有一位为操作数中有一位为X或或Z,那么结果为,那么结果为X。p 如果如果关系运算存在无符号关系运算存在无符号数时,将表达式看作是无符号数时,将表达式看作是无符号数。当操作数长度不数。当操作数长度不同时同时,位宽较,位宽较短的操作数将短的

24、操作数将0扩展到扩展到宽度较大的操作数宽度较大的操作数的位宽范围。的位宽范围。p如果如果关系运算都是有符号关系运算都是有符号数时,将表达式看作是有符号数时,将表达式看作是有符号的。当的。当操作数长度不同时操作数长度不同时,位宽,位宽较短的操作数将符号扩较短的操作数将符号扩展到宽度较大的操作数的宽度范围展到宽度较大的操作数的宽度范围。 p 所所有关系运算符的优先级相同,但是比算数运算符有关系运算符的优先级相同,但是比算数运算符的优先级的优先级要低要低。p 如果如果操作数操作数中有实数中有实数,则将所有操作数转换则将所有操作数转换为实数。为实数。然后进行关系运算然后进行关系运算。关系关系操作符的操

25、作符的Verilog HDL描述例子描述例子 a foo 1等价于等价于a (foo - 1) foo - (1 a)不等价于不等价于foo - 1 a 相等操作符相等操作符 下表给下表给出了相等关系操作符列表出了相等关系操作符列表a=ba等于等于b,包含,包含x和和za!=ba不等于不等于b,包含,包含x和和za=ba等于等于b,结果可能未知(比较不包括,结果可能未知(比较不包括x和和z)a!=ba不等于不等于b,结果可能未知(比较不包括,结果可能未知(比较不包括x和和z)相等关系操作符有下面相等关系操作符有下面特点:特点:p 相等相等操作符有相同的优先级。操作符有相同的优先级。p 如果如果

26、相等操作中存在无符号数,当操作数长度不同时,相等操作中存在无符号数,当操作数长度不同时,长度长度较短较短的操作数将的操作数将0扩展到扩展到宽度宽度较大较大的操作数的范围。的操作数的范围。p 如果如果相等操作中都是有符号数,当操作数长度不同时,相等操作中都是有符号数,当操作数长度不同时,长度较短长度较短的操作数将的操作数将符号符号扩展扩展到到宽度宽度较大较大的操作数的范的操作数的范围。围。p如果操作数中间有实数,如果操作数中间有实数,则则将所有操作数将所有操作数都都转换为实数。转换为实数。然后进行相等运算。然后进行相等运算。p 如果如果比较结果为假,则结果为比较结果为假,则结果为0;否则结果为;

27、否则结果为1。l 在在=和和!=比较中,值比较中,值x和和z严格按位比较。也就是说,严格按位比较。也就是说,不进行解释,并且结果一定可知。不进行解释,并且结果一定可知。这个这个比较可比较可用于用于case语语句描述中。句描述中。l 在在=和和!=比较中,值比较中,值x和和z具有通常的意义,且结果可以不具有通常的意义,且结果可以不为为x。也就是说,在逻辑比较中,如果两个操作数之一包。也就是说,在逻辑比较中,如果两个操作数之一包含含x或或z,结果为未知的值(,结果为未知的值(x)。)。这个用于逻辑比较中。这个用于逻辑比较中。相等相等关系操作符关系操作符Verilog HDLVerilog HDL描

28、述的例子描述的例子Data= b11x0;Addr= b11x0; 那么:那么:Data=Addr不定,也就是说值为不定,也就是说值为x;但;但Data=Addr比较结果为比较结果为真,也就是说值为真,也就是说值为1。p 如果如果操作数的长度不相等,长度较小的操作数在左侧操作数的长度不相等,长度较小的操作数在左侧添添0补位,例如:补位,例如:2b10 = = 4b0010,与后面的表达式相,与后面的表达式相同:同:4b0010 = = 4b0010,结果为真(,结果为真(1)。)。逻辑操作符逻辑操作符p 符号符号&(逻辑与)(逻辑与)和符号和符号|(逻辑或)(逻辑或)用于逻辑的连接。用于逻辑的

29、连接。p 逻辑比较逻辑比较的结果为的结果为1(真)或者(真)或者0(假)(假)。当结果模糊的。当结果模糊的时候,为时候,为x。&(逻辑与)(逻辑与)的优先级大于的优先级大于|(逻辑或)(逻辑或)。逻辑操作的优先级低于逻辑操作的优先级低于关系操作和关系操作和相等操作。相等操作。p符号符号!(逻辑非)是一元操作符。(逻辑非)是一元操作符。p这些操作符在逻辑值这些操作符在逻辑值0/1上操作。逻辑操作的结构为上操作。逻辑操作的结构为0或或1逻辑逻辑关系操作的关系操作的Verilog HDLVerilog HDL描述例子描述例子1 1 假设假设alpha=237,beta=0 regA = alpha

30、& beta; / regA设置为设置为0 regB = alpha | beta; / regB设置为设置为1逻辑逻辑关系操作的关系操作的Verilog HDLVerilog HDL描述例子描述例子2 2 a size-1 & b != c & index != lastone 为了为了便于理解和查看设计,推荐使用下面的方法描述便于理解和查看设计,推荐使用下面的方法描述上上面面给出给出的的逻辑操作逻辑操作 (a size-1) & (b != c) & (index != lastone)逻辑关系操作的逻辑关系操作的Verilog HDLVerilog HDL描述例子描述例子3 3 if (

31、!inword) 也也可以表示为可以表示为: if (inword = 0)按按位位操作符操作符下表给出对于不同操作符按位操作的结果下表给出对于不同操作符按位操作的结果&(二元按位与)(二元按位与)0 1 x z01xz0 0 0 00 1 x x0 x x x0 x x x(二元按位异或)(二元按位异或)0 1 x z01xz0 1 x x1 0 x xx x x xx x x x(一元非一元非)1 0 x x|(二元按位或)(二元按位或)0 1 x z01xz0 1 x x1 1 1 1x 1 x xx 1 x x(二元按位异或非)(二元按位异或非)0 1 x z01xz1 0 x x0

32、1 x xx x x xx x x x 如果如果操作数长度不相等操作数长度不相等, , 长度较小的操作数在最左侧添长度较小的操作数在最左侧添0 0补位。补位。例如:例如:b0110b10000b0110b10000,与如下式的操作相同:,与如下式的操作相同:b00110b10000b00110b10000,结果为结果为b10110b10110。归约操作符归约操作符p 归约归约操作符在单一操作数的所有位上操作,并产生操作符在单一操作数的所有位上操作,并产生1 1位结位结果。归约操作符有:果。归约操作符有:u & (归约与归约与)l 如果如果存在位值为存在位值为0, 那么结果为那么结果为0。l 否

33、则否则如果如果存在位值为存在位值为x或或z,结果为,结果为x。l 否则否则结果为结果为1。u & ( 归约与非归约与非)l与与归约操作符归约操作符&相反。相反。u | ( 归约或归约或)l 如果如果存在位值为存在位值为1,那么结果为,那么结果为1。l 否则否则如果如果存在位存在位x或或z,结果为,结果为x。l 否则否则结果为结果为0。u | ( 归约或非归约或非)l与与归约操作符归约操作符|相反。相反。u ( 归约异或归约异或)p (归约异或非归约异或非)l 与与归约操作符归约操作符正好相反。正好相反。l 如果如果存在位值为存在位值为x或或z,那么结果为,那么结果为x。l 否则否则如果操作数中

34、有偶数个如果操作数中有偶数个1, 结果为结果为0。l 否则否则结果为结果为1。归约归约异或操作符用于决定向量中是否有位为异或操作符用于决定向量中是否有位为x x。下表给下表给出了一元规约操作结果的列表。出了一元规约操作结果的列表。操作数操作数&|4b00000101014b11111010014b01100110014b1000011010归约归约异或操作符的异或操作符的Verilog HDLVerilog HDL描述的例子描述的例子 假定假定: MyReg=4b01x0; 则则: MyReg结果为结果为x 上述上述功能使用如下的功能使用如下的if语句检测:语句检测: if (MyReg=1b

35、x) $display(There is an unknown in the vector MyReg !)注:注: 逻辑相等逻辑相等(=)操作符不能用于比较操作,这是因为逻辑相等操作符不能用于比较操作,这是因为逻辑相等操作符比较操作将只会产生结果操作符比较操作将只会产生结果x。全等操作符期望的结果为值。全等操作符期望的结果为值1。移位操作符移位操作符 移位移位操作符包括:操作符包括:p (逻辑右移)(逻辑右移)p (算术右移)(算术右移) 移位移位操作符操作符左侧左侧的的操作数操作数将将移动移动右侧右侧操作数操作数所指定的所指定的位数位数,它是一个逻辑移位。空闲它是一个逻辑移位。空闲位位补补

36、0。如果右侧操作数的如果右侧操作数的值为值为x或或z,则则移位移位操作的结果为操作的结果为x。移位移位操作符的操作符的Verilog HDLVerilog HDL描述描述 例例: : 假设假设start的值为的值为4b0001。 module ashift; reg 3:0 start, result; initial begin start = 1; result = (start 2); /结果是结果是1110 end endmodule条件操作符条件操作符条件条件操作符操作符将将根据根据条件表达式的条件表达式的值值来来选择选择表达式表达式,格式格式如下:如下: cond_expr con

37、d_expr ? expr1:expr2? expr1:expr2p 如果如果cond_expr为真为真(即值为即值为1),选择,选择expr1。p 如果如果cond_expr为假为假(值为值为0),选择,选择expr2。p 如果如果cond_expr为为x或或z,结果将是按以下逻辑,结果将是按以下逻辑expr1和和expr2按位操作的值:按位操作的值:0与与0得得0,1与与1得得1,其余情况为,其余情况为x。条件条件操作符的操作符的Verilog HDLVerilog HDL描述例子描述例子1 1 wire0:2Student=Marks18 ? Grade_A:Grade_C; 计算计算表

38、达式表达式Marks18的值:的值: (1)如果如果结果为真结果为真,则将则将Grade_A赋值赋值给给Student。 (2)如果如果结果为假结果为假,则将则将Grade_C赋值赋值给给Student。条件条件操作符的操作符的Verilog HDLVerilog HDL描述例子描述例子2 2 always#5 Ctr=(Ctr!=25)?(Ctr+1):5; 过程过程赋值中的表达式表明:赋值中的表达式表明: (1)如果如果Ctr不等于不等于25,则则将将Ctr的值的值加加1赋给赋给Ctr。 (2)如果如果Ctr等于等于为为25,则将,则将Ctr值重新置为值重新置为5连接连接和复制和复制操作操

39、作 连接连接操作是操作是将位宽较小的表达式将位宽较小的表达式合并合并形成位形成位宽较大的表达式的一种操作宽较大的表达式的一种操作。其描述格式如下:。其描述格式如下:expr1,expr2,.,exprNexpr1,expr2,.,exprN 由于由于非定长常数非定长常数的的位宽位宽未知未知, ,所以不所以不允许连接非定长允许连接非定长常数。常数。复制操作就是将一复制操作就是将一个表达式复制多次的个表达式复制多次的操作,其描操作,其描述格式述格式如下:如下: replication_constant expr replication_constant expr其中其中:p replication

40、_constant 为为非负数、非非负数、非z和非和非x的常数,表示复制的次数。的常数,表示复制的次数。p expr 为为需要复制的表达式需要复制的表达式。注:注: 包含有复制的连接表达式,不能出现在分配的左侧操作数,包含有复制的连接表达式,不能出现在分配的左侧操作数,也不能连接到也不能连接到output或者或者input端口上。端口上。连接连接操作的操作的Verilog HDLVerilog HDL描述的例子描述的例子 a, b3:0, w, 3b101 等效等效于于 a, b3, b2, b1, b0, w, 1b1, 1b0, 1b1复制复制操作的操作的Verilog HDLVerilo

41、g HDL描述的例子描述的例子 4w 等效等效于于 w, w, w, w复制复制和连接操作的和连接操作的Verilog HDLVerilog HDL描述描述的的例子例子 b, 3a, b 等效于等效于 b, a, b, a, b, a, b 复制复制操作可以复制值为操作可以复制值为0 0的常数的常数。在。在参数化参数化代码时代码时,这这是非是非常有用的常有用的。 带有带有0 0复制常数的复制,被认为是大小为复制常数的复制,被认为是大小为0 0,并且被忽略。这样一个复制,并且被忽略。这样一个复制,只能只能在在至少至少有一个有一个连接操作数是连接操作数是正数正数的连接中的连接中。复制复制和连接操作

42、分配限制的和连接操作分配限制的Verilog HDLVerilog HDL描述描述的的例例子子parameter P = 32;/ 下面对于下面对于1到到32是是合法合法的的。assign b31:0 = 32-P1b1, aP-1:0 ;/ 对于对于P=32来说,下面来说,下面是是非法非法的的。因为。因为0复制单独出现在一复制单独出现在一个连接中。个连接中。assign c31:0 = 32-P1b1, aP-1:0 / 对对P=32来说来说,下面下面是是非法非法的的。initial$displayb(32-P1b1, aP-1:0);复制操作复制操作Verilog Verilog HDLH

43、DL描述的例子描述的例子 result = 4func(w) ; 等效为:等效为: y = func(w) ; result = y, y, y, y ; 在在表达式中需要指定一些类型的操作数。最简表达式中需要指定一些类型的操作数。最简单的操作数包括:网络、变量、单的操作数包括:网络、变量、参数,还包括参数,还包括以下:以下:p如果如果要求一个向量网络、向量寄存器、整数或者时间变量要求一个向量网络、向量寄存器、整数或者时间变量或者参数的单个比特或者参数的单个比特位时,则位时,则需要使用位选择操作数。需要使用位选择操作数。p如果如果要求一个向量网络、向量寄存器、整数或者时间变量要求一个向量网络、

44、向量寄存器、整数或者时间变量或者参数的某些相邻的或者参数的某些相邻的比特比特位,则需要使用部分选择操作位,则需要使用部分选择操作数。数。p可以可以引用数组元素或者一个数组元素的位选择引用数组元素或者一个数组元素的位选择/部分,部分,作为一个操作数作为一个操作数。p其它其它操作数的一个连接也可以指定为一个操作数操作数的一个连接也可以指定为一个操作数。p一一个函数调用也是一个操作数。个函数调用也是一个操作数。向量向量位选择和部分选择位选择和部分选择寻址寻址 如果如果位选择位选择/ /部分选择超出地址范围,或者位部分选择超出地址范围,或者位选择为选择为x/zx/z,则返回的结果为,则返回的结果为x

45、x。 一一个标量,或者一个类型为实数或者实时时间个标量,或者一个类型为实数或者实时时间的变量或者参数,位选择或者部分选择是无效的。的变量或者参数,位选择或者部分选择是无效的。对于部分选择,有两种类型:对于部分选择,有两种类型:p 常数常数部分选择。部分选择。 表示表示为:为: vectmsb_expr:lsb_expr 其中其中: msb_expr和和lsb_expr为常数的整数表达式。为常数的整数表达式。p索引部分选择。索引部分选择。表示为:表示为: reg 15:0 big_vect; reg 0:15 little_vect; big_vectlsb_base_expr +: width

46、_expr little_vectmsb_base_expr +: width_expr big_vectmsb_base_expr -: width_expr little_vectlsb_base_expr -: width_expr 其中:其中:umsb_expr和和lsb_expr为常数的整数为常数的整数表达式,可以表达式,可以在运行在运行的时候改变。的时候改变。uwidth_expr为正常数表达式。为正常数表达式。数组数组部分选择的部分选择的Verilog HDLVerilog HDL描述例子描述例子reg 31: 0 big_vect;reg 0 :31 little_vect;i

47、nteger sel;big_vect 0 +: 8 / = big_vect 7 : 0big_vect15 -: 8 / = big_vect15 : 8little_vect 0 +: 8 / = little_vect0 : 7little_vect15 -: 8 / = little_vect8 :15dword8*sel +: 8 / 带有固定宽度的变量部分选择带有固定宽度的变量部分选择数组数组和存储器和存储器寻址寻址 对于对于 reg 7:0 mem_name0:1023; 存储器地址表示为:存储器地址表示为: mem_nameaddr_expr 其中其中:p addr_expr

48、为任意整数表达式为任意整数表达式。pmem_namemem_name3表示表示存储器的间接寻址。存储器的间接寻址。存储器寻址存储器寻址Verilog Verilog HDLHDL描述的例子描述的例子 reg 7:0 twod_array0:2550:255; wire threed_array0:2550:2550:7; twod_array1413:0 /访问字的低四位访问字的低四位 twod_array136 /访问字的第访问字的第6位位 twod_array13sel / 使用可变的位选择使用可变的位选择 threed_array1413:0 / 非法非法延迟表达式延迟表达式 Veril

49、og Verilog HDLHDL中,延迟表达式的格中,延迟表达式的格式为用圆括号括起来的三个表达式,这三个表达式为用圆括号括起来的三个表达式,这三个表达式之间用冒号分隔开式之间用冒号分隔开。 三三个表达式依次代表最小、典型、最大延迟时间个表达式依次代表最小、典型、最大延迟时间值。值。延迟延迟表达式的表达式的Verilog HDLVerilog HDL描述例子。描述例子。(a:b:c)+(d:e:f) 表示表示:p 最小最小延迟值为延迟值为a+d的和的和。p典型典型延迟值为延迟值为b+e的和的和。p 最大最大延迟值为延迟值为c+f的和。的和。分配分配min:typ:maxmin:typ:max

50、格式值的格式值的Verilog HDLVerilog HDL描述例子描述例子val - (32d 50: 32d 75: 32d 100) 为了为了对表达式求对表达式求值时得到值时得到可靠的结果,控制表达可靠的结果,控制表达式的位宽是非常重要式的位宽是非常重要。p 在某些在某些情况下采取最简单的解决情况下采取最简单的解决方法方法。u比如比如:如果指定了两个:如果指定了两个16位的寄存器矢量的位排序位的寄存器矢量的位排序方式和操作,那么结果就是一个方式和操作,那么结果就是一个16位的值位的值。 p 然而然而,在某些情况下,究竟有多少位参与表达式求值或者结果,在某些情况下,究竟有多少位参与表达式求

51、值或者结果有多少位,并不容易看出来。有多少位,并不容易看出来。u 例如例如:两个:两个16位操作数之间的算术加法,是应该使位操作数之间的算术加法,是应该使用用16位求值还是该使用位求值还是该使用17位(允许进位位溢出)求值位(允许进位位溢出)求值? 答案答案取决于取决于被被建模器件的类型以及那个设备是否建模器件的类型以及那个设备是否处理进位位溢出来决定处理进位位溢出来决定。 Verilog HDL利用操作数的位宽来决定有多少位参利用操作数的位宽来决定有多少位参与表达式的求值。与表达式的求值。表达式表达式长度长度Veriog HDLVeriog HDL描述的例子描述的例子 reg 15:0 a,

52、 b; / 16位寄存器类型位寄存器类型 reg 15:0 sumA; / 16位寄存器类型位寄存器类型 reg 16:0 sumB; / 17位寄存器位寄存器类型类型 sumA = a + b; / 结果结果16位位 sumB = a + b; / 结果结果17位位控制控制表达式位宽的规则已经公式化,因此在大多数表达式位宽的规则已经公式化,因此在大多数实际情况下,都有一个简单的解决方法。实际情况下,都有一个简单的解决方法。p表达式位宽是由包含在表达式内的操作数和表达式所处的表达式位宽是由包含在表达式内的操作数和表达式所处的环境决定的环境决定的。p自主自主表达式的位宽由它自身单独决定,比如延迟

53、表达式表达式的位宽由它自身单独决定,比如延迟表达式。p环境环境决定型表达式的位宽由该表达式自己的位宽和它所处决定型表达式的位宽由该表达式自己的位宽和它所处的环境来决定,的环境来决定,比如比如:一一个赋值操作中右侧表达式的位宽个赋值操作中右侧表达式的位宽由它自己的位宽和赋值符左侧的位宽来决定。由它自己的位宽和赋值符左侧的位宽来决定。 下表说下表说明了表达式的形式如何决定表达式结果的位宽。表中明了表达式的形式如何决定表达式结果的位宽。表中i i、j j、k k都表都表示单操作数的示单操作数的表达式,而表达式,而L L(i i)代表表达式)代表表达式i i的位宽,的位宽,opop代表操作符。代表操作

54、符。表达式表达式结果结果值位宽值位宽说明说明不定不定长常数长常数与与整数相同整数相同 定定长常数长常数与与给定的位宽相同给定的位宽相同 i op j,操作符,操作符op为:为:+ - * / % & | or max(L(i),L(j)) op i,操作符,操作符op为:为:+ - L(i) i op j,操作符,操作符op为:为:=!= = != & | = 1; /不能正常操作不能正常操作 自主自主表达式的表达式的Veriog HDLVeriog HDL描述的描述的例子例子 reg 3:0 a; reg 5:0 b; reg 15:0 c; initial begin a = 4hF; b = 6hA;$display(a*b=%h, a*b);c = a*b; $display(a*b=%h, c);c = a*b; $display(c=%h, c);end仿真器的输出结果:仿真器的输出结果: a*b=16 / 由于长度为由于长度为6,所以,所以h96被截断到被截断到h16。 a*b=1 / 表达式的长度为表达式的长度为4 c=ac61 / 表达式的长度为表达式

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论