verilog 的一个语法,其中的parameter N = 2*M 什么意思?该怎么处理

verilog 的一个语法,其中的parameter N = 2**M 什么意思?
module barrel_shifter
(
input [N-1:0] data,
input [M-1:0] distance,
input clk, enable, shift_left,
output reg [N-1:0] sr_out
);

parameter M = 3;
parameter N = 2**M;

// Declare temporary registers
reg [2*N-1:0] tmp;

// Shift/rotate in the specified direction and
// by the specified amount
always @ (posedge clk)
begin
tmp = {data,data};

if (enable == 1'b1)
if (shift_left)
begin
tmp = tmp << distance;
sr_out <= tmp[2*N-1:N];
end
else
begin
tmp = tmp >> distance;
sr_out <= tmp[N-1:0];
end
end

endmodule


------解决方案--------------------
2 to the power of M, 

namely 2^M (1 << M)