明德扬肖老师 发表于 2020-9-7 18:57:00

【FPGA至简设计原理与应用】第一篇第三章硬件描述语言Verilog第5节按位逻辑运算符


本案例的编号为:001500000139,如果有疑问,请按编号在下面贴子查找答案:MDY案例交流【汇总贴】_FPGA-明德扬科教 (mdy-edu.com)
本文为明德扬原创及录用文章,转载请注明出处
大家好,近期我们会连载《FPGA至简设计原理与应用》一书,有兴趣的同学可以学习,也希望大家可以对我们的书提出宝贵的意见和建议。
《FPGA至简设计原理与应用》书籍连载索引目录

http://www.fpgabbs.cn/forum.php?mod=viewthread&tid=989


读过的朋友可积极在贴后留言,书籍正式出版时,我们会从留言者中挑选20位幸运读者,幸运读者可获潘老师亲笔签名书籍一本。

注:手机浏览可能格式会乱,建议用电脑端进行浏览。




5.5 按位逻辑运算符

本文档编号:001100000061
需要看对应的视频,请点击视频编号:001100000062
1. 本节主要进行组合逻辑的介绍,包括:程序语句(assign语句、always语句),数字进制(二进制、不定态、高阻态),算数运算符(加、减、乘、除运算符),逻辑运算符(逻辑与、或、非运算符),按位逻辑运算符(单目按位与、或、非运算符,双目按位与、或、异或运算符),关系运算符,移位运算符(左移、右移运算符),条件运算符(三目运算符、if语句、case语句、选择语句等),拼接运算符;
2. ALTERA和VIVADO文档

http://www.fpgabbs.cn/data/attachment/forum/202005/14/101340fv29lqrnvttc349q.jpg
注:~ ^, ^ ~(二元异或非即同或):(相当于同或门运算)。
在Verilog HDL语言中有下面几种按位运算符:~(一元非):(相当于非门运算)&(二元与):(相当于与门运算)|(二元或):(相当于或门运算)^(二元异或):(相当于异或门运算)
这些操作符在输入操作数的对应位上按位操作,并产生向量结果。下图各真值表种显示对于不同按位逻辑运算符按位操作的结果:

http://www.fpgabbs.cn/data/attachment/forum/202005/14/101457l3y3x5tt28y8zg0j.jpg5.5.1单目按位与
单目按位与运算符&,运算符后为需要进行逻辑运算的信号,表示对信号进行每位之间相与的操作。例如Reg A,C;assign C=&A;上面代码等价于 C = A &A & A & A;如果A=4’b0110,C的结果为0。
5.5.2单目按位或

单目按位或运算符|,运算符后为需要进行逻辑运算的信号,表示对信号进行每位之间相或的操作。例如
Reg A,C;assign C=|A;上面代码等价于 C = A | A |A | A;如果A=4’b0110,C的结果为1。
5.5.3单目按位非
单目按位非运算符~,运算符后为需要进行逻辑运算的信号,表示对信号进行每位取反的操作。例如Reg A,C;assign C=~A;上面代码等价于 C = ~A,C = ~A,C = ~A,C = ~A。如果A=4’b0110,C的结果为4’b1001。
5.5.4双目按位与
双目按位与运算符&,信号位于运算符的左右两边,表示的是对这两个信号进行对应位相与的操作。例如Reg A,B,C;assign C = A & B;上面的代码等价于:C = A &B,C = A & B,C = A & B,C = A &B。如果A=4’b0110,B=4’b1010,C的结果为4’b0010。如果操作数长度不相等, 长度较小的操作数在最左侧添0 补位。例如,reg A;reg B;reg C;assign C = A & B;上面的代码等价于:C = A &B,C = A & B,C = 0& B,C = 0 &0。
5.5.5双目按位或
双目按位或运算符|,信号位于运算符的左右两边,表示的是对这两个信号进行对应位相或的操作。例如reg A,B,C;assign C = A | B;上面的代码等价于:C = A |B,C = A | B,C = A | B,C = A | B。如果A=4’b0110,B=4’b1010,C的结果为4’b1110。如果操作数长度不相等, 长度较小的操作数在最左侧添0 补位。例如,reg A;reg B;reg C;assign C = A | B;上面的代码等价于:C = A |B,C = A | B,C = 0 | B,C = 0 | 0。
5.5.6双目按位异或
双目按位异或运算符^,信号位于运算符的左右两边,表示的是对这两个信号进行对应位相异或的操作。异或是指0^0=0,1^1=0,0^1=1,即相同为0,不同为1。例如reg A,B,C;assign C = A ^ B;上面的代码等价于:C = A ^B,C = A ^ B,C = A ^ B,C = A ^ B。如果A=4’b0110,B=4’b1010,C的结果为4’b1100。如果操作数长度不相等, 长度较小的操作数在最左侧添0 补位。例如,reg A;reg B;reg C;assign C = A | B;上面的代码等价于:C = A ^B,C = A ^ B,C = 0 ^ B,C = 0 ^ 0。

5.5.7经验总结


[*]逻辑运算符和位运算符的区别
逻辑运算符包括&&、||、!,位运算符包括&、|、~。那么逻辑运算符和位运算符有什么区别呢?将逻辑与“&&”和按位与“&”进行对比可以看出,逻辑与运算符的运算只有逻辑真或逻辑假两种结果,即1或0;而“&”是位运算符,用于两个多位宽数据操作。对于位运算符操作,两个数按位进行相与、相或或者非。
123456assign a = 4’b0111&& 4’b1000;assign b = 4’b0111|| 4’b1000;assign c =!4’b0111;assign d = 4’b0111& 4’b1000;assign e = 4’b0111| 4’b1000;assign f =~4’b0111;
上面运行的结果为:a=1’b1,b=1’b1,c=1’b0,d=4’b000,e=4’b1111,f=4’b1000。





页: [1]
查看完整版本: 【FPGA至简设计原理与应用】第一篇第三章硬件描述语言Verilog第5节按位逻辑运算符