色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 汽車電子 > 設計應用 > 實現FPGA與PC的串行通信

          實現FPGA與PC的串行通信

          作者:中國人民解放軍裝備指揮技術學院 陸海峰 時間:2004-10-16 來源:電子設計應用2004年第10期 收藏

          電子設計應用2004年第10期

          本文引用地址:http://cafeforensic.com/article/3495.htm

          摘    要:本文主要介紹了基于技術實現與PC的過程,給出了各個模塊的具體實現方法,分析了實現結果,驗證了的正確性。
          關鍵詞:

          引言
          串行通信即串行數據傳輸,實現與PC的串行通信在實際中,特別是在FPGA的調試中有著很重要的應用。調試過程一般是先進行軟件編程仿真,然后將程序下載到芯片中驗證設計的正確性,目前還沒有更好的工具可以在下載后實時地對FPGA的工作情況和數據進行分析。通過串行通信,可以向FPGA發(fā)控制命令讓其執(zhí)行相應的操作,同時把需要的數據通過串口發(fā)到PC上進行相應的數據處理和分析,以此來判斷FPGA是否按設計要求工作。這樣給FPGA的調試帶來了很大方便,在不需要DSP等其他額外的硬件條件下,只通過串口就可以完成對FPGA的調試。本文采用QuartusⅡ3.0開發(fā)平臺,使用Altera公司的FPGA,設計實現了與PC的串行通信。

          圖1   總體框圖

          圖2 發(fā)送接收流程圖

          圖3  狀態(tài)機變換

          總體設計
          主要設計思想:PC向串口發(fā)送命令,FPGA通過判斷接收的控制字執(zhí)行相應的操作,總體框圖如圖1所示。
          設計包括三部分:1、通過向I/O端口發(fā)送高低電平以達到控制外部硬件的要求。2、完成芯片內部邏輯的變化。3、將需要的數據先存起來(一般采用內部或外部FIFO),然后通過串口將數據發(fā)送到PC,PC將接收的數據進行處理和分析。串口采用標準的RS-232協議,主要參數的選擇:波特率28800bit/s、8位有效位、無奇偶校驗位、1位停止位。

          FPGA中各模塊的實現
          分頻模塊
          設計中需要將3.6864MHz的時鐘進行64分頻變?yōu)?7600 波特作為其他模塊的時鐘基準。具體實現時采用一個6位計數器,將計數器的溢出作為時鐘的輸出即可實現整數分頻。
          發(fā)送接收模塊
          此模塊是整個設計的核心部分。設計流程如圖2所示。
          在串行通信中,無論發(fā)送或接收,都必須有時鐘脈沖信號對所傳送的數據進行定位和同步控制,設計中采用的時鐘頻率是波特率的兩倍(57600 bit/s)。接收過程:初始狀態(tài)是等待狀態(tài),當檢測到0時進入檢驗狀態(tài),在檢驗狀態(tài)下如果再檢測到0則進入接收數據狀態(tài),當接收完8位比特數后判斷是否有停止位,如果有則結束接收過程重新進入等待狀態(tài)。發(fā)送過程:初始狀態(tài)是等待狀態(tài),當接收到開始發(fā)送的信號則進入發(fā)送過程,先發(fā)送起始位,再發(fā)送8位比特數,每位寬度為2個周期,當一個字節(jié)發(fā)送完畢后發(fā)送一個停止位,發(fā)送結束,重新回到等待狀態(tài)。
          控制模塊
          主要實現的功能是:判斷從PC接收的數據,根據預先設計的邏輯進行相應的狀態(tài)轉換。例如:給端口預置一個狀態(tài);送開始發(fā)送的標志位,送準備發(fā)送的數據;給DDS送配置信號,控制FIFO的讀寫。程序中狀態(tài)機設計如圖3所示。
          設計中需要注意的問題
          波特率的選擇對于串口通信是很重要的,波特率不應太大,這樣數據才會更穩(wěn)定。整個發(fā)送接收過程中起始位的判別和發(fā)送是數據傳輸的前提。為了避免誤碼的產生,在FPGA設計中的串行輸入和輸出端口都應該加上一個數據鎖存器。

          圖4  發(fā)送接收過程

          圖5  發(fā)送控制字過程

          圖6  從FIFO讀數據的過程


          仿真結果
          基本的發(fā)送接收
          如圖4所示,clk是時鐘信號(57600 bit/s);start_xmit是開始發(fā)送標志位;sin是串行輸入;datain是并行輸出;read_bit是接收結束標志位;xmit_bit是發(fā)送結束標志位;sout是串行輸出;dataout是并行輸出;rcv_bit 是接收位數寄存器。發(fā)送接收模塊主要完成把從sin端口接收的串行數據變?yōu)椴⑿袛祿徒odataout;把并行數據datain變成串行數據通過sout端口串行發(fā)送。
          接收:判斷接收的串行數據sin是否是連續(xù)的兩個0,如果是則進入接收過程;每兩個時鐘周期接收1個比特的數據,依次接收到01101010,如果接收到停止位表明這個接收過程結束read_bit=1。根據串行通信協議,數據是按照先低位,后高位的順序發(fā)送的,所以實際接收的是01010110。發(fā)送:待發(fā)送的并行數據為01010110,當start_xmit=1發(fā)送有效,進入發(fā)送過程;首先發(fā)送兩個起始位0,保證長度為兩個時鐘周期,然后依次發(fā)送01101010,每兩個時鐘周期發(fā)送1比特,最后發(fā)送停止位,發(fā)送過程結束xmit_bit為1。
          發(fā)送控制字
          圖5中clk是時鐘信號;a是PC發(fā)來的16進制的控制字,也就是圖4中的并行輸出dataout; ma1cnt、ma2cnt、ma3cnt是三個寄存器;clrr是系統(tǒng)清零信號;ddsclr是DDS配置信號;fifo_clk,fifo_rd,fifo_wr,ram_rst是FIFO的時鐘、讀、寫、清零信號;start_xmit是發(fā)送開始標志位;b是準備發(fā)送的數據。當接收a為1時,fifo_wr置1;當a為18時,把ma1cnt的值送到b。其他的操作類似,主要是端口的置位,FIFO讀寫狀態(tài)的控制。
          從FIFO中讀寫數據
          圖6中SER_CLOCK是系統(tǒng)時鐘3.6864MHz,sa是分頻后的頻率57600bit/s;SIN是串行輸入;data是準備輸出的數據;SOUT是串行輸出;fifoclk、fifowr、fiford是FIFO的讀時鐘、寫、讀使能。讀過程:讀使能有效,先產生6個讀時鐘,但是不往SOUT發(fā)送數據,因為FIFO的前6個周期不是有效數據。然后產生一個讀時鐘,將FIFO的數據送到data,按照通信協議通過SOUT發(fā)送出去,發(fā)送結束再產生一個讀時鐘,讀取FIFO的數據,進行下一次串行輸出。

          結語
          隨著可編程器件的不斷發(fā)展和廣泛應用,FPGA與外圍設備的通信也越來越多。本文介紹的串行通信的實現具有可復制性,只需改變系統(tǒng)時鐘頻率和控制模塊就可以在其他場合下使用?!?/p>

          參考文獻
          1  褚振勇,甕木云著.《FPGA的設計與應用》.西安電子科技大學出版社,2002.7
          2  Uwe Meyer-Baese著.劉凌,胡永生譯.《數字信號處理的FPGA實現》.清華大學出版社,2003.1
          3  朱明程編. FPGA原理及應用設計.電子工業(yè)出版社,2001.10
          4  侯伯亭,顧新編.VHDL硬件描述語言及數字邏輯電路設計.西安電子科技大學出版社



          關鍵詞: FPGA 串行通信

          評論


          相關推薦

          技術專區(qū)

          關閉