// // Generated by Bluespec Compiler // // // Ports: // Name I/O size props // RDY_start O 1 // result O 51 reg // RDY_result O 1 // CLK I 1 clock // RST_N I 1 unused // start_num1 I 51 // start_num2 I 51 // EN_start I 1 // // No combinational paths from inputs to outputs // // `ifdef BSV_ASSIGNMENT_DELAY `else `define BSV_ASSIGNMENT_DELAY `endif `ifdef BSV_POSITIVE_RESET `define BSV_RESET_VALUE 1'b1 `define BSV_RESET_EDGE posedge `else `define BSV_RESET_VALUE 1'b0 `define BSV_RESET_EDGE negedge `endif module mkGCD(CLK, RST_N, start_num1, start_num2, EN_start, RDY_start, result, RDY_result); input CLK; input RST_N; // action method start input [50 : 0] start_num1; input [50 : 0] start_num2; input EN_start; output RDY_start; // value method result output [50 : 0] result; output RDY_result; // signals for module outputs wire [50 : 0] result; wire RDY_result, RDY_start; // register reg_1 reg [50 : 0] reg_1; wire [50 : 0] reg_1$D_IN; wire reg_1$EN; // register reg_2 reg [50 : 0] reg_2; reg [50 : 0] reg_2$D_IN; wire reg_2$EN; // rule scheduling signals wire WILL_FIRE_RL_flip, WILL_FIRE_RL_sub; // inputs to muxes for submodule ports wire [50 : 0] MUX_reg_2$write_1__VAL_3; // remaining internal signals wire reg_1_ULE_reg_2___d3; // action method start assign RDY_start = reg_2 == 51'd0 ; // value method result assign result = reg_1 ; assign RDY_result = reg_2 == 51'd0 ; // rule RL_flip assign WILL_FIRE_RL_flip = !reg_1_ULE_reg_2___d3 && reg_2 != 51'd0 ; // rule RL_sub assign WILL_FIRE_RL_sub = reg_1_ULE_reg_2___d3 && reg_2 != 51'd0 ; // inputs to muxes for submodule ports assign MUX_reg_2$write_1__VAL_3 = reg_2 - reg_1 ; // register reg_1 assign reg_1$D_IN = EN_start ? start_num1 : reg_2 ; assign reg_1$EN = EN_start || WILL_FIRE_RL_flip ; // register reg_2 always@(EN_start or start_num2 or WILL_FIRE_RL_flip or reg_1 or WILL_FIRE_RL_sub or MUX_reg_2$write_1__VAL_3) begin case (1'b1) // synopsys parallel_case EN_start: reg_2$D_IN = start_num2; WILL_FIRE_RL_flip: reg_2$D_IN = reg_1; WILL_FIRE_RL_sub: reg_2$D_IN = MUX_reg_2$write_1__VAL_3; default: reg_2$D_IN = 51'h2AAAAAAAAAAAA /* unspecified value */ ; endcase end assign reg_2$EN = EN_start || WILL_FIRE_RL_flip || WILL_FIRE_RL_sub ; // remaining internal signals assign reg_1_ULE_reg_2___d3 = reg_1 <= reg_2 ; // handling of inlined registers always@(posedge CLK) begin if (reg_1$EN) reg_1 <= `BSV_ASSIGNMENT_DELAY reg_1$D_IN; if (reg_2$EN) reg_2 <= `BSV_ASSIGNMENT_DELAY reg_2$D_IN; end // synopsys translate_off `ifdef BSV_NO_INITIAL_BLOCKS `else // not BSV_NO_INITIAL_BLOCKS initial begin reg_1 = 51'h2AAAAAAAAAAAA; reg_2 = 51'h2AAAAAAAAAAAA; end `endif // BSV_NO_INITIAL_BLOCKS // synopsys translate_on endmodule // mkGCD