循环右移这个在ARM的指令中也是比较常见的,今天想把之前没写的这条指令补上。
循环右移感觉上有很多方法,这里就说一些我做出来并仿真正确的做法吧!
module ROR( pre,later,shift);
input wire [7:0]pre;
input wire [2:0]shift;
output wire [7:0]later;
assign later = (pre>>shift)|(pre<<(8-shift)); //这里只有这个连续赋值,但是不要小看这个,这里有一些要注意的
//那里的符号要用“或”,不能用“加”,这个原理就是循环右移就是逻辑左移或上逻辑右移n位(n=数据位数-移位数)
//如果想多些几行就用always语句来实现该组合逻辑,当然写个循环也是可以的,不过用循环综合出来的东西乱七八糟
endmodule //其实还可以用乘法实现移位,这个就看在资源方面哪一种资源更有利了
仿真文件: