Can anyone please help me to understand what’s going on in sign_extend.v
this macro is initiated in the cic_decim.v

sign_extend #(bw,bw+maxbitgain)
ext_input (.in(signal_in),.out(signal_in_ext));

when i opened the macro i couldn’t understand it’s function

// Sign extension “macro”
// bits_out should be greater than bits_in

module sign_extend (in,out);
parameter bits_in=0; // FIXME Quartus insists on a default
parameter bits_out=0;
input [bits_in-1:0] in;
output [bits_out-1:0] out;
assign out = {{(bits_out-bits_in){in[bits_in-1]}},in};

Thanks in advance.