在Verilog HDL中有兩種移位運算符。
<<:(左移位運算符)
>>:(右移位運算符)
其使用方法如下:
a >> n;
a << n;
a代表要進行移位的操作數,n代表要移幾位。這兩種移位運算都用0來填補移出的空位。下面舉例說明:
module shift;
reg [3:0] start, result;
initial
begin
start = 1; //start在初始時刻設為值0001
result = (start<<2); //移位後,start的值0100,然後賦給result
end
endmodule
從上面的例子可以看出,start在移過兩位以後,用0來填補空出的位。進行移位運算時應注意移位前後變量的位數,下面舉例說明。
4’b1001<<1 = 5’b10010; //左移1位後用0填補低位
4’b1001<<2 = 6’b100100; //左移2位後用00填補低位
1<<6 = 32’b1000000; //左移6位後用000000填補低位
4’b1001>>1 = 4’b0100; //右移1位後,低1位丢失,高1位用0填補
4’b1001>>4 = 4’b0000; //右移4位後,低4位丢失,高4位用0填補
【注意】左移運算使位數增加,右移運算不改變位數。