1. gzyueqian
      18529173453
      首頁 > 新聞中心 > > 正文

      用VHDL語言在CPLD上實現(xiàn)串行通信

      更新時間: 2007-03-27 14:21:11來源: 粵嵌教育瀏覽量:530

      引言

        隨著EDA技術(shù)得發(fā)展,CPLD已經(jīng)在許多方面得到了廣泛應(yīng)用,而串行通信是實現(xiàn)遠程測控的重要手段。本文利用VHDL語言在CPLD上實現(xiàn)了串行通信,完全可以脫離單片機使用,克服了單片機的許多缺點。

      串口結(jié)構(gòu)及內(nèi)容

        本設(shè)計所采用的是異步通信方式,可以規(guī)定傳輸?shù)囊粋€數(shù)據(jù)是10位,其中位為啟動位(邏輯0低電平),位為停止位(邏輯1高電平),中間8位是數(shù)據(jù)位。為了方便對數(shù)據(jù)進行正確控制,選取發(fā)送(接受)每位數(shù)據(jù)用4個時鐘周期。為了能夠達到串行通信的波特率,例如4800B/s,則需把時鐘頻率設(shè)為19.2kHz。系統(tǒng)結(jié)構(gòu)如圖1所示:




      圖1




      系統(tǒng)原理

        首先介紹串行通信發(fā)送器的工作原理。6位計數(shù)器用于判斷發(fā)送的數(shù)據(jù)是否發(fā)送完畢及在發(fā)送完畢后裝入新的數(shù)據(jù),其VHDL語言程序如下:


      process(carry)
      begin
      if carry'event and carry='1'then
      if counter40="100111"then
      load<='1';
      counter40<="000000";
      else counter40<=counter40+1;
      load<='0';
      end if;
      end if;
      end process;


        由于本設(shè)計中選取一位數(shù)據(jù)4個時鐘周期,因此當計數(shù)到“100111”時,表示10位數(shù)據(jù)發(fā)送完畢;此時將加載信號“load”置1,則向移位寄存器加載10位數(shù)據(jù)。此計數(shù)器的時鐘信號由3位計數(shù)器的進位信號提供,3位計數(shù)器程序為如下:


      process(clk)
      begin
      if clk'event and clk='1'then
      if counter4="0011"then
      counter4<="0000";
      carry<='1';
      else counter4<=counter4+1;
      carry<='0';
      end if;
      end if;
      end process;


        當計數(shù)脈沖為3時,計數(shù)器清零并發(fā)出進位信號“carry”,“carry”既是6位計數(shù)器的時鐘信號,又是移位寄存器的移位脈沖,移位寄存器實際上在發(fā)送器中是一個并串轉(zhuǎn)換器,其程序為如下:


      process(load,carry)
      begin
      if load='1'then
      reg10(9 downto 0)<=regin(9 downto 0);
      else
      if carry'event and carry='1' then
      din<=reg10(0);
      reg10(8 downto 0)<=reg10(9 downto 1);
      end if;
      end if;
      end process;


        當加載信號高有效時,10位數(shù)據(jù)從外部寄存器中并行載入REG10,載入后在“carry”有效時,即每4個CLK周期右移一位進入鎖存器,進而從TXD發(fā)出。發(fā)送器的仿真波形如圖2所示。




      圖2




        接收器的結(jié)構(gòu)與模塊的功能與發(fā)送器相似。通過判斷接收鎖存器中的起始位是否為零,來確定接收與否。若有效時,3位計數(shù)器開始計數(shù),將鎖存器中的數(shù)據(jù)逐位右移到移位寄存器中,6位計數(shù)器同樣計數(shù)到“100111”,此時表示已接收10位數(shù)據(jù),發(fā)出信號把移位寄存器中的數(shù)據(jù)并行讀出。接收器中的移位寄存器其實是一個串并轉(zhuǎn)換器。

      結(jié)論

        以上就是串行通信的基本結(jié)構(gòu)和原理,在工程中可能對波特率的要求不同??梢岳肅PLD的在線可編程功能,通過修改發(fā)送(接收)每一位的時間來控制波特率,比如把一位數(shù)據(jù)每4個CLK改為2個CLK,則在時鐘頻率19.2kHz時,波特率為9600bps。除此之外,還可以通過增加時鐘頻率來增大波特率。

      參考文獻

      1 胡漢才. 單片機原理及其接口技術(shù).清華大學出版社
      2 趙俊超等. 集成電路設(shè)計VHDL教程. 希望電子出版社

      免費預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 最新亚洲中文字幕 | 久久艹国产原创中文字幕 | 日韩综合视频中文字幕 | 三上悠亚在线精品二区 | 亚洲情涩免费手机在线视频 | 亚洲精品高清一线久久 |