新聞中心

        EEPW首頁 > 手機與無線通信 > 設計應用 > 用VHDL設計專用串行通信芯片

        用VHDL設計專用串行通信芯片

        作者: 時間:2009-07-17 來源:網絡 收藏

        系統中,是整個硬件平臺的基礎,它不僅完成OSI物理層中的數據發送和接收,還能根據傳輸方式和協議的不同實現不同的數據校驗方式及數據組幀格式。

        本文引用地址:http://www.104case.com/article/157976.htm

        目前,許多廠商都提供通用的,其傳輸方式分為同步方式和異步方式。其中,異步大多與INTEL的8250芯片兼容;而同步方式,由于一般涉及到所支持的傳輸協議(BSC、HDLC、SDLC等),所以當用戶要求應用特定的同步傳輸協議時,往往需要的SRT(同步收發器)。以前,大多采用通用的邏輯元器件進行,這導致了和調試過程冗長、系統穩定性不高,非常不便。如今,隨著以FPGA和CPLD為代表的可編程ASIC技術的日趨成熟和完善,用戶完全可以根據自己的要求,以EDA技術作為開發手段,用一塊FPGA或CPLD設計出符合自己需要的芯片。本文以開發統計時分復用器中的同步收發芯片為例,介紹整個芯片的開發流程。

        1 統計時分復用器系統功能及模塊組成

        統計時分復用器完成7路異步數據和1路同步數據的復接工作,其功能框圖如圖1所示,同步串口傳輸協議如圖2所示。由于傳輸距離較近且路數不多,功能相對簡單。出于系統功耗和成本的考慮,將這個的SRT和整個接口控制單元集成到一塊CPLD(XC95144)中。

        2 CPLD內部功能框圖及設計

        CPLD 內部結構主要由接口控制單元和SRT組成,這里主要介紹一下SRT的結構和功能模塊(見圖3)。由于選用的UART(通用異步收發器)與INS8250兼容,為簡化主控單元訪問外部通信芯片的程序的編寫,統一操作流程,在SRT的設計上盡量模仿INS8250的結構。

        本設計采用模塊化設計。按功能將SRT內部結構發分為5個模塊,每一個模塊對應一個的設計文件。這樣設計的好處是有利于各功能模塊的編寫和調試,從而降低了整個SRT的調試難度,提高了軟件的可維護性及可讀性。下面給出各個設計文件的外功能簡介(對于其中幾個重要的模塊還列出了端口描述和部分實現代碼):

        (1)SRTCRTL.VHD

        SRTCRTL.VHD 作為SRT的控制模塊,負責地址譯碼,當片選信號有效時將數據線上的數據寫入相應的寄存器。SRT芯片內部共設有接收緩存器、發送保持器、線路控制寄存器、除數寄存器(高低8位各1個)、自環控制寄存器等6個控制寄存器,每個寄存器都被分配了1個地址,通過對相應地址進行讀寫,CPU可完成數據發送、接收、自環及芯片參數設置等操作。

        (2)LOOP.VHD

        本模塊的功能是根據用戶的指令,對芯片本身功能進行測試。用戶首先將芯片設置為自環狀態,使芯片內部發送數據線與直接接收數據線短接;再通過向發送保持器寫入特定的數據,與接收緩存器中讀出的數據進行比較,看兩者是否相同,用戶即可判斷芯片是否工作正常。

        (3)CLKGEN.VHD

        CLKGEN.VHD是波特率發生器模塊,用來產生發送同步的時鐘信號doclk。它將除數寄存器高低各8位共16位數據作為除數,對外部2MHz的時鐘源進行分頻。用戶可通過修改除數寄存器的值動態地改變數據傳輸速率,因此操作方便、靈活。

        (4)RBR.VHD

        RR.VHD作為整個芯片的接收模塊,其中包括接收緩存器、接收數據同步、串/并轉換。

        端口描述如下:

        entity rbr is

        port (diclk:in STD_LOGIC; --接收數據同步時鐘,由發方提供

        rrbr:在STD_LOGIC; --讀接收緩存器信號

        rsrbr:in STD_LOGIC; --接收緩存器清零信號

        dbus:out STD_LOGIC_VECTOR (7 downto 0);

        --8位數據線,單向,輸出

        dr:out STD_LOGIC; --接收緩存器數據有效信號

        ren:out STD_LOGIC; --妝收使能信號,通知發方接收方準備好可發送數據

        di:in STD_LOGIC); --接收數據線

        end rbr;

        當接收緩存器中無數據時,ren信號有效,通知發送方傳數據。然后根據dilck對di信號采樣,一旦緩存器滿,ren無效,dr有效,通知CPU讀數。

        仿真波形如圖4所示。部分代碼如下:

        process (rsrbr,diclk) --serial data to parallel data

        variable l,m: integer range 0 to 8;

        begin

        if rsrbr='1'then

        s_p=00000000;

        m:=0;

        ef='1';

        elsif diclk'event and diclk='1'then

        l:=7-m;

        s_p(1)=di;

        m:=m+1;

        If m=8 then

        m:=0;

        ef='0';

        end if;

        end if;

        if rrbr='1' then

        dbus>=s_p;

        ef='1';

        else dbus=ZZZZZZZZ;

        end if;

        end process;


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 岳池县| 平罗县| 乐安县| 洛川县| 孙吴县| 巴东县| 苗栗县| 临清市| 西城区| 柞水县| 孙吴县| 南阳市| 乡城县| 皮山县| 玛纳斯县| 抚州市| 卫辉市| 钟祥市| 焦作市| 蕉岭县| 唐河县| 绥滨县| 中阳县| 房山区| 师宗县| 大邑县| 宁海县| 新闻| 饶平县| 林口县| 雷山县| 乾安县| 延川县| 集贤县| 浦县| 溧阳市| 韶山市| 吉木萨尔县| 宣武区| 安徽省| 古田县|