Truth Table/Functionality
The lpm_clshift
megafunction acts like a barrel shifter. It contains entirely combinational logic.
Overflow occurs when
the shifted result exceeds the precision of the result
bus. For "LOGICAL"
values, overflow occurs when any 1 has been
shifted out. For "ARITHMETIC"
values, overflow occurs when a significant digit is shifted into or past the sign
bit. Underflow occurs
when the shifted result contains no significant digits.
Operation of the LOGICAL
shifter is illustrated in the following example,
in which LPM_WIDTH
= 4:
Inputs |
Output |
||||
---|---|---|---|---|---|
direction |
|
|
overflow |
|
|
X |
0 |
dcba |
0 |
dcba |
0 |
0 |
1 |
dcba |
d |
cba0 |
0 |
0 |
2 |
dcba |
d # c |
ba00 |
0 |
0 |
3 |
dcba |
d # c # b |
a000 |
0 |
1 |
1 |
dcba |
0 |
0dcb |
!d & !c & !b & a |
1 |
2 |
dcba |
0 |
00dc |
!d & !c & (b # a) |
1 |
3 |
dcba |
0 |
000d |
!d & (c # b # a) |
Operation of the ARITHMETIC
shifter is illustrated in the following example, in which LPM_WIDTH
= 4:
Inputs |
Output |
||||
---|---|---|---|---|---|
|
|
|
|
|
|
X |
0 |
dcba |
0 |
dcba |
0 |
0 |
1 |
0cba |
c |
cba0 |
0 |
0 |
1 |
1cba |
!c |
cba0 |
0 |
0 |
2 |
0cba |
c # b |
ba00 |
0 |
0 |
2 |
1cba |
c! # b! |
ba00 |
0 |
0 |
3 |
0cba |
c # b # a |
a000 |
0 |
0 |
3 |
1cba |
!c # !b # !a |
a000 |
0 |
1 |
1 |
0cba |
0 |
00cb |
!c & !b & a |
1 |
1 |
1cba |
0 |
11cb |
c & b & !a |
1 |
2 |
0cba |
0 |
000c |
!c & (b # a) |
1 |
2 |
1cba |
0 |
111c |
c & (!b # !a) |
1 |
3 |
0cba |
0 |
0000 |
(c # b # a) |
1 |
3 |
1cba |
0 |
1111 |
(!c # !b # !a) |
Operation of the ROTATE
shifter is illustrated in the following example, in which LPM_WIDTH
= 4:
Inputs |
Output |
||
---|---|---|---|
|
|
|
|
X |
0 |
dcba |
dcba |
0 |
1 |
dcba |
cbad |
0 |
2 |
dcba |
badc |
0 |
3 |
dcba |
adcb |
1 |
1 |
dcba |
adcb |
1 |
2 |
dcba |
badc |
1 |
3 |
dcba |
cbad |