在verilog语言中,本来>>>就是算数右移的符号,可是在实际仿真的时候我发现效果还是和逻辑右移的效果一样。后来我觉得应该可以自己写一个算了。
方法一:暴力case
case(shift) //shift是要移位的数目
1:
result <= {result[15],result[15:1]}; //假设result是15位的数据
2:
result <={ {2{result[15]}},result[15:2]};
......
default:
result <= {16{result[15]}};
endcase
方法二:循环法(后来我发现不可行,不支持非常数)
integer i;//i要在外面定义,不过一般不要用循环,循环是仿真的时候常用的,综合的时候不要用
for( i=0;i < shift;i=i+1)
begin
result <= {result[15],result[15:1]};
end
我写的一个M0 CPU就是使用