UART接收器設(shè)計

時序圖
狀態(tài)轉(zhuǎn)移表
//采用16倍波特率的時鐘信號,在每個位的中間時刻進(jìn)行采樣
module UartRecv(input Clk_x,DataIn,output reg [7:0]DataOut,output reg DataReady);
    
    // BitRate = Clk_x / (Multi+1)
    parameter Multi = 4'b1111;
    // State Parameter
    parameter Idle = 2'd0;
    parameter Recv = 2'd1;
    parameter CheckByte = 2'd2;
    parameter CheckStop = 2'd3;
    
    reg [3:0] ClkCount;
    reg [3:0] BitCount;
    reg [1:0] State;
    reg [8:0] Buffer;
    
    always @(posedge Clk_x)
    begin
        if(State == Idle)
        begin
            BitCount <=0;
            Buffer <=0;
            DataReady <=0;
            
            if(DataIn == 1)
            begin
                ClkCount <=0;               
                State <= Idle;
            end
            else // if(DataIN == 0)
            begin               
                if(ClkCount ==7)
                begin
                    ClkCount <=0;
                    State <= Recv;
                end
                else// if (ClkCount <7)
                begin
                    ClkCount <= ClkCount+1'd1;              
                    State <= Idle;
                end                 
            end
        end
        else if(State == Recv)
        begin
            ClkCount<=ClkCount+1'b1;    
            DataReady <=0;
                    
            if (ClkCount==15) 
            begin
                BitCount <= BitCount+1'b1;
                Buffer[BitCount]<=DataIn;
                State <= CheckByte;
            end
            else State <= Recv;
        end
        else if(State == CheckByte)
        begin
            ClkCount<=ClkCount+1'b1;            
            if (BitCount==9) State <= CheckStop;
            else State <= Recv;
        end
        else if(State == CheckStop)
        begin   
            State <= Idle;
                    
            if (DataIn==1) 
            begin
                DataOut<=Buffer[7:0];
                DataReady <=1;
            end
        end
    end
endmodule
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容