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

圖1 總體框圖

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

圖3 狀態(tài)機變換
總體設計
主要設計思想:PC向串口發(fā)送命令,F(xiàn)PGA通過判斷接收的控制字執(zhí)行相應的操作,總體框圖如圖1所示。
設計包括三部分:1、通過向I/O端口發(fā)送高低電平以達到控制外部硬件的要求。2、完成芯片內部邏輯的變化。3、將需要的數(shù)據(jù)先存起來(一般采用內部或外部FIFO),然后通過串口將數(shù)據(jù)發(fā)送到PC,PC將接收的數(shù)據(jù)進行處理和分析。串口采用標準的RS-232協(xié)議,主要參數(shù)的選擇:波特率28800bit/s、8位有效位、無奇偶校驗位、1位停止位。
FPGA中各模塊的實現(xiàn)
分頻模塊
設計中需要將3.6864MHz的時鐘進行64分頻變?yōu)?7600 波特作為其他模塊的時鐘基準。具體實現(xiàn)時采用一個6位計數(shù)器,將計數(shù)器的溢出作為時鐘的輸出即可實現(xiàn)整數(shù)分頻。
發(fā)送接收模塊
此模塊是整個設計的核心部分。設計流程如圖2所示。
在串行通信中,無論發(fā)送或接收,都必須有時鐘脈沖信號對所傳送的數(shù)據(jù)進行定位和同步控制,設計中采用的時鐘頻率是波特率的兩倍(57600 bit/s)。接收過程:初始狀態(tài)是等待狀態(tài),當檢測到0時進入檢驗狀態(tài),在檢驗狀態(tài)下如果再檢測到0則進入接收數(shù)據(jù)狀態(tài),當接收完8位比特數(shù)后判斷是否有停止位,如果有則結束接收過程重新進入等待狀態(tài)。發(fā)送過程:初始狀態(tài)是等待狀態(tài),當接收到開始發(fā)送的信號則進入發(fā)送過程,先發(fā)送起始位,再發(fā)送8位比特數(shù),每位寬度為2個周期,當一個字節(jié)發(fā)送完畢后發(fā)送一個停止位,發(fā)送結束,重新回到等待狀態(tài)。
控制模塊
主要實現(xiàn)的功能是:判斷從PC接收的數(shù)據(jù),根據(jù)預先設計的邏輯進行相應的狀態(tài)轉換。例如:給端口預置一個狀態(tài);送開始發(fā)送的標志位,送準備發(fā)送的數(shù)據(jù);給DDS送配置信號,控制FIFO的讀寫。程序中狀態(tài)機設計如圖3所示。
設計中需要注意的問題
波特率的選擇對于串口通信是很重要的,波特率不應太大,這樣數(shù)據(jù)才會更穩(wěn)定。整個發(fā)送接收過程中起始位的判別和發(fā)送是數(shù)據(jù)傳輸?shù)那疤帷榱吮苊庹`碼的產生,在FPGA設計中的串行輸入和輸出端口都應該加上一個數(shù)據(jù)鎖存器。

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

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

圖6 從FIFO讀數(shù)據(jù)的過程
仿真結果
基本的發(fā)送接收
如圖4所示,clk是時鐘信號(57600 bit/s);start_xmit是開始發(fā)送標志位;sin是串行輸入;datain是并行輸出;read_bit是接收結束標志位;xmit_bit是發(fā)送結束標志位;sout是串行輸出;dataout是并行輸出;rcv_bit 是接收位數(shù)寄存器。發(fā)送接收模塊主要完成把從sin端口接收的串行數(shù)據(jù)變?yōu)椴⑿袛?shù)據(jù)送給dataout;把并行數(shù)據(jù)datain變成串行數(shù)據(jù)通過sout端口串行發(fā)送。
接收:判斷接收的串行數(shù)據(jù)sin是否是連續(xù)的兩個0,如果是則進入接收過程;每兩個時鐘周期接收1個比特的數(shù)據(jù),依次接收到01101010,如果接收到停止位表明這個接收過程結束read_bit=1。根據(jù)串行通信協(xié)議,數(shù)據(jù)是按照先低位,后高位的順序發(fā)送的,所以實際接收的是01010110。發(fā)送:待發(fā)送的并行數(shù)據(jù)為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ā)送的數(shù)據(jù)。當接收a為1時,fifo_wr置1;當a為18時,把ma1cnt的值送到b。其他的操作類似,主要是端口的置位,F(xiàn)IFO讀寫狀態(tài)的控制。
從FIFO中讀寫數(shù)據(jù)
圖6中SER_CLOCK是系統(tǒng)時鐘3.6864MHz,sa是分頻后的頻率57600bit/s;SIN是串行輸入;data是準備輸出的數(shù)據(jù);SOUT是串行輸出;fifoclk、fifowr、fiford是FIFO的讀時鐘、寫、讀使能。讀過程:讀使能有效,先產生6個讀時鐘,但是不往SOUT發(fā)送數(shù)據(jù),因為FIFO的前6個周期不是有效數(shù)據(jù)。然后產生一個讀時鐘,將FIFO的數(shù)據(jù)送到data,按照通信協(xié)議通過SOUT發(fā)送出去,發(fā)送結束再產生一個讀時鐘,讀取FIFO的數(shù)據(jù),進行下一次串行輸出。
結語
隨著可編程器件的不斷發(fā)展和廣泛應用,F(xiàn)PGA與外圍設備的通信也越來越多。本文介紹的串行通信的實現(xiàn)具有可復制性,只需改變系統(tǒng)時鐘頻率和控制模塊就可以在其他場合下使用。
- 串行通信(37045)
- 實現(xiàn)FP(5916)
FPGA上實現(xiàn)網(wǎng)絡通信用的協(xié)議
FPGA和PC機通過以太網(wǎng)通信的問題
FPGA和單片機的串行通信接口設計
PC MCU 串行通信的應用設計方法
PC與FPGA的以太網(wǎng)通信
PC通過PCI Express與FPGA通信
pc如何通過pcie與FPGA通信
DSP與PC機串行通信接口硬件設計
TMS320F240與PC機串行的通信
TMS320F24x與PC機串行通信接口設計及應用
tms320f240與pc串行通信接口的設計方法介紹
串口輸出顯示串行通信是什么意思
利用異步通信芯片TL16C750實現(xiàn)DSP與PC機的高速串行通
在FPGA開發(fā)板中實現(xiàn)UART串行通信的設計
如何實現(xiàn)一個基于FPGA的紅外遙控解碼和實現(xiàn)FPGA與PC機的串口通信?
如何使用virtex 5實現(xiàn)-GTP RocketIO進行串行通信?
如何去實現(xiàn)單片機和PC之間的通信呢
怎么實現(xiàn)TMS320C3x DSP和PC機的異步串行通信設計?
怎么實現(xiàn)基于FPGA的UARTl6550的設計?
請教:51單片機與PC機串行通信
請問一下在Windows下怎么實現(xiàn)PC機與單片機AT89C51的串行通信?
PC機之間串口通信的實現(xiàn)
81Matlab 環(huán)境下PC 機與單片機的串行通信及數(shù)據(jù)處理
73PC 機與PLC 串行通信的實現(xiàn)
26溫控系統(tǒng)中VB實現(xiàn)的PC機與單片機串行通迅
34FPGA和單片機串行通信接口的實現(xiàn)
0PC與PLC串行通信在專用加工機床上的應用
20基于VB實現(xiàn)PC機與單片機的串行通訊
114溫控系統(tǒng)中VB實現(xiàn)的PC機與單片機串行通迅
57PIC16F87系列單片機與PC104的串行通信
36PC機與嵌入式系統(tǒng)的多線程串行通信實現(xiàn)
32基于自定義幀的PC與EEPROM串行通信設計
13基于RS-485變頻器與PC機串行通信的實現(xiàn)
52用組態(tài)王實現(xiàn)PC機與多臺單片機的遠程通信
61基于FPGA的串行接收模塊的設計
18基于單片機的CPLD/FPGA被動串行下載配置的實現(xiàn)
19PC MCU串行通信的應用設計方法
13DSP與PC機串行通訊的設計
10PIC16系列單片機與PC機串行通信的軟硬件實現(xiàn)
85PLC串行通信在測控裝置中的實現(xiàn)
16異步收發(fā)通信端口(UART)的FPGA實現(xiàn)
55基于FPGA的高速串行傳輸接口研究與實現(xiàn)
44如何實現(xiàn)(電腦)PC機與單片機AT89C51的串行通信
4907TMS320C32與PC機串行通信的軟件實現(xiàn)方法
1415
TMS320F240與PC機串行通訊的設計
1388
收費系統(tǒng)中PC機與LED顯示屏的串行通信及顯示字符的點陣提取
1198基于FPGA的串行Flash擴展實現(xiàn)
1806
利用串行RapidIO實現(xiàn)FPGA協(xié)處理
1675
利用串行RapidIO實現(xiàn)FPGA協(xié)處理
1835
FPGA和單片機的串行通信接口設計
2914
單片機與PC機串行通信中波特率的確定
2226基于Modbus TCP協(xié)議實現(xiàn)PC機與PLC的串行通信
7373
DELPHI串行通信編程技術與實現(xiàn)
55pic單片機與pc機異步串行通信的設計
76基于Windows CENET的串行通信的實現(xiàn)
5FPGA與單片機實現(xiàn)數(shù)據(jù)串行通信的解決方案
11728PC 機與單片機串行通信實現(xiàn)
22基于FPGA異步串行通信接口模塊設計與實現(xiàn)
6257基于PC機與FPGA的脈沖雷達通信系統(tǒng)設計
1617
基于MAX232實現(xiàn)PC機與CPU通信
9403
如何使用FPGA進行串行通信控制系統(tǒng)的設計
6單片機與FPGA異步串行通信的實現(xiàn)方法
8FPGA與單片機實現(xiàn)串行通信的資料詳細說明
15如何用FPGA實現(xiàn)CAN總線通信控制器
3512如何實現(xiàn)51單片機與PC機的串行通信
3419Xilinx FPGA串行通信協(xié)議介紹
2357
電子發(fā)燒友App









評論