微信公众号:FPGA动力联盟
上篇谈到了verilog的逻辑运算,本篇举几个很有意思的例子:通过逻辑运算来实现关系操作。这种操作比直接用关系运算符(>,<,==,!=等)要快速、并且节约电路成本,例子如下表所示:
操作数 | 表达式与结果 | 注释 |
a=4’b0000 b=4’b0101 | |a = 1’b0 |b = 1’b1 | 利用缩减或操作可以判断一个数是否为全0 |
a=4’b1100 b=4’b1111 | &a = 1’b0 &b = 1’b1 | 利用缩减与操作可以判断一个数是否为全1 |
a=4’b1100 b=4’b1110 | ^a = 1’b0,~^a = 1’b1 ^b = 1’b1,~^b = 1’b0 | 如果操作数有偶数个1,异或结果为0,如果有奇数个1,异或结果为1。同或反之 |
a=4’b0000 b=4’b0101 c=4’b0101 | |(a^b) = 1’b1 |(a^c) = 1’b1 |(b^c) = 1’b0 | 利用缩减或、按位异或操作可以判断两个数是否相等。相等为1’b0,不等为1’b1 |
如果我们在代码中使用了上述这样的代码描述来替代关系运算符,请一定、务必写注释,要不然别人很难读懂贵代码了!