使用Verilog代码编写的USART发送程序:
数据位8位,停止位1位,校验位没有,流控没有
波特率由波特率模块生成
串口时序大致如下图所示:
module uart_trans(GClk,clk_bps,reset,tx_en,datain,Txd,tx_ok);
input GClk,clk_bps,reset,tx_en;//全局时钟,波特率时钟,全局复位,发送启动信号
input [7:0]datain;
output Txd,tx_ok;
//tx_en:__/^\____________________
wire clk_bps;
reg Txd,tx_ok;
reg [7:0]data;//数据缓存
reg [3:0]BitPos;//状态位
reg tx_en0,tx_en1,tx_en2; //rx_int信号寄存器,捕捉下降沿滤波用
always @ (posedge GClk or negedge reset)
if(!reset) begin
tx_en0 <= 1'b0;
tx_en1 <= 1'b0;
tx_en2 <= 1'b0;
end
else begin
tx_en0 <= tx_en;
tx_en1 <= tx_en0;