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