您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 第4章FPGA运算符赋值语句
运算符、赋值语句1)取反运算符~~是一个单目运算符,用来对一个操作数进行按位取反运算。其运算规则见下表:举例说明:rega=4'b1010;//rega的初值为'b1010rega=~rega;//rega的值进行取反运算后变为4'b0101~1001xx2)按位与运算符&按位与运算就是将两个操作数的相应位进行与运算,其运算规则见下表&01x0000101xx0xx3)按位或运算符|按位或运算就是将两个操作数的相应位进行或运算。其运算规则见下表:|01x001x1111xx1x4)按位异或运算符^(也称之为XOR运算符)按位异或运算就是将两个操作数的相应位进行异或运算。其运算规则见下表:^01x001x110xxxxx5)按位同或运算符^~按位同或运算就是将两个操作数的相应位先进行异或运算再进行非运算。其运算规则见下表^~01x010x101xxxxx6)不同长度的数据进行位运算:两个长度不同的数据进行位运算时,系统会自动的将两者按右端对齐。两个操作数按位进行操作。3逻辑运算符在Verilog语言中存在三种逻辑运算符:1)&&逻辑与2)||逻辑或3)!逻辑非&&和||是二目运算符,它要求有两个操作数,如(ab)&&(bc),(ab)||(bc)。!是单目运算符,只要求一个操作数,如!(ab)。下表为逻辑运算的真值表。它表示当a和b的值为不同的组合时,各种逻辑运算所得到的值。逻辑运算符中&&和||的优先级别低于关系运算符,!见下例:(ab)&&(xy)可写成:ab&&xy(a==b)||(x==y)可写成:a==b||x==y(!a)||(ab)可写成:!a||ab为了提高程序的可读性,明确表达各运算符间的优先关系,建议使用括号.ab!a!ba&&ba||b真真假假真真真假假真假真假真真假假真假假真真假假4关系运算符关系运算符共有以下四种aba小于baba大于ba=ba小于或等于ba=ba大于或等于b在进行关系运算时,如果声明的关系是假的(flase),则返回值是0,如果声明的关系是真的(true),则返回值是1,如果某个操作数的值不定,则关系是模糊的,返回值是不定值。所有的关系运算符有着相同的优先级别。关系运算符的优先级别低于算术运算符的优先级别。见下例asize-1//这种表达方式等同于下面a(size-1)//这种表达方式。size-(1a)//这种表达方式不等同于下面size-1a//这种表达方式。从上面的例子可以看出这两种不同运算符的优先级别。当表达式size-(1a)进行运算时,关系表达式先被运算,然后返回结果值0或1被size减去。而当表达式size-1a进行运算时,size先被减去1,然后再同a相比。5.等式运算符在VerilogHDL语言中存在四种等式运算符:1==(等于)2!=(不等于)3===(等于)4!==(不等于)这四个运算符都是二目运算符,它要求有两个操作数。==和!=又称为逻辑等式运算符。其结果由两个操作数的值决定。由于操作数中某些位可能是不定值x和高阻值z,结果可能为不定值x。而===和!==运算符则不同,它在对操作数进行比较时对某些位的不定值x和高阻值z也进行比较,两个操作数必需完全一致,其结果才是1,否则为0。===和!==运算符常用于case表达式的判别,所以又称为case等式运算符。这四个等式运算符的优先级别是相同的。下面画出==与===的真值表,帮助理解两者间的区别。===01XZ0100010100X0010Z0001==01XZ010XX101XXXXXXXZXXXX下面举一个例子说明“==”和“===”的区别。例:if(A==1’bx)$display(“AisX”);(当A等于X时,这个语句不执行)if(A===1’bx)$display(“AisX”);(当A等于X时,这个语句执行)6.移位运算符在VerilogHDL中有两种移位运算符:(左移位运算符)和(右移位运算符)。其使用方法如下:an或ana代表要进行移位的操作数,n代表要移几位。这两种移位运算都用0来填补移出的空位。下面举例说明:moduleshift;reg[3:0]start,result;Initialbeginstart=1;//start在初始时刻设为值0001result=(start2);//移位后,start的值0100,然后赋给result。endendmodule从上面的例子可以看出,start在移过两位以后,用0来填补空出的位。7.位拼接运算符(Concatation)在VerilogHDL语言有一个特殊的运算符:位拼接运算符{}。用这个运算符可以把两个或多个信号的某些位拼接起来进行运算操作。其使用方法如下:{信号1的某几位,信号2的某几位,..,..,信号n的某几位}即把某些信号的某些位详细地列出来,中间用逗号分开,最后用大括号括起来表示一个整体信号。例:{a,b[3:0],w,3’b101}也可以写成为{a,b[3],b[2],b[1],b[0],w,1’b1,1’b0,1’b1}在位拼接表达式中不允许存在没有指明位数的信号。这是因为在计算拼接信号的位宽的大小时必需知道其中每个信号的位宽。位拼接还可以用重复法来简化表达式。见下例:{4{w}}//这等同于{w,w,w,w}位拼接还可以用嵌套的方式来表达。见下例:{b,{3{a,b}}}//这等同于{b,a,b,a,b,a,b}8.缩减运算符(reductionoperator)缩减运算符是单目运算符,也有与、或、非运算。其与、或、非运算规则类似于位运算符的与或非运算规则,但其运算过程不同。位运算是对操作数的相应位进行与或非运算,操作数是几位数则运算结果也是几位数。而缩减运算则不同,缩减运算是对单个操作数进行或与非递推运算,最后的运算结果是一位的二进制数。缩减运算的具体运算过程是这样的:第一步先将操作数的第一位与第二位进行或与非运算,第二步将运算结果与第三位进行或与非运算,依次类推,直至最后一位。例如:reg[3:0]B;regC;C=&B;相当于:C=((B[0]&B[1])&B[2])&B[3];由于缩减运算的与、或、非运算规则类似于位运算符与、或、非运算规则,这里不再详细讲述,请参照位运算符的运算规则介绍。9.优先级别优先级别!~高优先级别*/%+-====!====!==&^^~|&&||?:低优先级别10.关键词在VerilogHDL中,所有的关键词是事先定义好的确认符,用来组织语言结构。关键词是用小写字母定义的,因此在编写原程序时要注意关键词的书写,以避免出错。下面是VerilogHDL中使用的关键词。always,and,assign,begin,buf,bufif0,bufif1,case,casex,casez,cmos,deassign,default,defparam,disable,edge,else,end,endcase,endmodule,endfunction,endprimitive,endspecify,endtable,endtask,event,for,force,forever,fork,function,highz0,highz1,if,initial,inout,input,integer,join,large,macromodule,medium,module,nand,negedge,nmos,nor,not,notif0,notifl,or,output,parameter,pmos,posedge,primitive,pull0,pull1,pullup,pulldown,rcmos,reg,releses,repeat,mmos,rpmos,rtran,rtranif0,rtranif1,scalared,small,specify,specparam,strength,strong0,strong1,supply0,supply1,table,task,time,tran,tranif0,tranif1,tri,tri0,tri1,triand,trior,trireg,vectored,wait,wand,weak0,weak1,while,wire,wor,xnor,xor
本文标题:第4章FPGA运算符赋值语句
链接地址:https://www.777doc.com/doc-2156371 .html