背景
设计电路时,经常会遇到从一个大位宽数据M中选择连续的数据N,此时对每bit都使用Mx显然浪费了资源,而barrel_shifter是一种不错的选择。
example
设计思路
设计思路(以Example2为例): step1:根据输入输出数据位宽确定最大移位值,7-2=5bit。 step2:将最大移位值依次减去1、2、4、……2^N(N=0,1,2...),直到为非正数,减数的个数即为barrel_shifer的层数。这里5-1-2-4=-2,需要设计3层Mx。 step3:3层Mx,第1层移位4bit,第2层移位2bit,第3层移位1bit。 step4:第3层Mx个数等于输出数据位宽,第2层Mx个数在第3层基础上加1,第1层Mx个数在第二层基础上加2。
扩展
1、如果减去2^N后为负数,那么有一部分Mx就可以省略,数据为直通连线。 2、如果barrel_shifer的移位颗粒比1bit大,比如为16bit,那么减法时从16bit开始,这里反映在电路上就有可能省略最后几层的Mx。