微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于特权的串口程序有个疑问

关于特权的串口程序有个疑问

时间: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

接收到了起始位时,clk_bps=1时,num采用阻塞赋值  因此起始位没有储存

程序里面“num <= num+1'b1 ”这不是非阻塞赋值吗

第0位没有数据,只是个起始位

谢谢大家!
楼上的,能说清楚一些吗?我是个初学者。摆脱了~
请问当clk_bps=1时,不就是在起始位的中间吗,此时num<=num+1,为何num=1时,是在数据位呢?



是啊,但是在退出always之前,num还是0啊

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top