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

圖1 總體框圖

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

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

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

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

圖6 從FIFO讀數(shù)據(jù)的過程
仿真結(jié)果
基本的發(fā)送接收
如圖4所示,clk是時鐘信號(57600 bit/s);start_xmit是開始發(fā)送標志位;sin是串行輸入;datain是并行輸出;read_bit是接收結(jié)束標志位;xmit_bit是發(fā)送結(jié)束標志位;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,如果接收到停止位表明這個接收過程結(jié)束read_bit=1。根據(jù)串行通信協(xié)議,數(shù)據(jù)是按照先低位,后高位的順序發(fā)送的,所以實際接收的是01010110。發(fā)送:待發(fā)送的并行數(shù)據(jù)為01010110,當(dāng)start_xmit=1發(fā)送有效,進入發(fā)送過程;首先發(fā)送兩個起始位0,保證長度為兩個時鐘周期,然后依次發(fā)送01101010,每兩個時鐘周期發(fā)送1比特,最后發(fā)送停止位,發(fā)送過程結(jié)束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ù)。當(dāng)接收a為1時,fifo_wr置1;當(dāng)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的讀時鐘、寫、讀使能。讀過程:讀使能有效,先產(chǎn)生6個讀時鐘,但是不往SOUT發(fā)送數(shù)據(jù),因為FIFO的前6個周期不是有效數(shù)據(jù)。然后產(chǎn)生一個讀時鐘,將FIFO的數(shù)據(jù)送到data,按照通信協(xié)議通過SOUT發(fā)送出去,發(fā)送結(jié)束再產(chǎn)生一個讀時鐘,讀取FIFO的數(shù)據(jù),進行下一次串行輸出。
結(jié)語
隨著可編程器件的不斷發(fā)展和廣泛應(yīng)用,F(xiàn)PGA與外圍設(shè)備的通信也越來越多。本文介紹的串行通信的實現(xiàn)具有可復(fù)制性,只需改變系統(tǒng)時鐘頻率和控制模塊就可以在其他場合下使用。
- 串行通信(34977)
- 實現(xiàn)FP(5853)
相關(guān)推薦
FPGA上實現(xiàn)網(wǎng)絡(luò)通信用的協(xié)議
FPGA和PC機通過以太網(wǎng)通信的問題
FPGA和單片機的串行通信接口設(shè)計
PC MCU 串行通信的應(yīng)用設(shè)計方法
PC與FPGA的以太網(wǎng)通信
PC通過PCI Express與FPGA通信
pc如何通過pcie與FPGA通信
DSP與PC機串行通信接口硬件設(shè)計
TMS320F240與PC機串行的通信
TMS320F24x與PC機串行通信接口設(shè)計及應(yīng)用
tms320f240與pc串行通信接口的設(shè)計方法介紹
串口輸出顯示串行通信是什么意思
利用異步通信芯片TL16C750實現(xiàn)DSP與PC機的高速串行通
在FPGA開發(fā)板中實現(xiàn)UART串行通信的設(shè)計
基于Visual Basic6.0下PC機與MCS-51單片機的串行通信
如何實現(xiàn)一個基于FPGA的紅外遙控解碼和實現(xiàn)FPGA與PC機的串口通信?
如何使用virtex 5實現(xiàn)-GTP RocketIO進行串行通信?
如何去實現(xiàn)單片機和PC之間的通信呢
怎么實現(xiàn)TMS320C3x DSP和PC機的異步串行通信設(shè)計?
怎么實現(xiàn)基于FPGA的UARTl6550的設(shè)計?
請教:51單片機與PC機串行通信
請問一下在Windows下怎么實現(xiàn)PC機與單片機AT89C51的串行通信?
輕松實現(xiàn)高速串行I/O (FPGA應(yīng)用設(shè)計者指南)
通過SCI實現(xiàn)串行通信
PC機與單片機的并行通信協(xié)議
77PC機之間串口通信的實現(xiàn)
81Matlab 環(huán)境下PC 機與單片機的串行通信及數(shù)據(jù)處理
73PC 機與PLC 串行通信的實現(xiàn)
26溫控系統(tǒng)中VB實現(xiàn)的PC機與單片機串行通迅
34FPGA和單片機串行通信接口的實現(xiàn)
0PC與PLC串行通信在專用加工機床上的應(yīng)用
20DSP與PC機串行通信在減搖水艙試驗臺架控制系統(tǒng)中的應(yīng)用
15基于VB實現(xiàn)PC機與單片機的串行通訊
114溫控系統(tǒng)中VB實現(xiàn)的PC機與單片機串行通迅
57PC機與嵌入式系統(tǒng)的多線程串行通信實現(xiàn)
32基于自定義幀的PC與EEPROM串行通信設(shè)計
13基于RS-485變頻器與PC機串行通信的實現(xiàn)
52用組態(tài)王實現(xiàn)PC機與多臺單片機的遠程通信
61基于FPGA的串行接收模塊的設(shè)計
18基于單片機的CPLD/FPGA被動串行下載配置的實現(xiàn)
19PC MCU串行通信的應(yīng)用設(shè)計方法
13DSP與PC機串行通訊的設(shè)計
10PIC16系列單片機與PC機串行通信的軟硬件實現(xiàn)
85PLC串行通信在測控裝置中的實現(xiàn)
16異步收發(fā)通信端口(UART)的FPGA實現(xiàn)
55如何實現(xiàn)(電腦)PC機與單片機AT89C51的串行通信
4544TMS320C32與PC機串行通信的軟件實現(xiàn)方法
1083
TMS320F240與PC機串行通訊的設(shè)計
1036
用VHDL語言在CPLD上實現(xiàn)串行通信
570
#硬聲創(chuàng)作季 數(shù)字設(shè)計FPGA應(yīng)用:串行通信_1基礎(chǔ)


#硬聲創(chuàng)作季 數(shù)字設(shè)計FPGA應(yīng)用:串行通信_5接收設(shè)計和解析


基于FPGA的串行Flash擴展實現(xiàn)
1363
利用串行RapidIO實現(xiàn)FPGA協(xié)處理
1216
利用串行RapidIO實現(xiàn)FPGA協(xié)處理
1389
FPGA和單片機的串行通信接口設(shè)計
2387
單片機與PC機串行通信中波特率的確定
1664pic單片機與pc機異步串行通信的設(shè)計
76基于Windows CENET的串行通信的實現(xiàn)
5基于LabVIEW實現(xiàn)PC機與單片機的串行通信_王水魚
5FPGA與單片機實現(xiàn)數(shù)據(jù)串行通信的解決方案
11246PC 機與單片機串行通信實現(xiàn)
22基于FPGA異步串行通信接口模塊設(shè)計與實現(xiàn)
5152基于MAX232實現(xiàn)PC機與CPU通信
6726
用Win32API實現(xiàn)PC機與多單片機的串行通信
1如何使用FPGA進行串行通信控制系統(tǒng)的設(shè)計
6單片機與FPGA異步串行通信的實現(xiàn)方法
8FPGA與單片機實現(xiàn)串行通信的資料詳細說明
15使用單片機實現(xiàn)與PC機虛擬串行通信的仿真設(shè)計實例文件免費下載
31使用PC的RS-232串行端口與2線器件通信
579
使用PC的RS-232串行端口與2線器件通信
465
電子發(fā)燒友App






評論