module top_module(
input clk,
input load,
input ena,
input [1:0] amount,
input [63:0] data,
output reg [63:0] q);
always @(posedge clk) begin
if(load) q<=data;
else if (ena) begin
case(amount)
2'b00:q<={q[62:0],1'b0};
2'b01:q<={q[55:0],8'b0};
2'b10:q<={{2{q[63]}},q[62:1]};
2'b11:q<={{9{q[63]}},q[62:8]};
endcase
end
else q<=q;
end
endmodule
以上为算数右移,右移后高位被移走的地方需用符号位(q[63])代替;
逻辑右移,右移后高位被移走的地方用0代替;
算数左移与逻辑左移没有区别。