| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- module baud_gen (
- input clk,
- input rstn,
- input [15:0] ibrd,
- input [5:0] fbrd,
- input stop,
- output reg baud16
- );
- reg [15:0] i_cnt;
- reg [5:0] f_cnt;
- reg f_del;
- wire [5:0] f_rev = { f_cnt[0], f_cnt[1], f_cnt[2], f_cnt[3], f_cnt[4], f_cnt[5] };
- always @(posedge clk or negedge rstn) begin
- if (!rstn) begin
- i_cnt <= 16'h1;
- end else if (stop || !f_del && i_cnt == 1 || i_cnt == 0) begin
- i_cnt <= ibrd;
- end else begin
- i_cnt <= i_cnt - 1;
- end
- end
- always @(posedge clk or negedge rstn) begin
- if (!rstn) begin
- f_cnt <= 6'h0;
- end else if (stop) begin
- f_cnt <= 6'h0;
- end else if (baud16) begin
- f_cnt <= f_cnt + 1;
- end
- end
- always @(posedge clk or negedge rstn) begin
- if (!rstn) begin
- baud16 <= 1'b0;
- end else if (!stop && (!f_del && i_cnt == 1 || i_cnt == 0)) begin
- baud16 <= 1'b1;
- end else begin
- baud16 <= 1'b0;
- end
- end
- always @(posedge clk or negedge rstn) begin
- if (!rstn) begin
- f_del <= 1'b0;
- end else if (f_rev < fbrd) begin
- f_del <= 1'b1;
- end else begin
- f_del <= 1'b0;
- end
- end
- always @(posedge clk or negedge rstn) begin
- if (!rstn) begin
- end
- end
- endmodule
|