# fsic_coreclk_phase_cnt.v - there are 4 ioclks in a core clock. - output ioclk count from 0 to 3 ![](https://hackmd.io/_uploads/ryNjeoiF3.png) ## Code ``` module fsic_coreclk_phase_cnt#( parameter pCLK_RATIO =4 ) ( input axis_rst_n, input ioclk, input coreclk, output [$clog2(pCLK_RATIO)-1:0] phase_cnt_out ); assign phase_cnt_out = phase_cnt; reg core_clk_toggle; always @(posedge coreclk or negedge axis_rst_n) begin if ( !axis_rst_n ) begin core_clk_toggle <= 0; end else begin core_clk_toggle <= ~core_clk_toggle; end end reg [pCLK_RATIO-1:0] clk_seq; reg [$clog2(pCLK_RATIO)-1:0] phase_cnt; always @(posedge ioclk or negedge axis_rst_n) begin if ( !axis_rst_n ) begin clk_seq <= 0; end else begin clk_seq[pCLK_RATIO-1:1] <= clk_seq[pCLK_RATIO-2:0]; clk_seq[0] <= core_clk_toggle; end end always @(posedge ioclk or negedge axis_rst_n) begin if ( !axis_rst_n) begin phase_cnt <= 0; end else begin if ( (clk_seq == 4'h8) || (clk_seq == 4'h7) ) phase_cnt <= 0; else phase_cnt <= phase_cnt + 1; end end endmodule ```