下面是串口接收代码。实际运行时,发现i有时候会从10跳变为2或8,但程序中却没有这样的语句,让人百思不得其解。
module UARTReceiver #(
parameter SYSCLK = 50000000
)(
input clock, // 系统时钟
input nrst, // 模块复位
input rx, // 串口接收引脚
input [23:0] baud_rate, // 波特率
output reg received, // 是否收到了数据
output reg [7:0] data // 收到的数据内容 (received信号为上升沿或者高电平时才可以读取)
);
wire _rx = rx;
integer counter; // 波特率计数器
reg [3:0] bit_i; // 当前正在接收第几位数据 (0为起始位, 1-8为数据位, 9为停止位, 10为空闲)
wire bit_sample = (counter == SYSCLK / baud_rate / 2 - 1); // 采样信号
wire bit_end = (counter == SYSCLK / baud_rate - 1); // 位结束信号
// 接收数据
always @(posedge clock, negedge nrst) begin
if (!nrst) begin
// 模块复位
bit_i |