142 lines
4.1 KiB
Coq
142 lines
4.1 KiB
Coq
|
module clk_gen(
|
||
|
input rstn,
|
||
|
input clk,
|
||
|
output clk_div16_0,
|
||
|
output clk_div16_1,
|
||
|
output clk_div16_2,
|
||
|
output clk_div16_3,
|
||
|
output clk_div16_4,
|
||
|
output clk_div16_5,
|
||
|
output clk_div16_6,
|
||
|
output clk_div16_7,
|
||
|
output clk_div16_8,
|
||
|
output clk_div16_9,
|
||
|
output clk_div16_a,
|
||
|
output clk_div16_b,
|
||
|
output clk_div16_c,
|
||
|
output clk_div16_d,
|
||
|
output clk_div16_e,
|
||
|
output clk_div16_f,
|
||
|
|
||
|
output clk_h,
|
||
|
output clk_l
|
||
|
);
|
||
|
|
||
|
reg [3:0] cnt_ini;
|
||
|
always@(posedge clk or negedge rstn)
|
||
|
if(!rstn)
|
||
|
cnt_ini <= 4'd0;
|
||
|
else if(cnt_ini <= 4'd7)
|
||
|
cnt_ini <= cnt_ini + 4'd1;
|
||
|
else
|
||
|
cnt_ini <= cnt_ini;
|
||
|
wire div_en;
|
||
|
assign div_en = (cnt_ini ==4'd8)? 1'b1:1'b0;
|
||
|
|
||
|
reg [3:0] cnt_0;
|
||
|
reg [3:0] cnt_1;
|
||
|
reg [3:0] cnt_2;
|
||
|
reg [3:0] cnt_3;
|
||
|
reg [3:0] cnt_4;
|
||
|
reg [3:0] cnt_5;
|
||
|
reg [3:0] cnt_6;
|
||
|
reg [3:0] cnt_7;
|
||
|
reg [3:0] cnt_8;
|
||
|
reg [3:0] cnt_9;
|
||
|
reg [3:0] cnt_a;
|
||
|
reg [3:0] cnt_b;
|
||
|
reg [3:0] cnt_c;
|
||
|
reg [3:0] cnt_d;
|
||
|
reg [3:0] cnt_e;
|
||
|
reg [3:0] cnt_f;
|
||
|
|
||
|
always@(posedge clk or negedge rstn)
|
||
|
if(!rstn) begin
|
||
|
cnt_0 <= 4'h0;
|
||
|
cnt_1 <= 4'h1;
|
||
|
cnt_2 <= 4'h2;
|
||
|
cnt_3 <= 4'h3;
|
||
|
cnt_4 <= 4'h4;
|
||
|
cnt_5 <= 4'h5;
|
||
|
cnt_6 <= 4'h6;
|
||
|
cnt_7 <= 4'h7;
|
||
|
cnt_8 <= 4'h8;
|
||
|
cnt_9 <= 4'h9;
|
||
|
cnt_a <= 4'ha;
|
||
|
cnt_b <= 4'hb;
|
||
|
cnt_c <= 4'hc;
|
||
|
cnt_d <= 4'hd;
|
||
|
cnt_e <= 4'he;
|
||
|
cnt_f <= 4'hf;
|
||
|
end
|
||
|
else if(div_en) begin
|
||
|
cnt_0 <= cnt_0 + 4'd1;
|
||
|
cnt_1 <= cnt_1 + 4'd1;
|
||
|
cnt_2 <= cnt_2 + 4'd1;
|
||
|
cnt_3 <= cnt_3 + 4'd1;
|
||
|
cnt_4 <= cnt_4 + 4'd1;
|
||
|
cnt_5 <= cnt_5 + 4'd1;
|
||
|
cnt_6 <= cnt_6 + 4'd1;
|
||
|
cnt_7 <= cnt_7 + 4'd1;
|
||
|
cnt_8 <= cnt_8 + 4'd1;
|
||
|
cnt_9 <= cnt_9 + 4'd1;
|
||
|
cnt_a <= cnt_a + 4'd1;
|
||
|
cnt_b <= cnt_b + 4'd1;
|
||
|
cnt_c <= cnt_c + 4'd1;
|
||
|
cnt_d <= cnt_d + 4'd1;
|
||
|
cnt_e <= cnt_e + 4'd1;
|
||
|
cnt_f <= cnt_f + 4'd1;
|
||
|
end
|
||
|
else begin
|
||
|
cnt_0 <= cnt_0;
|
||
|
cnt_1 <= cnt_1;
|
||
|
cnt_2 <= cnt_2;
|
||
|
cnt_3 <= cnt_3;
|
||
|
cnt_4 <= cnt_4;
|
||
|
cnt_5 <= cnt_5;
|
||
|
cnt_6 <= cnt_6;
|
||
|
cnt_7 <= cnt_7;
|
||
|
cnt_8 <= cnt_8;
|
||
|
cnt_9 <= cnt_9;
|
||
|
cnt_a <= cnt_a;
|
||
|
cnt_b <= cnt_b;
|
||
|
cnt_c <= cnt_c;
|
||
|
cnt_d <= cnt_d;
|
||
|
cnt_e <= cnt_e;
|
||
|
cnt_f <= cnt_f;
|
||
|
|
||
|
end
|
||
|
|
||
|
assign clk_div16_0 = cnt_0[3];
|
||
|
assign clk_div16_1 = cnt_1[3];
|
||
|
assign clk_div16_2 = cnt_2[3];
|
||
|
assign clk_div16_3 = cnt_3[3];
|
||
|
assign clk_div16_4 = cnt_4[3];
|
||
|
assign clk_div16_5 = cnt_5[3];
|
||
|
assign clk_div16_6 = cnt_6[3];
|
||
|
assign clk_div16_7 = cnt_7[3];
|
||
|
assign clk_div16_8 = cnt_8[3];
|
||
|
assign clk_div16_9 = cnt_9[3];
|
||
|
assign clk_div16_a = cnt_a[3];
|
||
|
assign clk_div16_b = cnt_b[3];
|
||
|
assign clk_div16_c = cnt_c[3];
|
||
|
assign clk_div16_d = cnt_d[3];
|
||
|
assign clk_div16_e = cnt_e[3];
|
||
|
assign clk_div16_f = cnt_f[3];
|
||
|
|
||
|
|
||
|
reg [3:0] cnt_div16;
|
||
|
always@(posedge clk_div16_0 or negedge rstn)
|
||
|
if(!rstn)
|
||
|
cnt_div16 <= 4'd0;
|
||
|
else if(div_en)
|
||
|
cnt_div16 <= cnt_div16 + 4'd1;
|
||
|
else
|
||
|
cnt_div16 <= cnt_div16;
|
||
|
|
||
|
|
||
|
assign clk_h = clk_div16_0;
|
||
|
assign clk_l = cnt_div16[0];
|
||
|
|
||
|
endmodule
|