引言
串行通信即串行數(shù)據(jù)傳輸,實現(xiàn)FPGA與PC的串行通信在實際中,特別是在FPGA的調(diào)試中有著很重要的應(yīng)用。調(diào)試過程一般是先進(jìn)行軟件編程仿真,然后將程序下載到芯片中驗證設(shè)計的正確性,目前還沒有更好的工具可以在下載后實時地對FPGA的工作情況和數(shù)據(jù)進(jìn)行分析。通過串行通信,可以向FPGA發(fā)控制命令讓其執(zhí)行相應(yīng)的操作,同時把需要的數(shù)據(jù)通過串口發(fā)到PC上進(jìn)行相應(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)機(jī)變換
總體設(shè)計
主要設(shè)計思想:PC向串口發(fā)送命令,F(xiàn)PGA通過判斷接收的控制字執(zhí)行相應(yīng)的操作,總體框圖如圖1所示。
設(shè)計包括三部分:1、通過向I/O端口發(fā)送高低電平以達(dá)到控制外部硬件的要求。2、完成芯片內(nèi)部邏輯的變化。3、將需要的數(shù)據(jù)先存起來(一般采用內(nèi)部或外部FIFO),然后通過串口將數(shù)據(jù)發(fā)送到PC,PC將接收的數(shù)據(jù)進(jìn)行處理和分析。串口采用標(biāo)準(zhǔn)的RS-232協(xié)議,主要參數(shù)的選擇:波特率28800bit/s、8位有效位、無奇偶校驗位、1位停止位。
FPGA中各模塊的實現(xiàn)
分頻模塊
設(shè)計中需要將3.6864MHz的時鐘進(jìn)行64分頻變?yōu)?7600 波特作為其他模塊的時鐘基準(zhǔn)。具體實現(xiàn)時采用一個6位計數(shù)器,將計數(shù)器的溢出作為時鐘的輸出即可實現(xiàn)整數(shù)分頻。
發(fā)送接收模塊
此模塊是整個設(shè)計的核心部分。設(shè)計流程如圖2所示。
在串行通信中,無論發(fā)送或接收,都必須有時鐘脈沖信號對所傳送的數(shù)據(jù)進(jìn)行定位和同步控制,設(shè)計中采用的時鐘頻率是波特率的兩倍(57600 bit/s)。接收過程:初始狀態(tài)是等待狀態(tài),當(dāng)檢測到0時進(jìn)入檢驗狀態(tài),在檢驗狀態(tài)下如果再檢測到0則進(jìn)入接收數(shù)據(jù)狀態(tài),當(dāng)接收完8位比特數(shù)后判斷是否有停止位,如果有則結(jié)束接收過程重新進(jìn)入等待狀態(tài)。發(fā)送過程:初始狀態(tài)是等待狀態(tài),當(dāng)接收到開始發(fā)送的信號則進(jìn)入發(fā)送過程,先發(fā)送起始位,再發(fā)送8位比特數(shù),每位寬度為2個周期,當(dāng)一個字節(jié)發(fā)送完畢后發(fā)送一個停止位,發(fā)送結(jié)束,重新回到等待狀態(tài)。
控制模塊
主要實現(xiàn)的功能是:判斷從PC接收的數(shù)據(jù),根據(jù)預(yù)先設(shè)計的邏輯進(jìn)行相應(yīng)的狀態(tài)轉(zhuǎn)換。例如:給端口預(yù)置一個狀態(tài);送開始發(fā)送的標(biāo)志位,送準(zhǔn)備發(fā)送的數(shù)據(jù);給DDS送配置信號,控制FIFO的讀寫。程序中狀態(tài)機(jī)設(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ā)送標(biāo)志位;sin是串行輸入;datain是并行輸出;read_bit是接收結(jié)束標(biāo)志位;xmit_bit是發(fā)送結(jié)束標(biāo)志位;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,如果是則進(jìn)入接收過程;每兩個時鐘周期接收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ā)送有效,進(jìn)入發(fā)送過程;首先發(fā)送兩個起始位0,保證長度為兩個時鐘周期,然后依次發(fā)送01101010,每兩個時鐘周期發(fā)送1比特,最后發(fā)送停止位,發(fā)送過程結(jié)束xmit_bit為1。
發(fā)送控制字
圖5中clk是時鐘信號;a是PC發(fā)來的16進(jìn)制的控制字,也就是圖4中的并行輸出dataout; ma1cnt、ma2cnt、ma3cnt是三個寄存器;clrr是系統(tǒng)清零信號;ddsclr是DDS配置信號;fifo_clk,fifo_rd,fifo_wr,ram_rst是FIFO的時鐘、讀、寫、清零信號;start_xmit是發(fā)送開始標(biāo)志位;b是準(zhǔn)備發(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是準(zhǔn)備輸出的數(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ù),進(jìn)行下一次串行輸出。
結(jié)語
隨著可編程器件的不斷發(fā)展和廣泛應(yīng)用,F(xiàn)PGA與外圍設(shè)備的通信也越來越多。本文介紹的串行通信的實現(xiàn)具有可復(fù)制性,只需改變系統(tǒng)時鐘頻率和控制模塊就可以在其他場合下使用。
- 串行通信(37045)
- 實現(xiàn)FP(5916)
FPGA上實現(xiàn)網(wǎng)絡(luò)通信用的協(xié)議
FPGA和PC機(jī)通過以太網(wǎng)通信的問題
FPGA和單片機(jī)的串行通信接口設(shè)計
PC MCU 串行通信的應(yīng)用設(shè)計方法
PC與FPGA的以太網(wǎng)通信
PC通過PCI Express與FPGA通信
pc如何通過pcie與FPGA通信
DSP與PC機(jī)串行通信接口硬件設(shè)計
TMS320F240與PC機(jī)串行的通信
TMS320F24x與PC機(jī)串行通信接口設(shè)計及應(yīng)用
tms320f240與pc串行通信接口的設(shè)計方法介紹
串口輸出顯示串行通信是什么意思
利用異步通信芯片TL16C750實現(xiàn)DSP與PC機(jī)的高速串行通
在FPGA開發(fā)板中實現(xiàn)UART串行通信的設(shè)計
如何實現(xiàn)一個基于FPGA的紅外遙控解碼和實現(xiàn)FPGA與PC機(jī)的串口通信?
如何使用virtex 5實現(xiàn)-GTP RocketIO進(jìn)行串行通信?
如何去實現(xiàn)單片機(jī)和PC之間的通信呢
怎么實現(xiàn)TMS320C3x DSP和PC機(jī)的異步串行通信設(shè)計?
怎么實現(xiàn)基于FPGA的UARTl6550的設(shè)計?
請教:51單片機(jī)與PC機(jī)串行通信
請問一下在Windows下怎么實現(xiàn)PC機(jī)與單片機(jī)AT89C51的串行通信?
PC機(jī)之間串口通信的實現(xiàn)
81Matlab 環(huán)境下PC 機(jī)與單片機(jī)的串行通信及數(shù)據(jù)處理
73PC 機(jī)與PLC 串行通信的實現(xiàn)
26溫控系統(tǒng)中VB實現(xiàn)的PC機(jī)與單片機(jī)串行通迅
34FPGA和單片機(jī)串行通信接口的實現(xiàn)
0PC與PLC串行通信在專用加工機(jī)床上的應(yīng)用
20基于VB實現(xiàn)PC機(jī)與單片機(jī)的串行通訊
114溫控系統(tǒng)中VB實現(xiàn)的PC機(jī)與單片機(jī)串行通迅
57PIC16F87系列單片機(jī)與PC104的串行通信
36PC機(jī)與嵌入式系統(tǒng)的多線程串行通信實現(xiàn)
32基于自定義幀的PC與EEPROM串行通信設(shè)計
13基于RS-485變頻器與PC機(jī)串行通信的實現(xiàn)
52用組態(tài)王實現(xiàn)PC機(jī)與多臺單片機(jī)的遠(yuǎn)程通信
61基于FPGA的串行接收模塊的設(shè)計
18基于單片機(jī)的CPLD/FPGA被動串行下載配置的實現(xiàn)
19PC MCU串行通信的應(yīng)用設(shè)計方法
13DSP與PC機(jī)串行通訊的設(shè)計
10PIC16系列單片機(jī)與PC機(jī)串行通信的軟硬件實現(xiàn)
85PLC串行通信在測控裝置中的實現(xiàn)
16異步收發(fā)通信端口(UART)的FPGA實現(xiàn)
55基于FPGA的高速串行傳輸接口研究與實現(xiàn)
44如何實現(xiàn)(電腦)PC機(jī)與單片機(jī)AT89C51的串行通信
4907TMS320C32與PC機(jī)串行通信的軟件實現(xiàn)方法
1415
TMS320F240與PC機(jī)串行通訊的設(shè)計
1388
收費系統(tǒng)中PC機(jī)與LED顯示屏的串行通信及顯示字符的點陣提取
1198#硬聲創(chuàng)作季 數(shù)字設(shè)計FPGA應(yīng)用:串行通信_1基礎(chǔ)


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


基于FPGA的串行Flash擴(kuò)展實現(xiàn)
1806
利用串行RapidIO實現(xiàn)FPGA協(xié)處理
1675
利用串行RapidIO實現(xiàn)FPGA協(xié)處理
1835
FPGA和單片機(jī)的串行通信接口設(shè)計
2914
PIC單片機(jī)與PC機(jī)串行通信模塊的設(shè)計
1114
單片機(jī)與PC機(jī)串行通信中波特率的確定
2226基于Modbus TCP協(xié)議實現(xiàn)PC機(jī)與PLC的串行通信
7373
DELPHI串行通信編程技術(shù)與實現(xiàn)
55pic單片機(jī)與pc機(jī)異步串行通信的設(shè)計
76PC機(jī)與嵌入式系統(tǒng)的多線程串行通信實現(xiàn)
2基于Windows CENET的串行通信的實現(xiàn)
5Proteus之單片機(jī)與PC機(jī)的串行通信
0FPGA與單片機(jī)實現(xiàn)數(shù)據(jù)串行通信的解決方案
11728PC 機(jī)與單片機(jī)串行通信實現(xiàn)
22基于FPGA異步串行通信接口模塊設(shè)計與實現(xiàn)
6257基于PC機(jī)與FPGA的脈沖雷達(dá)通信系統(tǒng)設(shè)計
1617
基于MAX232實現(xiàn)PC機(jī)與CPU通信
9403
如何使用FPGA進(jìn)行串行通信控制系統(tǒng)的設(shè)計
6單片機(jī)與FPGA異步串行通信的實現(xiàn)方法
8FPGA與單片機(jī)實現(xiàn)串行通信的資料詳細(xì)說明
15使用單片機(jī)實現(xiàn)與PC機(jī)虛擬串行通信的仿真設(shè)計實例文件免費下載
31如何用FPGA實現(xiàn)CAN總線通信控制器
3512如何實現(xiàn)51單片機(jī)與PC機(jī)的串行通信
3419Xilinx FPGA串行通信協(xié)議介紹
2357
電子發(fā)燒友App






評論