57 lines
1.2 KiB
Coq
57 lines
1.2 KiB
Coq
|
module uart_tx (
|
||
|
input wire clk,
|
||
|
input wire rst_n,
|
||
|
input wire tx_en,
|
||
|
input wire tx_start,
|
||
|
input wire [7:0] tx_data,
|
||
|
output reg uart_busy,
|
||
|
output reg tx;
|
||
|
);
|
||
|
|
||
|
|
||
|
reg [7:0] tx_reg;
|
||
|
reg [4:0] tx_cnt;
|
||
|
|
||
|
always @(posedge clk or negedge rst_n or posedge tx_start) begin
|
||
|
if (~rst_n) begin
|
||
|
tx <= 1'b1;
|
||
|
tx_reg <= 8'd0;
|
||
|
tx_cnt <= 5'd0;
|
||
|
uart_busy <= 1'b0;
|
||
|
end
|
||
|
else if(tx_start) begin
|
||
|
if(tx_cnt == 0) begin
|
||
|
tx_reg <= tx_data;
|
||
|
tx_cnt <= 4'd10;
|
||
|
uart_busy <= 1'b1;
|
||
|
end
|
||
|
else begin
|
||
|
tx_cnt <= tx_cnt;
|
||
|
end
|
||
|
end
|
||
|
|
||
|
else begin
|
||
|
if(tx_cnt > 0) begin
|
||
|
if(tx_cnt == 4'd10) begin
|
||
|
tx <= 1'b0;
|
||
|
end
|
||
|
else if(tx_cnt > 4'd1) begin
|
||
|
tx <= tx_reg[0];
|
||
|
tx_reg <= tx_reg >> 1;
|
||
|
end
|
||
|
else begin
|
||
|
tx <= 1'b1;
|
||
|
|
||
|
end
|
||
|
tx_cnt <= tx_cnt - 1;
|
||
|
end
|
||
|
else begin
|
||
|
tx_cnt <= tx_cnt;
|
||
|
tx <= 1'b1;
|
||
|
uart_busy <= 1'b0;
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|
||
|
endmodule //uart_tx
|