循环左移器。
假如左移 3 位,则移动示意如下图所示:
根据移动关系可得到如下的移动计算公式:
ⅰ若当前数据位的当前序号(0—7)加上移动的次数大于数组长度(这里的数组长度是实际
数组长度-1,如是 8 位的长度,则减一就是 7),则该位将移动到:当前序号+移动次数-数组
长度-1
ⅱ若当前数据位的序号加上移动的次数小于数组长度,则该位移动到:当前序号+移动次数
根据如上的计算方法,就可以编写出循环左移的程序。
程序代码如下:
逐行解释:
18:移动次数暂存寄存器。最大就移动 8 次。
22-23:当 load=0 时,将移动次数装载进来,conv_integer()将 std_logic_vector 转变为 integer
后赋值给 CNT_S。
25-35:当上升沿来后,通过一个 for 循环进行移位。27-28,就是ⅱ种情况,29-30,就是ⅰ
种情况