新聞中心

        EEPW首頁 > EDA/PCB > 設計應用 > 基于FPGA的串行接收模塊的設計

        基于FPGA的串行接收模塊的設計

        作者: 時間:2009-08-10 來源:網絡 收藏

        4 接收串行數據的軟件設計
        本方案采用的串行異步通信的幀格式為:1位起始位+5位數據位+1位停止位。經檢測與分析,如果已經確定異步通信的幀格式,那么每個字符就可以分別用固定的 7位數據表示。比如:字符‘ 0’:‘0000011’;字符‘ 1’:‘0100011’。其中第 1位數據‘ 0’為起始位,昀后 1位數據‘1’為停止位,中間 5位數據為數據位。例如:用串口調試助手軟件發送字符串‘100’,則會在 的 RxD引腳測得如圖 3的波形。其中, st1,st2,st3表示先后發送的 3個字符, t1,t2,t3則表示對每個字符進行檢測時所經過的 3種狀態。
        正如圖3波形所示,接收邏輯首先通過檢測輸入數據的下降沿來檢查起始位。然后產生接收時鐘,利用接收時鐘來采樣串行輸入數據。由于字符‘0’和‘1’在5位數據位中的僅第一位有區別,因此只要準確地將第一位數據檢測出來就可以得出串口調試助手所發送的字符串。再利用移位操作,將字符串存儲在緩存器(即另一組可以更新的字符串)中。


        至于剩下的4位數據位和一位停止位,就可以不隨接收時鐘采樣。待串口調試組手發送的字符串全部存儲之后,一起在該中進行判斷,并根據字符串的不同來控制不同的輸出。接收時鐘是根據數據傳輸的波特率產生的:接收時鐘= 16×19200Hz。它始于起始位的下降沿,終于第5位數據位的上升沿。下面是實現檢測第1個字符的VHDL源程序。


        if(clk0'event and clk0='1')then ----外部時鐘
        case state is
        when st1=> ----第1 個字符開始
        case tate is
        when t1=> ----起始位開始
        if(rxd='1')then ----未到下降沿不計數
        cnt16 = 0000;
        cnt48 = 000000; ----所有時鐘清零
        else cnt16 =cnt16+1; ----下降沿來,起始位計數開始
        end if;
        if(cnt16=1111)then
        tate = t2; ----起始位完,進入數據位
        end if;
        when t2=> ----進入第1 位數據位
        if(cnt16=1111)then
        cnt16 = 0000;
        else cnt16 = cnt16+1;
        end if;
        if(cnt16=0011)then
        sdata = rxd; ----采樣第1 位數據位
        end if;
        if(cnt16=0111)then
        if(sdata='0')then
        data(0)='0';
        else data(0)='1'; ----判斷采樣值,如果為0,則發送字符為0,
        反之亦然
        end if;
        end if;
        if(cnt16=1111)then
        tate = t3; ----第1 位數據位完,進入下一狀態
        end if;
        when t3=> ----進入第2 位,第3 位和第4 位數據狀態
        if(cnt16=1111)then

        cnt48 = 000000;
        else cnt48 = cnt48+1; ----不對剩下的數據采樣,直接計數
        end if;
        if(cnt48=101111)then
        sdata ='0'; ----采樣位清零
        tate = t1; ----進入采集下一字符的準備狀態
        state = st2; ----第1 個字符采集完,進入下一字符
        end if;
        end case;
        fdata(0) = data(0); ----采集完的字符存入緩存區
        …… …… ……



        關鍵詞: FPGA 串行接收 模塊

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 邓州市| 荔波县| 牡丹江市| 武义县| 丹寨县| 泾川县| 黑河市| 平湖市| 南溪县| 汕头市| 郯城县| 枝江市| 清丰县| 平和县| 云龙县| 孝感市| 潞城市| 潞西市| 营口市| 晴隆县| 台湾省| 博白县| 霍城县| 乐清市| 高唐县| 沙湾县| 襄垣县| 胶州市| 广昌县| 余干县| 雷州市| 金川县| 临澧县| 会东县| 大新县| 渝中区| 淮滨县| 莱州市| 棋牌| 库车县| 衡阳市|