<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 手機(jī)與無線通信 > 設(shè)計(jì)應(yīng)用 > 用VHDL設(shè)計(jì)專用串行通信芯片

          用VHDL設(shè)計(jì)專用串行通信芯片

          作者: 時(shí)間:2009-07-17 來源:網(wǎng)絡(luò) 收藏

          系統(tǒng)中,是整個(gè)硬件平臺(tái)的基礎(chǔ),它不僅完成OSI物理層中的數(shù)據(jù)發(fā)送和接收,還能根據(jù)傳輸方式和協(xié)議的不同實(shí)現(xiàn)不同的數(shù)據(jù)校驗(yàn)方式及數(shù)據(jù)組幀格式。

          本文引用地址:http://www.ex-cimer.com/article/157976.htm

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

          1 統(tǒng)計(jì)時(shí)分復(fù)用器系統(tǒng)功能及模塊組成

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

          2 CPLD內(nèi)部功能框圖及設(shè)計(jì)

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

          本設(shè)計(jì)采用模塊化設(shè)計(jì)。按功能將SRT內(nèi)部結(jié)構(gòu)發(fā)分為5個(gè)模塊,每一個(gè)模塊對(duì)應(yīng)一個(gè)的設(shè)計(jì)文件。這樣設(shè)計(jì)的好處是有利于各功能模塊的編寫和調(diào)試,從而降低了整個(gè)SRT的調(diào)試難度,提高了軟件的可維護(hù)性及可讀性。下面給出各個(gè)設(shè)計(jì)文件的外功能簡介(對(duì)于其中幾個(gè)重要的模塊還列出了端口描述和部分實(shí)現(xiàn)代碼):

          (1)SRTCRTL.VHD

          SRTCRTL.VHD 作為SRT的控制模塊,負(fù)責(zé)地址譯碼,當(dāng)片選信號(hào)有效時(shí)將數(shù)據(jù)線上的數(shù)據(jù)寫入相應(yīng)的寄存器。SRT芯片內(nèi)部共設(shè)有接收緩存器、發(fā)送保持器、線路控制寄存器、除數(shù)寄存器(高低8位各1個(gè))、自環(huán)控制寄存器等6個(gè)控制寄存器,每個(gè)寄存器都被分配了1個(gè)地址,通過對(duì)相應(yīng)地址進(jìn)行讀寫,CPU可完成數(shù)據(jù)發(fā)送、接收、自環(huán)及芯片參數(shù)設(shè)置等操作。

          (2)LOOP.VHD

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

          (3)CLKGEN.VHD

          CLKGEN.VHD是波特率發(fā)生器模塊,用來產(chǎn)生發(fā)送同步的時(shí)鐘信號(hào)doclk。它將除數(shù)寄存器高低各8位共16位數(shù)據(jù)作為除數(shù),對(duì)外部2MHz的時(shí)鐘源進(jìn)行分頻。用戶可通過修改除數(shù)寄存器的值動(dòng)態(tài)地改變數(shù)據(jù)傳輸速率,因此操作方便、靈活。

          (4)RBR.VHD

          RR.VHD作為整個(gè)芯片的接收模塊,其中包括接收緩存器、接收數(shù)據(jù)同步、串/并轉(zhuǎn)換。

          端口描述如下:

          entity rbr is

          port (diclk:in STD_LOGIC; --接收數(shù)據(jù)同步時(shí)鐘,由發(fā)方提供

          rrbr:在STD_LOGIC; --讀接收緩存器信號(hào)

          rsrbr:in STD_LOGIC; --接收緩存器清零信號(hào)

          dbus:out STD_LOGIC_VECTOR (7 downto 0);

          --8位數(shù)據(jù)線,單向,輸出

          dr:out STD_LOGIC; --接收緩存器數(shù)據(jù)有效信號(hào)

          ren:out STD_LOGIC; --妝收使能信號(hào),通知發(fā)方接收方準(zhǔn)備好可發(fā)送數(shù)據(jù)

          di:in STD_LOGIC); --接收數(shù)據(jù)線

          end rbr;

          當(dāng)接收緩存器中無數(shù)據(jù)時(shí),ren信號(hào)有效,通知發(fā)送方傳數(shù)據(jù)。然后根據(jù)dilck對(duì)di信號(hào)采樣,一旦緩存器滿,ren無效,dr有效,通知CPU讀數(shù)。

          仿真波形如圖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 下一頁

          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();