verilog语言实现uart通信的思路

张开发
2026/5/11 20:15:52 15 分钟阅读

分享文章

verilog语言实现uart通信的思路
uart(通用异步收发器)是一种串行、异步、全双工TX发送和RX接收独立操作的通信协议用于在 FPGA 与外部设备如 PC、微控制器、传感器等之间进行数据通信uart的数据通信格式为一个起始位、n个数据位(通常为8位即一个字节)、1个校验位、1个结束位其中校验位可以省略空闲位当总线空闲时信号线状态为1即高电平表示无数据传输起始位每次开始通信时发送方先发送一个0信号即低电平表示传输开始数据位一般8位数据位构成一个字符从低到高发送低电平为0高电平为1奇偶校验位数据位加上这一位使1的个数保持奇数奇校验或偶数偶校验须双方事先约定以此校验数据正确性可以省略停止位标志数据结束恢复信号线状态至1一般为1位或2位位时间传输每一位的时间间隔帧起始位到停止位的时间间隔波特率一秒传输位数常见9600bps、115200bps等取倒数得到位时间换算成纳秒数除去一个时钟周期的纳秒数得到传输1位所需的周期数因为通信双方没有共享时钟所以要约定波特率保证位时间在传输中段进行采值减少波动误差用周期计数器使能来控制这一过程计数到位时间中段进行采值verilog实现假设数据位8位、无校验位、波特率9600bps、时钟周期20ns即每次传输10位每一位传输1000000000/9600/20个周期接收模块RX逻辑顺序应为寄存器打两拍不断更新数据线数据第一次从高电平1转到低电平0时捕捉下降沿触发接收使能标志准备开始接收数据由时钟计数器循环计数计数到一半时将数据线数据赋给寄存变量从低到高每循环一次使数据位计数器1数据位计数器记满9从0到9共10位时在中段触发完成标志回收接收使能等待下一次接收完成标志使能触发8位数据赋给输出端口变量然后回收完成标志重置各变量1.设置端口输入端时钟信号clk、复位信号rstn、接收数据线rxd输出端完成标志rx_done、接收数据rx_data2.设置参量常量波特率bps9600、时钟计数上限bps_cnt1000000000/BPS/20、接收数据计数上限rx_cnt寄存器打两拍寄存器rx_d0、rx_d1、时钟计数器clk_cnt、数据位计数器rx_cnt、接收标志rx_flag、数据寄存rx_data_reg3.功能划分1寄存打两拍 2触发接收使能 3时钟周期计数 4数据位计数 5数据接收 6触发完成标志 7数据寄存发送模块TX逻辑顺序应为数据线维持高电平寄存器打两拍不断更新使能信号捕捉使能信号上升沿时触发发送使能标志读取8位数据寄存根据数据位计数器,将对应索引的数据赋给寄存变量0时赋值09时赋值1同时由时钟计数器循环计数每循环一次使数据位计数器1数据位计数器记满9从0到9共10位时在中段回收发送使能等待下一次发送1.设置端口输入端时钟信号clk、复位信号rstn、接收数据tx_data、使能信号tx_en输出端发送数据线txd2.设置参量常量波特率bps9600、时钟计数上限bps_cnt1000000000/BPS/20、发送数据计数上限tx_cnt寄存器打两拍tx_d0、tx_d1、时钟计数器clk_cnt、数据位计数器tx_cnt、发送标志tx_flag、数据寄存tx_data_reg3.功能划分1寄存打两拍 2触发发送使能 3数据寄存 4时钟周期计数 5数据位计数 6数据发送

更多文章