module __acm_random__rng_next( input wire [31:0] s, output wire [63:0] out ); // lint_off MULTIPLY function automatic [46:0] umul47b_32b_x_15b (input reg [31:0] lhs, input reg [14:0] rhs); begin umul47b_32b_x_15b = lhs * rhs; end endfunction // lint_on MULTIPLY wire [31:0] s_seed; wire [46:0] umul_78; wire [31:0] new_seed; assign s_seed = s[31:0]; assign umul_78 = umul47b_32b_x_15b(s_seed, 15'h41a7); assign new_seed = {16'h0000, umul_78[46:31]} + {1'h0, umul_78[30:0]}; assign out = {{new_seed}, new_seed}; endmodule