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

          新聞中心

          EEPW首頁 > EDA/PCB > 設計應用 > 基于FPGA技術實現與PC串行通信

          基于FPGA技術實現與PC串行通信

          作者: 時間:2009-05-26 來源:網絡 收藏

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

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

          引言

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

          總體設計

          主要設計思想:PC向串口發(fā)送命令,FPGA通過判斷接收的控制字執(zhí)行相應的操作,總體框圖如圖1所示。


          圖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所示。


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

          在串行通信中,無論發(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)。


          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();