姜日東,徐志躍
(北京航空航天大學 北京 100191)
PCI總線因其速度高、兼容性好、可靠性高且成本低等優點使其在各種與主機通信的總線技術中優勢很明顯[1],而LVDS(Low Voltage Differential Signaling)通信協議采用數據串行化差分信號傳輸方式,可以有效地降低噪聲和低電磁干擾,具有低功耗、低噪聲、低成本等優點使數據能在差分傳輸線或平衡電纜上以幾百兆比特/秒的速度傳輸[2],因而廣泛應用于高速信號傳輸的場合中。在基于PCI總線的數據采集卡對LVDS數據接收過程中,底層板卡收到的每一幀數據通常是以中斷方式通知上位機來進行讀取。在某些工程項目中,上位機不僅要完成數據存儲而且還要對數據進行實時解析顯示,當要接收的數據量很大,數據流很快時,經常出現上位機來不及響應底層板卡中斷而導致數據丟失。針對這一問題,本文設計了一種大容量LVDS數據采集卡,在板卡上增加了數據存儲模塊,既滿足在采集數據的過程中能夠對數據進行實時解析顯示也保證了所采集的數據能夠被無丟失地存儲下來。
本文所設計的基于PCI總線無時鐘LVDS數據采集卡主要接收產品發送過來的兩通道無時鐘LVDS數據。按功能該板卡可分為LVDS數據的接收模塊,基于NAND-FLASH的大數據量存儲模塊和PCI總線接口模塊。在采集數據的過程中,不需要上位機對數據進行存儲,采集卡會將數據先存儲在本地存儲器中,同時底層板卡每隔五幀數據以中斷的方式通知上位機讀取一幀數據進行實時解析顯示。等到本次數據接收完畢后,上位機再從底層板卡的存儲器中將接收到數據讀取上來進行文件存儲和后續的分析。
基于PCI總線LVDS數據采集卡硬件總體設計如圖1所示。

圖1 系統硬件結構圖Fig.1 Structure diagram of the hardware system
本數據采集卡以CycloneⅢ系列FPGA為核心構建,通過PCI-9054橋接芯片實現本地總線與PCI總線的通信,采用LVDS信號接收芯片完成差分信號到單端信號的轉換,數據存儲模塊使用NAND-FLASH來實現。利用FPGA控制硬件的總體時序邏輯,完成對LVDS數據的采集、存儲以及上傳操作。板卡硬件實物如圖2所示。

圖2 數據采集卡實物Fig.2 Physical map of data acquisition card
數據接收模塊采用DS90LV048芯片將差分LVDS信號轉換成單端信號輸入到FPGA,該芯片具有4路轉換通道,最高轉換速率可達400Mbps。DS90LV048每路接收通道接有100歐的終端匹配電阻進行阻抗匹配。通過FPGA內部的協議解析模塊完成串行信號到并行數據的轉換,進而實現LVDS數據的采集和存儲[3]。
該模塊采用兩片型號為K9F8G08U0M的NAND-FLASH實現本地采集數據的存儲,K9F8G08U0M具有1Gbyte的數據存儲容量,數據線與地址線復用,并行數據傳輸,除了8路I/O引腳與FPGA直接相連外,控制引腳如CE_等均通過電阻上拉后再與FPGA相連。
PCI總線接口模塊采用FPGA與PCI-9054橋接芯片來實現PCI總線和局部(Local)總線之間的信息傳遞。PCI-9054提供了PCI,EEPROM,LOCAL總線3個接口,其作為橋接芯片在PCI總線與LOCAL總線之間傳遞信息,既可以作為2個總線的主控設備去控制總線也可以作為2個總線的目標設備去響應總線。本采集卡的PCI-9054工作在C模式下,芯片上的模式選擇引腳MODE[1:0]都置低,在該模式下PCI總線中的地址線與數據線被分開,編程控制較為簡單。Local總線即為PCI-9054與FPGA互聯部分,FPGA需要配合LOCAL總線信號,產生相應的時序,實現讀寫功能[4]。其中重要的通信引腳有LA[31:2](地址)、LD[31:0](數據)、LHOLD(總線請求)、LHOLDA(總線)應答,LADS#(地址周期開始)、READY#(局部總線準備好)、LINT#(局部中斷)等。PCI-9054內有兩路DMA數據傳輸通道,可以使數據在PC機與PCI板卡之間進行高速傳輸[5]。本文所設計的LVDS數據采集卡即采用DMA數據傳輸方式來實現本地存儲數據的快速上傳。
PCI-9054芯片上電的時候要從外部EEPROM讀取數據信息來配置內部寄存器、板卡的硬件資源要求以及選擇PCI-9054的工作方式,因此EEPROM的配置信息是十分必要的[6]。本文所設計的LVDS數據采集卡的EEPROM選用ST93C56芯片,PCI-9054的配置方式為數據總線32位寬度,支持DMA數據傳輸方式,分配地址空間大小為4M。
本采集卡的核心單元FPGA采用Verilog語言進行開發[7],按照功能分為數據采集、數據存儲、總線控制3個功能模塊,通過編程實現對各個功能模塊的調用[8]。FPGA內部功能模塊如圖3所示。

圖3 FPGA內部各功能模塊Fig.3 Function modules inner FPGA
為了防止數據丟失,各個模塊之間的數據在傳輸時都通過FIFO進行緩沖,所以本采集卡在FPGA內部開辟了3個用于數據緩存的FIFO。分別是數據直接上傳FIFO,數據存儲FLASH FIFO和FLASH數據上傳FIFO。每個FIFO的容量都是兩幀數據。當數據從接收模塊向存儲模塊傳輸時要經過數據存儲FLASH FIFO進行緩沖,當數據從接收模塊向上位機傳輸時由數據直接上傳FIFO對其進行緩沖,當數據由FLASH芯片向上位機傳輸時則通過FLASH數據上傳FIFO進行緩沖。
根據采集卡的設計要求和目的可知,需要接收的LVDS串行數據沒有時鐘及相應的同步信號,傳送過來的只有5 Mbit/s的串行數據,數據以字節為單位,每個字節共十位,包括1位起始位,8位數據位和1位停止位。發射端以固定周期發送一幀數據,每幀數據的開始處設有幀頭。因此數據采集功能可分為字節提取與數據判斷傳送兩部分。字節提取部分將傳送過來的串行10 bit數據轉化成8 bit字節數據,數據判斷與傳送部分將采集到的字節數據進行判斷,如果檢測到幀頭就開始一幀數據的向外傳送存儲操作,直到傳完一幀數據為止。
字節提取部分:傳送過來的數據是5 Mbit/s,板卡采用40 M時鐘,所以要對本地時鐘進行分頻產生5 M的采樣時鐘,由于發送端時鐘與本地時鐘不同,采用本地產生的時鐘會產生累積誤差,導致采集到的數據錯位。因此采集卡的采集時鐘每個字節同步一次,用本地的40 M時鐘來對起始位進行檢測,如果檢測到起始位則立即產生5 M的采集時鐘用于后續的數據采集,在停止位取消采集時鐘。本模塊設有一個八位的串并轉換移位寄存器,當檢測到起始位并且采樣時鐘啟動時,該寄存器逐位接收到來的串行數據,同時依據采樣時鐘逐位右移,直到經過八個采樣時鐘遇到停止位為止,此時該寄存器的數據即為接收到的并行數據。為了防止毛刺信號的干擾導致對一字節起始位的誤判或漏判,每次檢測到一個字節的起始位后再進行采集檢測一次,連續兩次采到的起始位電平一致則確定是有效起始位,進而產生采樣時鐘進行采集。
數據判斷與傳送部分:當數據采集部分采完一字節數據后,會以標志位的方式通知數據判斷與傳送部分進行幀頭判斷,如果判斷到幀頭則認為一幀數據到來,對后續接收到的數據均傳進數據存儲FLASH FIFO中,直到傳完一幀數據為止,然后等待下一幀數據的到來重新判斷幀頭。同時按照設計要求,為了減輕上位機的負擔,底層板卡每接收到五幀數據向上位機傳送一幀數據來進行實時解析顯示。因此該模塊設有一計數器,對接收到的幀數進行計數,當收到五幀數據時,在將一幀數據傳送到數據存儲FLASH FIFO中的同時也傳進數據直接上傳FIFO中,并通過中斷通知上位機以DMA方式從數據直接上傳FIFO中讀取數據進行實時解析顯示。
數據存儲模塊實時檢測數據存儲FLASH FIFO中是否有一幀數據存在,如果有則將一幀數據存入FLASH芯片中。當數據采集結束,上位機要讀取FALSH芯片中的數據時,該模塊也要檢測FLASH數據上傳FIFO是否為空,如果為空則從FLASH芯片中取出兩幀數據存入到FLASH數據上傳FIFO中,并以中斷的方式通知上位機來進行讀取,當FLASH數據上傳FIFO又為空時,數據存儲模塊繼續向其傳送數據,直到接收的所有數據都被上位機取走為止。因為NAND-FLASH本身存在壞塊問題,所以每次上電后該接口模塊首先對硬件進行一次壞塊搜索,在后續的操作過程中將壞塊屏蔽掉。
總線控制模塊接收來自上位機通過PCI-9054發送過來的指令進行相應的操作,同時配合上位機進行數據的DMA傳輸操作,該模塊循環查詢LADS#信號,當其為低時說明PCI總線對本地發起總線操作,如果LOCAL端完成相應的指令操作或要上傳的數據已準備好就及時給出READY#信號釋放總線。
為了驗證板卡功能,采用一塊無時鐘LVDS數據發送板卡與設計的無時鐘LVDS數據接收板卡相連,發送板卡以固定周期發送一幀數據,數據的格式按照工程協議要求設定。觀察接收板卡測試界面顯示接收的數據。試驗板卡連接如圖4所示。

圖4 無時鐘LVDS數據接收試驗Fig.4 Experiment of receiving non-clock LVDS signal
測試結果如圖5所示:從實驗結果可知接收數據顯示界面的顯示結果和發送板卡的發送數據內容完全一致,說明本采集卡能夠很好地接收無時鐘LVDS數據。

圖5 實驗結果Fig.5 Experiment of receiving non-clock LVDS signal
文中設計了一種基于PCI總線的無時鐘LVDS數據采集卡,該采集卡結構緊湊,工作穩定,并且在該板卡的基礎上對無時鐘LVDS數據接收問題進行了分析研究,通過每字節同步接收時鐘的方式保證了接收數據的準確性,板卡上自帶的大容量存儲器即使在上位機負擔較重的情況下仍能保證數據的無丟失接收,該板卡可廣泛應用于航空測控領域。在教學試驗中,學生可利用該板卡學習verilogHDL語言對FPGA的開發及PCI總線的相關操作,有助于提高自身的專業技能。
[1]于勁松,李行善.美國軍用自動測試系統的發展趨勢[J].測控技術,2001,20(12):1-3 YU Jing-song,LI Xing-shan.Future trends of U.S.Military ATS[J].Measurement&Control Technology,2001,20(12):1-3.
[2]宋千.高速數據采集系統理論與實現技術研究[D].長沙:國防科技大學,2001.
[3]黃曉敏.LVDS驅動器電路設計及其硬件實現[D].武漢:華中科技大學,2004.
[4]李貴山,陳金鵬.PCI局部總線及其應用[M].西安:西安電子科技大學出版社,2003.
[5]PCI-9054 Data Book Version 2.1,PCI 9054 Data Book[S].U.S.:PLX,2000
[6]伊勇,李寧.PCI總線設備開發寶典[M].北京:北京航空航天大學出版社,2005.
[7]夏宇聞.復雜數字邏輯系統的Verilog HDL設計技術和方法[M].北京:高等教育出版社,2000.
[8]褚振勇,翁木云.FPGA設計及應用[M].西安:西安電子科技大學出版社,2002.