关于特权的串口程序有个疑问
时间:10-02
整理:3721RD
点击:
UART_RX模块
if(clk_bps) begin //读取并保存数据,接收数据为一个起始位,8bit数据,1或2个结束位
num <= num+1'b1;
case (num)
4'd1: rx_temp_data[0] <= rs232_rx; //锁存第0bit
4'd2: rx_temp_data[1] <= rs232_rx; //锁存第1bit
4'd3: rx_temp_data[2] <= rs232_rx; //锁存第2bit
4'd4: rx_temp_data[3] <= rs232_rx; //锁存第3bit
4'd5: rx_temp_data[4] <= rs232_rx; //锁存第4bit
4'd6: rx_temp_data[5] <= rs232_rx; //锁存第5bit
4'd7: rx_temp_data[6] <= rs232_rx; //锁存第6bit
4'd8: rx_temp_data[7] <= rs232_rx; //锁存第7bit
default: ;
endcase
end
以上程序中,为何数据位是从num=1开始的呢?
当clk_bps=1是表示计数到第一位的中间信号,随即num=num+1,总觉得当num=1时是起始位。
如果num=1时表示第一位数据位成立的话,那么与下面的程序是不是有点矛盾?
num==12时清零,在这里num=1好像是起始位。
else if(num == 4'd12) begin //我们的标准接收模式下只有1+8+1(2)=11bit的有效数据
num <= 4'd0; //接收到STOP位后结束,num清零
rx_data_r <= rx_temp_data; //把数据锁存到数据寄存器rx_data中
end
end
if(clk_bps) begin //读取并保存数据,接收数据为一个起始位,8bit数据,1或2个结束位
num <= num+1'b1;
case (num)
4'd1: rx_temp_data[0] <= rs232_rx; //锁存第0bit
4'd2: rx_temp_data[1] <= rs232_rx; //锁存第1bit
4'd3: rx_temp_data[2] <= rs232_rx; //锁存第2bit
4'd4: rx_temp_data[3] <= rs232_rx; //锁存第3bit
4'd5: rx_temp_data[4] <= rs232_rx; //锁存第4bit
4'd6: rx_temp_data[5] <= rs232_rx; //锁存第5bit
4'd7: rx_temp_data[6] <= rs232_rx; //锁存第6bit
4'd8: rx_temp_data[7] <= rs232_rx; //锁存第7bit
default: ;
endcase
end
以上程序中,为何数据位是从num=1开始的呢?
当clk_bps=1是表示计数到第一位的中间信号,随即num=num+1,总觉得当num=1时是起始位。
如果num=1时表示第一位数据位成立的话,那么与下面的程序是不是有点矛盾?
num==12时清零,在这里num=1好像是起始位。
else if(num == 4'd12) begin //我们的标准接收模式下只有1+8+1(2)=11bit的有效数据
num <= 4'd0; //接收到STOP位后结束,num清零
rx_data_r <= rx_temp_data; //把数据锁存到数据寄存器rx_data中
end
end
接收到了起始位时,clk_bps=1时,num采用阻塞赋值 因此起始位没有储存
程序里面“num <= num+1'b1 ”这不是非阻塞赋值吗
第0位没有数据,只是个起始位
谢谢大家!
楼上的,能说清楚一些吗?我是个初学者。摆脱了~
请问当clk_bps=1时,不就是在起始位的中间吗,此时num<=num+1,为何num=1时,是在数据位呢?
是啊,但是在退出always之前,num还是0啊
