module __acm_random__rng_next64( input wire [31:0] s, output wire [95: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__1; wire [14:0] literal_208; wire [46:0] umul_209; wire [15:0] literal_210; wire smul_105_TrailingBits_; wire [31:0] new_seed; wire [46:0] umul_217; wire [32:0] add_224; wire [31:0] new_seed__2; wire [62:0] smul_105_NarrowedMult_; wire [62:0] add_233; wire [31:0] s__2; wire [63:0] result; assign s_seed__1 = s[31:0]; assign literal_208 = 15'h41a7; assign umul_209 = umul47b_32b_x_15b(s_seed__1, literal_208); assign literal_210 = 16'h0000; assign smul_105_TrailingBits_ = 1'h0; assign new_seed = {literal_210, umul_209[46:31]} + {smul_105_TrailingBits_, umul_209[30:0]}; assign umul_217 = umul47b_32b_x_15b(new_seed, literal_208); assign add_224 = {smul_105_TrailingBits_, new_seed} + 33'h1_ffff_ffff; assign new_seed__2 = {literal_210, umul_217[46:31]} + {smul_105_TrailingBits_, umul_217[30:0]}; assign smul_105_NarrowedMult_ = {add_224, 30'h0000_0000} - {{30{add_224[32]}}, add_224}; assign add_233 = smul_105_NarrowedMult_ + {32'h0000_0000, new_seed__2[31:1]}; assign s__2 = {new_seed__2}; assign result = {add_233, new_seed__2[0]}; assign out = {s__2, result}; endmodule