zoukankan      html  css  js  c++  java
  • verilog HDL 串口接受程序

    module myuart_rece(
        input Gclk,                     //system clock 
        input rst_n,              //glabol reset signal
        input rx,                 //serical data in
        output reg tx,             //serical data out
        output reg DataReady,        //a complete byte has been received
        output reg[7:0] DataReceived,   //Bytes received
        output reg gnd=1'b0         //可以不写
    );
    
    /* general sample clock  50MHz分频成3.125MHz*/
    reg[7:0] count;
    reg clk16x; //sample clock
    always@(posedge Gclk or posedge rst_n)
        if(rst_n) 
            begin
                count<=8'd0;
                clk16x<=1'b0;
            end
        else if(count>=8'd125)
            begin
                count<=8'd0;
                clk16x <= ~clk16x;
            end
        else count<=count+1'b1; 
            
    /*how to find the negedge*/
    reg trigger_r0;
    wire neg_tri;
    always@(posedge clk16x or posedge rst_n)
        begin
            if(rst_n) trigger_r0<=1'b0;
            else trigger_r0<=rx;
        end
    assign neg_tri = trigger_r0 & ~rx;
    
    /* counter control*/
    reg cnt_en;
    always@(posedge Gclk or posedge rst_n)
        begin
            if(rst_n) cnt_en<=1'b0;
            else if(neg_tri==1'b1) cnt_en<=1'b1;
            else if(cnt==8'd152) cnt_en<=1'b0;
        end
        
    /* counter module*/
    reg[8:0] cnt;
    always@(posedge clk16x or posedge rst_n)
        begin
            if(rst_n) cnt<=8'd0;
            else if(cnt_en) cnt<=cnt+1'b1;
            else cnt<=8'd0;
        end
    /* receive module*/
    reg StopBit_r;
    always@(posedge clk16x or posedge rst_n)
        begin
            if(rst_n) 
                begin
                    DataReceived<=8'b0;
                    tx <= 1'b1;
                end
            else if(cnt_en)
                case(cnt)
                    9'd24: DataReceived[0] <= rx;
                    9'd40: DataReceived[1] <= rx;
                    9'd56: DataReceived[2] <= rx;
                    9'd72: DataReceived[3] <= rx;
                    9'd88: DataReceived[4] <= rx;
                    9'd104: DataReceived[5] <= rx;
                    9'd120: DataReceived[6] <= rx; 
                    9'd136: DataReceived[7] <= rx;
                
                endcase
        end
    //判断接受结束    
    always@(posedge Gclk or posedge rst_n)
        begin
            if(rst_n) DataReady<=1'b1;
            else if(cnt>=8'd152) DataReady<=1'b0;
            else DataReady<=1'b1;
        end
    endmodule
    //
  • 相关阅读:
    【OpenCV】图像转成YUV420 I420格式
    【AdaBoost算法】强分类器训练过程
    【AdaBoost算法】弱分类器训练过程
    C# 8小特性
    string.PadLeft & string.PadRight
    string.Format对C#字符串格式化
    多线程调用同一个方法,局部变量会共享吗
    基于C#net4.5websocket客户端与服务端
    使用websocket-sharp来创建c#版本的websocket服务
    原来你是这样的Websocket--抓包分析
  • 原文地址:https://www.cnblogs.com/Mungbohne/p/4374910.html
Copyright © 2011-2022 走看看