module top(p1h, p1l, p2h, p2l, p3h, p3l); (* LOC="P3" *) output p1h; (* LOC="P4" *) output p1l; (* LOC="P5" *) output p2h; (* LOC="P6" *) output p2l; (* LOC="P7" *) output p3h; (* LOC="P8" *) output p3l; wire clk; GP_LFOSC #( .AUTO_PWRDN(0), .OUT_DIV(1) ) osc ( .CLKOUT(clk) ); localparam DIVIDER = 1;//400; reg [13:0] divcnt = DIVIDER; always @(posedge clk) if(divcnt == 0) divcnt <= DIVIDER; else divcnt <= divcnt - 1; wire reset; GP_POR por( .RST_DONE(reset) ); reg [2:0] state; always @(posedge divcnt or negedge reset) if(!reset) state <= 0; else case(state) 0: state <= 1; 1: state <= 2; 2: state <= 3; 3: state <= 4; 4: state <= 5; 5: state <= 0; endcase reg [5:0] phases; always @(*) begin phases <= 6'b000000; case(state) 0: phases <= 6'b100100; 1: phases <= 6'b000110; 2: phases <= 6'b010010; 3: phases <= 6'b011000; 4: phases <= 6'b001001; 5: phases <= 6'b100001; endcase end wire p1i, p2i, p3i; assign {p1i, p1l, p2i, p2l, p3i, p3l} = phases; assign {p1h, p2h, p3h} = ~{p1i, p2i, p3i}; endmodule