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

圖1 總體框圖

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

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

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

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

圖6 從FIFO讀數(shù)據(jù)的過程
仿真結(jié)果
基本的發(fā)送接收
如圖4所示,clk是時(shí)鐘信號(hào)(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ù)的兩個(gè)0,如果是則進(jìn)入接收過程;每?jī)蓚€(gè)時(shí)鐘周期接收1個(gè)比特的數(shù)據(jù),依次接收到01101010,如果接收到停止位表明這個(gè)接收過程結(jié)束read_bit=1。根據(jù)串行通信協(xié)議,數(shù)據(jù)是按照先低位,后高位的順序發(fā)送的,所以實(shí)際接收的是01010110。發(fā)送:待發(fā)送的并行數(shù)據(jù)為01010110,當(dāng)start_xmit=1發(fā)送有效,進(jìn)入發(fā)送過程;首先發(fā)送兩個(gè)起始位0,保證長(zhǎng)度為兩個(gè)時(shí)鐘周期,然后依次發(fā)送01101010,每?jī)蓚€(gè)時(shí)鐘周期發(fā)送1比特,最后發(fā)送停止位,發(fā)送過程結(jié)束xmit_bit為1。
發(fā)送控制字
圖5中clk是時(shí)鐘信號(hào);a是PC發(fā)來的16進(jìn)制的控制字,也就是圖4中的并行輸出dataout; ma1cnt、ma2cnt、ma3cnt是三個(gè)寄存器;clrr是系統(tǒng)清零信號(hào);ddsclr是DDS配置信號(hào);fifo_clk,fifo_rd,fifo_wr,ram_rst是FIFO的時(shí)鐘、讀、寫、清零信號(hào);start_xmit是發(fā)送開始標(biāo)志位;b是準(zhǔn)備發(fā)送的數(shù)據(jù)。當(dāng)接收a為1時(shí),fifo_wr置1;當(dāng)a為18時(shí),把ma1cnt的值送到b。其他的操作類似,主要是端口的置位,F(xiàn)IFO讀寫狀態(tài)的控制。
從FIFO中讀寫數(shù)據(jù)
圖6中SER_CLOCK是系統(tǒng)時(shí)鐘3.6864MHz,sa是分頻后的頻率57600bit/s;SIN是串行輸入;data是準(zhǔn)備輸出的數(shù)據(jù);SOUT是串行輸出;fifoclk、fifowr、fiford是FIFO的讀時(shí)鐘、寫、讀使能。讀過程:讀使能有效,先產(chǎn)生6個(gè)讀時(shí)鐘,但是不往SOUT發(fā)送數(shù)據(jù),因?yàn)镕IFO的前6個(gè)周期不是有效數(shù)據(jù)。然后產(chǎn)生一個(gè)讀時(shí)鐘,將FIFO的數(shù)據(jù)送到data,按照通信協(xié)議通過SOUT發(fā)送出去,發(fā)送結(jié)束再產(chǎn)生一個(gè)讀時(shí)鐘,讀取FIFO的數(shù)據(jù),進(jìn)行下一次串行輸出。
結(jié)語
隨著可編程器件的不斷發(fā)展和廣泛應(yīng)用,F(xiàn)PGA與外圍設(shè)備的通信也越來越多。本文介紹的串行通信的實(shí)現(xiàn)具有可復(fù)制性,只需改變系統(tǒng)時(shí)鐘頻率和控制模塊就可以在其他場(chǎng)合下使用。
- 串行通信(37045)
- 實(shí)現(xiàn)FP(5916)
FPGA上實(shí)現(xiàn)網(wǎng)絡(luò)通信用的協(xié)議
FPGA和PC機(jī)通過以太網(wǎng)通信的問題
FPGA和單片機(jī)的串行通信接口設(shè)計(jì)
PC MCU 串行通信的應(yīng)用設(shè)計(jì)方法
PC與FPGA的以太網(wǎng)通信
PC通過PCI Express與FPGA通信
pc如何通過pcie與FPGA通信
DSP與PC機(jī)串行通信接口硬件設(shè)計(jì)
TMS320F240與PC機(jī)串行的通信
TMS320F24x與PC機(jī)串行通信接口設(shè)計(jì)及應(yīng)用
tms320f240與pc串行通信接口的設(shè)計(jì)方法介紹
串口輸出顯示串行通信是什么意思
利用異步通信芯片TL16C750實(shí)現(xiàn)DSP與PC機(jī)的高速串行通
在FPGA開發(fā)板中實(shí)現(xiàn)UART串行通信的設(shè)計(jì)
如何實(shí)現(xiàn)一個(gè)基于FPGA的紅外遙控解碼和實(shí)現(xiàn)FPGA與PC機(jī)的串口通信?
如何使用virtex 5實(shí)現(xiàn)-GTP RocketIO進(jìn)行串行通信?
如何去實(shí)現(xiàn)FPGA與PC的串行通信?
如何去實(shí)現(xiàn)單片機(jī)和PC之間的通信呢
如何采用MAX485實(shí)現(xiàn)ZMD3105與PC機(jī)串行通信
怎么實(shí)現(xiàn)TMS320C3x DSP和PC機(jī)的異步串行通信設(shè)計(jì)?
怎么實(shí)現(xiàn)基于FPGA的UARTl6550的設(shè)計(jì)?
有什么方法可以實(shí)現(xiàn)PC機(jī)與單片機(jī)之間的串行通信嗎?
請(qǐng)教:51單片機(jī)與PC機(jī)串行通信
請(qǐng)問FPGA模塊如何通過USB與PC的通信?
請(qǐng)問一下在Windows下怎么實(shí)現(xiàn)PC機(jī)與單片機(jī)AT89C51的串行通信?
PC機(jī)之間串口通信的實(shí)現(xiàn)
81Matlab 環(huán)境下PC 機(jī)與單片機(jī)的串行通信及數(shù)據(jù)處理
73PC 機(jī)與PLC 串行通信的實(shí)現(xiàn)
26溫控系統(tǒng)中VB實(shí)現(xiàn)的PC機(jī)與單片機(jī)串行通迅
34FPGA和單片機(jī)串行通信接口的實(shí)現(xiàn)
0PC與PLC串行通信在專用加工機(jī)床上的應(yīng)用
20基于VB實(shí)現(xiàn)PC機(jī)與單片機(jī)的串行通訊
114溫控系統(tǒng)中VB實(shí)現(xiàn)的PC機(jī)與單片機(jī)串行通迅
57PIC16F87系列單片機(jī)與PC104的串行通信
36PC機(jī)與嵌入式系統(tǒng)的多線程串行通信實(shí)現(xiàn)
32基于自定義幀的PC與EEPROM串行通信設(shè)計(jì)
13基于RS-485變頻器與PC機(jī)串行通信的實(shí)現(xiàn)
52用組態(tài)王實(shí)現(xiàn)PC機(jī)與多臺(tái)單片機(jī)的遠(yuǎn)程通信
61基于FPGA的串行接收模塊的設(shè)計(jì)
18基于單片機(jī)的CPLD/FPGA被動(dòng)串行下載配置的實(shí)現(xiàn)
19PC MCU串行通信的應(yīng)用設(shè)計(jì)方法
13DSP與PC機(jī)串行通訊的設(shè)計(jì)
10PIC16系列單片機(jī)與PC機(jī)串行通信的軟硬件實(shí)現(xiàn)
85PLC串行通信在測(cè)控裝置中的實(shí)現(xiàn)
16異步收發(fā)通信端口(UART)的FPGA實(shí)現(xiàn)
55基于FPGA的高速串行傳輸接口研究與實(shí)現(xiàn)
44如何實(shí)現(xiàn)(電腦)PC機(jī)與單片機(jī)AT89C51的串行通信
4907TMS320C32與PC機(jī)串行通信的軟件實(shí)現(xiàn)方法
1415
TMS320F240與PC機(jī)串行通訊的設(shè)計(jì)
1388
收費(fèi)系統(tǒng)中PC機(jī)與LED顯示屏的串行通信及顯示字符的點(diǎn)陣提取
1198#硬聲創(chuàng)作季 數(shù)字設(shè)計(jì)FPGA應(yīng)用:串行通信_1基礎(chǔ)


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


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




評(píng)論