基于FPGA的異步串行總線設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:高速異步串行總線在現(xiàn)代通信設(shè)備中應(yīng)用越來越廣,文中介紹了一種基于FPGA的高速異步串行總線設(shè)計(jì),詳細(xì)描述了硬件設(shè)計(jì)和總線協(xié)議的實(shí)現(xiàn)方法。在現(xiàn)代通信系統(tǒng)的應(yīng)用中有較高的實(shí)用價(jià)值。
關(guān)鍵詞:異步串口;FPGA器件;Verilog HDL
隨著近代通信技術(shù)的迅猛發(fā)展,對(duì)總線傳輸速率的要求也越來越高。傳統(tǒng)的并行總線在發(fā)展到一定速率后很難再有所突破,并且在實(shí)際應(yīng)用中還存在著大量的弊端,比如:成本相對(duì)較高、抗電磁干擾能力低下、模塊間的總線互聯(lián)繁瑣等等。這些都給串行總線的發(fā)展和應(yīng)用提供了客觀動(dòng)力。串行總線按傳輸模式可分為同步串行總線和異步串行總線兩類;同步串行總線存?zhèn)鬏斶^程中需要攜帶同步時(shí)鐘信號(hào),因此在傳輸距離較長或傳輸速率較高時(shí)會(huì)出現(xiàn)由于時(shí)鐘衰落而引起的誤碼現(xiàn)象,制約了串行總線的傳輸速率和作用距離。而異步串行總線恰恰規(guī)避了這些缺點(diǎn)。因此異步串行總線被大量的應(yīng)用于高速串行通信系統(tǒng)中。異步串行總線的按實(shí)現(xiàn)方式大致可分為兩種,一種是采用專用串行總線接口芯片實(shí)現(xiàn),實(shí)現(xiàn)方便簡(jiǎn)單,但二次開發(fā)性差,不利于系統(tǒng)升級(jí)維護(hù);另一種是基于FPGA等可編程邏輯芯片實(shí)現(xiàn)。后者設(shè)計(jì)靈活,二次開發(fā)型良好,參數(shù)配置便捷,利于系統(tǒng)升級(jí)維護(hù)。本文將詳細(xì)描述一種基于FPGA芯片硬件設(shè)計(jì),采用Verilog HDL硬件描述語言實(shí)現(xiàn)傳輸協(xié)議的高速異步串行總線設(shè)計(jì)。
1 硬件設(shè)計(jì)方案
本設(shè)計(jì)通過高速異步串行總線和上位機(jī)進(jìn)行通信,通過解析消息內(nèi)容完成對(duì)下位機(jī)的實(shí)時(shí)控制與監(jiān)測(cè),并且將監(jiān)測(cè)數(shù)據(jù)及時(shí)準(zhǔn)確的回傳至上位機(jī)本系統(tǒng)要求具備較高的實(shí)時(shí)控制性能,下位機(jī)響應(yīng)上位機(jī)指令要求時(shí)間在3us以內(nèi),模塊間通信穩(wěn)定可靠、級(jí)聯(lián)簡(jiǎn)潔,系統(tǒng)性能升級(jí)方便等。通過對(duì)系統(tǒng)要求研究分析,采用高速異步串行總線實(shí)現(xiàn)模塊間通信比較符合要求。系統(tǒng)框圖如圖1所示。
高速異步串行總線碗件設(shè)計(jì)采用了以FPGA芯片為主,配以接口、時(shí)鐘、電源變換等外圍電路的設(shè)計(jì)思路。選用ALTERA公司的Cvclone系列FPGA作為核心器件。此芯片內(nèi)部有豐富的邏輯資源和存儲(chǔ)資源,有豐富的時(shí)鐘網(wǎng)絡(luò)和鎖相環(huán)單元和I/O引腳,能夠滿足異步串行協(xié)議實(shí)現(xiàn)的硬件需求多種電壓?jiǎn)为?dú)使用,有效降低芯片功耗。為了提高FPGA工作穩(wěn)定性和可靠性在硬件設(shè)計(jì)時(shí)專門在其外圍配置了電源監(jiān)測(cè)電路和復(fù)位電路,對(duì)FPGA的各種工作電壓和電流進(jìn)行監(jiān)測(cè),當(dāng)任意一路電壓值發(fā)生突變時(shí),電源監(jiān)測(cè)電路都會(huì)給出命令,立刻關(guān)掉其它電源,或者將FPGA的供電端短路至地端,使FPGA進(jìn)入斷電狀態(tài),確保芯片不會(huì)被損壞。當(dāng)電壓值恢復(fù)正常時(shí),電源監(jiān)測(cè)電路將打開供電電路使FPGA再次進(jìn)入工作狀態(tài),通過復(fù)位信號(hào)啟動(dòng)FPGA的程序從起始狀態(tài)開始工作,確保FPGA芯片的物理安全和運(yùn)行安全,從而有效提高系統(tǒng)的可靠性。設(shè)計(jì)中還采用了LVDS(Low Voltage Differential Signaling)收發(fā)芯片來提高串行總線的驅(qū)動(dòng)能力。單端串行總線從FPGA輸出后經(jīng)LVDS收發(fā)器轉(zhuǎn)化為差分信號(hào)線對(duì)輸出至模塊端口,與其它模塊進(jìn)行物理連接。串行總線采用差分線的連接方式能夠更有效的抵抗傳輸中的共模噪聲,降低傳輸誤碼率,大幅提高通信質(zhì)量。詳細(xì)的設(shè)計(jì)框圖如圖2所示。
2 異步串行總線傳輸協(xié)議
根據(jù)系統(tǒng)對(duì)上下位機(jī)指令響應(yīng)時(shí)間要求,自定義了異步串行總線的傳輸速率和傳輸協(xié)議。因?yàn)楸緟f(xié)議為異步串行傳輸協(xié)議,所以在每包數(shù)據(jù)的前面增加了1.5bit的起始位,在每包數(shù)據(jù)的后面增加了1bit的數(shù)據(jù)停止位作為一包數(shù)據(jù)的開始標(biāo)志和結(jié)束標(biāo)志。為提高數(shù)據(jù)傳輸?shù)臏?zhǔn)確性,在發(fā)送起始位之后和信息數(shù)據(jù)結(jié)束之前分別增加了8bit題頭和題尾,用于數(shù)據(jù)接收方信息同步和數(shù)據(jù)識(shí)別;如果接收方收到的題頭或者題尾任意一個(gè)有誤,就判本包數(shù)據(jù)傳輸有誤。并且在本包數(shù)據(jù)末端增加了CRC-8校驗(yàn)碼,對(duì)發(fā)送的整個(gè)串行碼流進(jìn)行校驗(yàn)。具體傳輸協(xié)議如下:
(1)串行傳輸格式:
起始位→題頭→命令字→信息→題尾→CRC8→停止位;
(2)傳輸速率:40MHz;
(3)起始位:0(1.5bit)
(4)題頭:10100101;
(5)命令字:B7 B6 B5 B4 B3 B2 B1 B0:B0為讀寫控制位(0讀,1寫);B1為數(shù)據(jù)LSB和MSB傳輸標(biāo)志位(0為LSB先出,1為MSB先出);B5B4 B3B2為訪問地址(0000自檢狀態(tài)寄存器,0001控制狀態(tài)寄存器,1110錯(cuò)誤重發(fā)請(qǐng)求標(biāo)志寄存器,1111裝置ID軟件版本寄存器,其它根據(jù)實(shí)際需求任意擴(kuò)展定義);B7B6為傳輸數(shù)據(jù)長度(00為0個(gè)8bit數(shù)據(jù)長度,01為1個(gè)8bit數(shù)據(jù)長度,10為2個(gè)8bit數(shù)據(jù)長度,11為3個(gè)8 bit數(shù)據(jù)長度)等。
(6)信息:長度為8bit的整數(shù)倍;
(7)題尾:01011010;
(8)CRC校驗(yàn)多項(xiàng)式:CRC8=X8+X7+X6+X4+X2+1;
(9)停止位:1(1bit);
(10)無數(shù)據(jù)時(shí)為高電平。讀操作時(shí)后面的數(shù)據(jù)長度為0;不夠8bit的,空位默認(rèn)為“0”。
發(fā)送消息的過程相對(duì)簡(jiǎn)單,只需要按照傳輸格式將所要發(fā)送的消息進(jìn)行打包、CRC-8編碼。然后用時(shí)鐘將打包好的數(shù)據(jù)串行打出即可;接收消息相對(duì)復(fù)雜一些,為了準(zhǔn)確接收數(shù)據(jù),防止因?yàn)闀r(shí)鐘抖動(dòng)及串行數(shù)據(jù)傳輸信號(hào)衰落而導(dǎo)致的誤碼,接收方要盡可能的靠近每比特?cái)?shù)據(jù)位的中點(diǎn)進(jìn)行采樣,所以在設(shè)計(jì)程序時(shí)利用鎖相環(huán)將采樣時(shí)鐘倍頻到傳輸速率的4倍頻進(jìn)行同步采樣,這樣采樣點(diǎn)更加接近數(shù)據(jù)中點(diǎn),采到的數(shù)據(jù)更真實(shí)串行數(shù)據(jù)接收狀態(tài)機(jī)如圖3所示。
3 功能模塊設(shè)計(jì)
根據(jù)對(duì)協(xié)議的分析將整個(gè)串行總線傳輸協(xié)議從功能上劃分為以下幾個(gè)饃塊:發(fā)射模塊、接收模塊、解消息模塊、CRC校驗(yàn)?zāi)K、自檢模塊、控制模塊、ID版本存取模塊和錯(cuò)誤重發(fā)模塊等。模塊關(guān)系圖如圖4所示。
(1)發(fā)射模塊:按照協(xié)議向上位機(jī)回傳監(jiān)測(cè)數(shù)據(jù),發(fā)射錯(cuò)誤重發(fā)請(qǐng)求數(shù)據(jù)等;
(2)接收模塊:接收上位機(jī)下傳的參數(shù)、命令等;完成起始位的檢測(cè)和消息同步,題頭、題尾的對(duì)錯(cuò)判斷,同時(shí)將收到的數(shù)據(jù)進(jìn)行串并轉(zhuǎn)換以8bit為單位打入FIFO (First In First Out)中緩存,備譯碼模塊進(jìn)行命令字譯碼和對(duì)下位機(jī)控制的信息讀取。
(3)CRC校驗(yàn)?zāi)K:CRC校驗(yàn)?zāi)K完成CRC-8編碼功能和CRC-8譯碼功能。當(dāng)發(fā)送消息時(shí),將要發(fā)送的數(shù)據(jù)按8bit打入CRC校驗(yàn)?zāi)K,對(duì)其進(jìn)行編碼,求出校驗(yàn)碼并且拼接到題尾后面將其發(fā)出;當(dāng)接收消息時(shí),接收模塊將收到的串行碼按8bit打入CRC校驗(yàn)?zāi)K,啟動(dòng)CRC譯碼算法,如果譯碼成功則啟動(dòng)解消息模塊進(jìn)行相應(yīng)的后續(xù)工作。如果譯碼失敗,終止本次接收,啟動(dòng)錯(cuò)誤重發(fā)模塊,要求對(duì)放發(fā)送上一包消息。
(4)解消息模塊:CRC校驗(yàn)成功后將啟動(dòng)解消息模塊進(jìn)入工作狀態(tài),從FIFO中讀取命令字?jǐn)?shù)據(jù),對(duì)命令字進(jìn)行解碼識(shí)別,根據(jù)解碼信息肩動(dòng)其它相應(yīng)模塊開始工作。
(5)錯(cuò)誤重發(fā)模塊:當(dāng)接收到串行數(shù)據(jù)流時(shí),經(jīng)過題頭、題尾、CRC譯碼判斷,任何一個(gè)環(huán)節(jié)出現(xiàn)錯(cuò)誤都將終止本次接收流程,同時(shí)啟動(dòng)錯(cuò)誤重發(fā)模塊,發(fā)送錯(cuò)誤重發(fā)請(qǐng)求,要求對(duì)方重新發(fā)送上一包數(shù)據(jù)。
根據(jù)圖4所示流程及軟件模塊功能化分,本設(shè)計(jì)采用Verilog HDL硬件設(shè)計(jì)語言開發(fā)實(shí)現(xiàn)。設(shè)計(jì)靈活,串口速率、編碼模式、傳輸方式等都可根據(jù)系統(tǒng)要求從上位機(jī)下發(fā)參數(shù)進(jìn)行修改。圖5是本串口總線在每秒七萬次的通信頻率狀態(tài)下用Quartus軟件中的SignalTAP logic Analy zer抓出的工作時(shí)序圖??梢钥闯龃诳偩€傳輸穩(wěn)定可靠,完全滿足系統(tǒng)通信的高速傳輸要求。
4 結(jié)束語
本文介紹了一種基于FPGA芯片的高速異步串行總線設(shè)計(jì)??偩€協(xié)議利用Verilog HDL實(shí)現(xiàn),設(shè)計(jì)靈活、可讀性強(qiáng)、維護(hù)方便、升級(jí)移植性能優(yōu)越、傳輸穩(wěn)定可靠。隨著通信系統(tǒng)信息吞吐量的日益增加,這種具備多重優(yōu)點(diǎn)的串行總線設(shè)計(jì)將被大量使用。