| /*Down clocking module | |
| Output clock frequency is the original frequency divided by an even number | |
| */ | |
| module down_clocking_even( | |
| input clk_i, | |
| input rst_ni, | |
| input [15:0]i_divisor, | |
| output o_clk | |
| ); | |
| wire [15:0]divisor; | |
| wire borrow; | |
| minus_one minus_one_0( | |
| .i_operand(i_divisor), | |
| .o_result(divisor), | |
| .o_borrow(borrow) | |
| ); | |
| wire go; | |
| assign go=((i_divisor!=0)&&rst_ni); | |
| reg [15:0]ct; | |
| reg clk; | |
| always@(posedge clk_i ) | |
| if(!rst_ni)begin | |
| ct<=0; | |
| clk<=0; | |
| end | |
| else if(go)begin | |
| if(ct>=divisor)begin | |
| ct<=0; | |
| clk<=~clk; | |
| end | |
| else ct<=ct+1; | |
| end | |
| assign o_clk=go?clk:clk_i; | |
| endmodule |