陳啟發(fā) 羅 京
(中國(guó)南車(chē)股份有限公司 株洲電力機(jī)車(chē)有限公司,湖南 株洲 412001)
異步串行通信要求的傳輸線少、可靠性高、傳輸距離遠(yuǎn),被廣泛應(yīng)用于計(jì)算機(jī)和外設(shè)的數(shù)據(jù)交換。異步串行通信是以幀為單位,每幀按照通信協(xié)議進(jìn)行傳輸,并且數(shù)據(jù)的發(fā)送端和接收端都使用各自的時(shí)鐘控制數(shù)據(jù)的發(fā)送和接收過(guò)程[1];接收端先數(shù)據(jù)解調(diào),然后將有效數(shù)據(jù)傳輸給終端設(shè)備。
對(duì)于接收端的數(shù)據(jù)解調(diào),首先要從數(shù)據(jù)流中提取同步信號(hào)位信息,然后提取數(shù)據(jù)位信號(hào)。同步信號(hào)位信息提取性能的好壞直接影響到整個(gè)數(shù)據(jù)的解調(diào)質(zhì)量,甚至影響整個(gè)通信系統(tǒng)的性能[2]。傳統(tǒng)的幀設(shè)計(jì)很難做到位同步,隨著FPGA的飛速發(fā)展及Verilog語(yǔ)言的出現(xiàn),用FPGA來(lái)實(shí)現(xiàn)同步信號(hào)位的提取,不僅簡(jiǎn)化了電路、縮小了體積、提高了可靠性,而且設(shè)計(jì)時(shí)的靈活性更大、保密性更好。
FPGA的輸入是485收發(fā)器傳輸過(guò)來(lái)的信號(hào)rxd,并不是標(biāo)準(zhǔn)的485通信協(xié)議,其幀結(jié)構(gòu)如圖1所示,其特點(diǎn)如下:
圖1 輸入信號(hào)rxd波形
(1)每一幀長(zhǎng)度固定為25位;
(2)波特率為 1Mbit/s;
(3)每一幀由同步信號(hào)位和數(shù)據(jù)位組成,前13位為1111111111110的二進(jìn)制同步序列,后12位為數(shù)據(jù)位;
(4)當(dāng)矩形脈沖信號(hào)占空比為75%時(shí),表示數(shù)據(jù)“1”;當(dāng)矩形脈沖信號(hào)占空比為25%時(shí),表示數(shù)據(jù)“0”。
FPGA接收信號(hào)的步驟如下:
(1)先檢測(cè)輸入信號(hào)每一位數(shù)據(jù)的上升沿,當(dāng)檢測(cè)到輸入信號(hào)的上升沿,把輸入采樣信號(hào)tb_zhen置1,并開(kāi)始計(jì)數(shù),當(dāng)計(jì)數(shù)計(jì)到輸入信號(hào)每一位的中間位置時(shí),把tb_zhen置0,保證每次采樣都是在每一位數(shù)據(jù)的中點(diǎn)處,可以得到一組與輸入同步的30%占空比的方波信號(hào)tb_zhen;
(2)在tb_zhen下降沿的時(shí)候,開(kāi)始讀取輸入信號(hào)電平,此時(shí)得到的邏輯電平就認(rèn)為是輸入信號(hào)的電平信號(hào),讀取的信號(hào)電平較輸入有0.5us的延時(shí);
(3)幀同步的提取,可以考慮采用有限狀態(tài)機(jī)實(shí)現(xiàn)幀同步,也可以采用隊(duì)列模式實(shí)現(xiàn),當(dāng)13位寄存器中出現(xiàn)1111111111110時(shí),就認(rèn)為同步完成,數(shù)據(jù)位已經(jīng)到來(lái);
(4)當(dāng)檢測(cè)到同步完成后,開(kāi)始接收和發(fā)送數(shù)據(jù),當(dāng)下一次同步完成時(shí),進(jìn)行下一輪數(shù)據(jù)的接收和發(fā)送。
部分程序的源代碼如下:
捕捉到幀同步完成后,就可以開(kāi)始采集數(shù)據(jù)位,然后根據(jù)需要采用串行或并行發(fā)送給上位機(jī)。
程序經(jīng)過(guò)綜合后得出的原理圖模型如圖2所示。
圖2 原理圖模型
圖3 實(shí)際檢測(cè)的波形
(1)clock系統(tǒng)時(shí)鐘輸入,為30M的晶振;
(2)rxd為485芯片傳輸?shù)男盘?hào),數(shù)據(jù)的輸入端口;
(3)tb_zhen為輸入信號(hào)采集的同步讀取信號(hào);
(4)sys_tb為幀同步完成信號(hào);
(5)sys_pd為同步信號(hào)位數(shù)據(jù)串行輸出端口;
(6)sys_zhen為完整的數(shù)據(jù)幀串行輸出端口;
(7)sys_sj為解幀后的串行輸出端口。
為了進(jìn)行對(duì)數(shù)據(jù)提取的檢測(cè),將程序下載到EP1C6系列的FPGA里進(jìn)行數(shù)據(jù)采集,為了便于觀察,主要測(cè)量5種波形:tb_zhen的波形、幀同步完成sys_tb波形、完整的幀sjs_zhen波形、同步信號(hào)位sys_pd波形、數(shù)據(jù)位sys_sj波形。如圖3所示。(a)是rxd和tb_zhen的波形,(b)是 rxd 和 sys_tb 的波形,(c)是 rxd 和 sys_zhen 的波形,(d)是rxd和sys_pd的波形,(e)是rxd和sys_sj的波形。從下面的波形可以看出,解幀后的輸出波形和輸入波形是一樣的,說(shuō)明對(duì)輸入電平的讀取及幀同步過(guò)程是正確的,并成功地提取了同步信號(hào)位和數(shù)據(jù)位數(shù)據(jù)。
本文使用Verilog語(yǔ)言成功地實(shí)現(xiàn)了對(duì)輸入電平的正確讀取和幀同步的提取,體現(xiàn)了FPGA的強(qiáng)大功能。文中的通信協(xié)議并不是標(biāo)準(zhǔn)的485通信協(xié)議,但是實(shí)際效果比485通信協(xié)議方便可靠,具有一定的應(yīng)用價(jià)值。
[1]陽(yáng)憲惠.現(xiàn)場(chǎng)總線技術(shù)及其應(yīng)用[M].清華大學(xué)出版社,1999.
[2]葉懋,景新辛,楊海燕.基于Verilog語(yǔ)言的幀同步的實(shí)現(xiàn)[J].系統(tǒng)仿真技術(shù),2007.
[3]夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程[M].北京航空航天大學(xué)出版社,2008.
[4]Lee,Weng Fook.Verilog coding for logic synthesis[M].Hoboken,N.J.:Wiley-Interscience,2003.