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