新聞中心

        EEPW首頁 > EDA/PCB > 設(shè)計應(yīng)用 > 基于串口通訊的Verilog設(shè)計

        基于串口通訊的Verilog設(shè)計

        作者: 時間:2012-09-03 來源:網(wǎng)絡(luò) 收藏

        else begin

        counter=0;

        state=s0;

        end

        end

        s1:if(!din)//如果是0的話,轉(zhuǎn)入s2狀態(tài),提取八位有效數(shù)據(jù)

        state=s2;

        else //否則轉(zhuǎn)到s0狀態(tài)重新檢測

        state=s0;

        s2:if(cnt3==3)//是否采集四次數(shù)據(jù)

        begin

        cnt2=0;

        indata_buf[bitpos]=din; //先進(jìn)來的是高位數(shù)據(jù)

        bitpos=bitpos-1;

        if(bitpos==-1)

        begin

        bitpos=7;state=s3;end

        end

        else cnt3=cnt3+1;

        s3:begin

        tag1=tag;

        tag=1'b1; //標(biāo)志輸入寄存器滿。表明已把有用數(shù)據(jù)裝入寄存器

        if(tag~tag1)txdone) //檢測到tag的上升沿以及txdone為高才把輸入緩沖數(shù)據(jù)放到輸出緩沖去

        dout_buf={1'b1,indata_buf[7:0],1'b0};//停止位,高位,低位,起始位

        state=s0;

        end

        endcase

        end

        //***********發(fā)送數(shù)據(jù)模塊

        reg[3:0] state_tx=0;

        always@(posedge txclk or posedge rst)

        begin

        if(rst)

        begin

        dout_ser=1'bz;

        state_tx=0;

        txdone=1;

        end

        else

        case(state_tx)

        0:begin

        dout_ser=dout_buf[0];state_tx=state_tx+1;txdone=1'b0;end

        1:begin

        dout_ser=dout_buf[1];state_tx=state_tx+1;end

        2:begin

        dout_ser=dout_buf[2];state_tx=state_tx+1;end

        3:begin

        dout_ser=dout_buf[3];state_tx=state_tx+1;end

        4:begin

        dout_ser=dout_buf[4];state_tx=state_tx+1;end

        5:begin

        dout_ser=dout_buf[5];state_tx=state_tx+1;end

        6:begin

        dout_ser=dout_buf[6];state_tx=state_tx+1;end

        7:begin

        dout_ser=dout_buf[7];state_tx=state_tx+1;end

        8:begin

        dout_ser=dout_buf[8];state_tx=state_tx+1;end

        9:begin

        dout_ser=dout_buf[9];state_tx=state_tx+1;end

        endcase

        end

        endmodule

        注:兩個頻率信號nclk、txclk由相應(yīng)的分頻程序產(chǎn)生。由于篇幅所限未在文中列出。

        FPGA模塊接收從RS-485發(fā)送過來的串行數(shù)據(jù)。25位為一個字符。數(shù)據(jù)的傳輸速率是700kbps,用四倍于波特率的速率進(jìn)行采樣,這樣可以大大降低系統(tǒng)的噪聲。數(shù)據(jù)的串行輸出波特率選為11200bps。

        由輸入輸出波形圖可以看出:本段程序?qū)崿F(xiàn)了對輸入數(shù)據(jù)的有效數(shù)據(jù)位的提取,并按照一定的波特率進(jìn)行串行輸出。程序中,波特率可以根據(jù)需要通過分頻程序進(jìn)行改動。硬件電路搭建簡單,程序代碼書寫容易。數(shù)據(jù)傳輸穩(wěn)定可靠,可以滿足串口通信的要求。


        上一頁 1 2 3 下一頁

        關(guān)鍵詞: Verilog 串口通訊

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 丰台区| 枣强县| 游戏| 柘荣县| 体育| 内黄县| 静宁县| 老河口市| 迁西县| 北票市| 广昌县| 璧山县| 瓮安县| 南溪县| 宜宾县| 宜宾市| 安顺市| 鲁甸县| 平安县| 红河县| 濮阳市| 万年县| 唐山市| 吴忠市| 登封市| 巴林左旗| 教育| 雅江县| 康保县| 渝中区| 庐江县| 罗甸县| 延吉市| 郴州市| 阿合奇县| 明溪县| 东莞市| 秦安县| 灌南县| 宝丰县| 思茅市|