FPGA,串口通信,always语句块实现tx串口

📅 2026/7/5 21:13:46
FPGA,串口通信,always语句块实现tx串口
timescale 1ns / 1ps /端口 module tx( input sysclk , input rst_n , input [7:0] data , //数据 input done ,//数据输入进来完成的信号 output tx , output tx_done //数据包装完成的信号 ); parameter BPS 9600;//波特率 parameter clk 50_000_000; parameter delay clk/BPS; reg en;//系统开始工作的使能信号 reg [31:0] cnt_clk; reg [9:0] cnt_bit;//数据计数器 reg [7:0] data_reg;//输入的数据寄存起来 reg tx_reg;//包装完成的数据 wire flag; //en always(posedge sysclk) if(!rst_n) en0; else if(done1) en1; else if(cnt_bit9cnt_clkdelay/2-1) en0; else enen; //cnt_clk always(posedge sysclk) if(!rst_n) cnt_clk0; else if(en1)begin//en拉高表示工作时间传输数据 if(cnt_clkdelay-1)//传输一位bit的时钟周期 cnt_clk0; else cnt_clkcnt_clk1; end else//en没有拉高 不工作 cnt_clk0; //bit计数器模块 always(posedge sysclk) if(!rst_n) cnt_bit0; else if(en1)begin if(cnt_clkdelay-1) //传输一个bit到了 计数器开始自加 cnt_bitcnt_bit1; else cnt_bitcnt_bit; end else cnt_bit0; //data_reg always(posedge sysclk) if(!rst_n) data_reg0; else if(done1) data_regdata; else data_regdata_reg; /_reg always(posedge sysclk) if(!rst_n) tx_reg1;//不工作没数据时需要给高电平 else if(en1)begin if(cnt_bit0) tx_reg0; else if(cnt_bit9) tx_reg1; else tx_regdata_reg[cnt_bit-1]; end else tx_reg1; assign tx_done (cnt_bit9cnt_clkdelay/2-1)?1:0; assign tx tx_reg; endmodule