美文网首页
Uart接收状态机设计

Uart接收状态机设计

作者: 海青简书号 | 来源:发表于2019-05-28 16:29 被阅读0次

使用一段式状态机,设计了一个uart接收器,采用16倍波特率采样,无奇偶校验。

状态转移表 仿真输出图,串口数据0x55
module uart_rx_fsm(clk_16,rx,data_out,ready);
    input clk_16,rx;
    output reg [7:0] data_out;
    output reg ready;
    
    reg[2:0] state;
    reg[3:0] count;
    reg[2:0] bits;
    reg[7:0] buffer;
    
    parameter IDLE = 0; //空闲状态
    parameter WAIT_S0 =1;//等待起始位中点
    parameter CHECK_S0 = 2;//复核起始位
    parameter WAIT_BIT = 3;//等待数据位中点
    parameter STORE_BIT = 4;//存储数据位
    parameter WAIT_STOP = 5;//等待停止位中点
    parameter CHECK_STOP = 6;//检查停止位是否正确
    
    always @(posedge clk_16)begin
        case(state)
            IDLE:begin count<=0;bits<=0;ready<=0;
                if (rx)     state<=IDLE;
                else        state <= WAIT_S0;
            end
            
            WAIT_S0:begin count <= count+1'd1;bits<=0;ready<=0;
                if(count == 6) state <= CHECK_S0;
                else                state <= WAIT_S0;
            end
            
            CHECK_S0:begin count<=0;bits<=0;ready<=0;
                if (rx)     state<=IDLE;
                else        state <= WAIT_BIT;
            end
            
            WAIT_BIT:begin count <= count+1'd1;ready<=0;
                if(count== 14) state <= STORE_BIT;
                else                state <= WAIT_BIT;
            end
            
            STORE_BIT:begin count <= 0;bits<=bits+1'd1;ready<=0; buffer[bits]<= rx;
                if(bits ==7) state <= WAIT_STOP;
                else state<=WAIT_BIT;               
            end
            
            WAIT_STOP:begin count <= count+1'd1;bits<=0;ready<=0;
                if(count == 14) state <= CHECK_STOP;
                else                state <= WAIT_STOP;
            end
            
            CHECK_STOP:begin count <= 0;bits<=0; state<=IDLE;               
                if(rx) begin data_out <= buffer;ready<=1; end
                else    ready<= 0;
            end
            default:state<=IDLE;
        endcase
    end 
endmodule 

相关文章

  • Uart接收状态机设计

    使用一段式状态机,设计了一个uart接收器,采用16倍波特率采样,无奇偶校验。

  • UART接收器设计

  • FPGA——理解UART

    UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。 在嵌入式设计中,UART...

  • 2017 .12.12

    今天上午学习了Uart串行异步通信 UART.any() # 返回缓冲区中接收的字符数 UART.read([nb...

  • 12/20

    stm32f407接收串口数据 : void UART1_config(void) { GPIO_InitType...

  • 路径规划--连接GPS接收端

    从淘宝上入手的GPS接收端U-BLOX M8N,带UART串口连接线。 一.打开树莓派上的UART串口通信 1.下...

  • MSP430 UART 测试程序

    程序1解释 1.P3端口对应着UART模块的端口复用,其中P3.4和P3.5如果要作为UART的发送和接收端口,需...

  • 2018-07-25 关于STM32使用中遇到若干问题小结

    一、定义UART引脚后不及时初始化UART外设,则RS232不断接收到0x00而改用RS485 根据STM32中文...

  • STM32:HAL_UART_Receive_IT接收多字符

    把HAL_UART_Receive_IT放在串口全局中断里,可以接收指定长度的字符串,并在接收完成之后产生中断。在...

  • 12.13

    UART通信中硬件握手为先接收再发送至下一命令,接收数据更快更方便。SPI串行通信MASTER主设备、 SLAVE...

网友评论

      本文标题:Uart接收状态机设计

      本文链接:https://www.haomeiwen.com/subject/vamdtctx.html