EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
转——移位和位拼运算符之战 6 d8 Z' s# D: { u: a5 ?
6 H' ~$ F) I i7 U1. 移位运算符 移位运算符是双目运算符,将运算符左边的操作数左移或右移运算符右边的操作数指定的位数,用0来补充空闲位。如果右边操作数的值为X或Z,则移位结果为未知数X。 Verilog HDL中有两种移位运算符:<<(左逻辑移)和>>(右逻辑移)。 例程1
6 I# l7 [# L6 i9 D8 B! @% ^+ U$ \, r, f9 j( T3 }) A
, X3 H$ e" M ]
. n' l, t9 }# p/ y" ?6 V# p" k0 w仿真图3 L2 n! N! k P9 D) Q) K# d
. o8 j: K! h) K5 U* z) b; }2 g) T, R+ Z- }. x; |7 c! |
从仿真图,可以看出,每次a都向左边移动移位,后面补充0,直到把逻辑1溢出,后面就一直为0了。每次b都向右边移动移位,前面补充0,直到把逻辑1溢出,就一直为0了。 总结:移位运算符的使用时,左移可以看成是乘以2,右移可以看成是除以2。所以移位运算符用在计算中,代替乘法和除法。尤其是除法,使用移位的方式,可以节省资源。
! t1 S$ G# o+ p/ ?- A x1. 位拼运算符 位拼运算符是将多个小的表达式合并形成一个大的表达式,用符号{}来实现多个表达式的连接运算,各个表达式之间用“,”隔开。 例程2
7 l" j' ~0 g c' P9 l( x7 `3 {' a: E, o D" Z
6 r# ]/ ?5 b3 ? w/ |0 a! C
仿真图 : d; q, c1 f5 M6 s5 M7 K
从图中可以看出,输出从左向右,每次0变换一个位置,到最右边时就会放返回最左边继续循环,使用拼位的运算符,就会使程序编写起来变得简单了。 程序中代码的意思就是,每次把最低位放到最高位,让前三位放到后面,这样逻辑“1”就实现了移位,形成了循环。 + z+ |' F8 Q+ ~
|