姜日東,徐志躍
(北京航空航天大學(xué) 北京 100191)
PCI總線因其速度高、兼容性好、可靠性高且成本低等優(yōu)點(diǎn)使其在各種與主機(jī)通信的總線技術(shù)中優(yōu)勢很明顯[1],而LVDS(Low Voltage Differential Signaling)通信協(xié)議采用數(shù)據(jù)串行化差分信號傳輸方式,可以有效地降低噪聲和低電磁干擾,具有低功耗、低噪聲、低成本等優(yōu)點(diǎn)使數(shù)據(jù)能在差分傳輸線或平衡電纜上以幾百兆比特/秒的速度傳輸[2],因而廣泛應(yīng)用于高速信號傳輸?shù)膱龊现?。在基于PCI總線的數(shù)據(jù)采集卡對LVDS數(shù)據(jù)接收過程中,底層板卡收到的每一幀數(shù)據(jù)通常是以中斷方式通知上位機(jī)來進(jìn)行讀取。在某些工程項(xiàng)目中,上位機(jī)不僅要完成數(shù)據(jù)存儲(chǔ)而且還要對數(shù)據(jù)進(jìn)行實(shí)時(shí)解析顯示,當(dāng)要接收的數(shù)據(jù)量很大,數(shù)據(jù)流很快時(shí),經(jīng)常出現(xiàn)上位機(jī)來不及響應(yīng)底層板卡中斷而導(dǎo)致數(shù)據(jù)丟失。針對這一問題,本文設(shè)計(jì)了一種大容量LVDS數(shù)據(jù)采集卡,在板卡上增加了數(shù)據(jù)存儲(chǔ)模塊,既滿足在采集數(shù)據(jù)的過程中能夠?qū)?shù)據(jù)進(jìn)行實(shí)時(shí)解析顯示也保證了所采集的數(shù)據(jù)能夠被無丟失地存儲(chǔ)下來。
本文所設(shè)計(jì)的基于PCI總線無時(shí)鐘LVDS數(shù)據(jù)采集卡主要接收產(chǎn)品發(fā)送過來的兩通道無時(shí)鐘LVDS數(shù)據(jù)。按功能該板卡可分為LVDS數(shù)據(jù)的接收模塊,基于NAND-FLASH的大數(shù)據(jù)量存儲(chǔ)模塊和PCI總線接口模塊。在采集數(shù)據(jù)的過程中,不需要上位機(jī)對數(shù)據(jù)進(jìn)行存儲(chǔ),采集卡會(huì)將數(shù)據(jù)先存儲(chǔ)在本地存儲(chǔ)器中,同時(shí)底層板卡每隔五幀數(shù)據(jù)以中斷的方式通知上位機(jī)讀取一幀數(shù)據(jù)進(jìn)行實(shí)時(shí)解析顯示。等到本次數(shù)據(jù)接收完畢后,上位機(jī)再從底層板卡的存儲(chǔ)器中將接收到數(shù)據(jù)讀取上來進(jìn)行文件存儲(chǔ)和后續(xù)的分析。
基于PCI總線LVDS數(shù)據(jù)采集卡硬件總體設(shè)計(jì)如圖1所示。
圖1 系統(tǒng)硬件結(jié)構(gòu)圖Fig.1 Structure diagram of the hardware system
本數(shù)據(jù)采集卡以CycloneⅢ系列FPGA為核心構(gòu)建,通過PCI-9054橋接芯片實(shí)現(xiàn)本地總線與PCI總線的通信,采用LVDS信號接收芯片完成差分信號到單端信號的轉(zhuǎn)換,數(shù)據(jù)存儲(chǔ)模塊使用NAND-FLASH來實(shí)現(xiàn)。利用FPGA控制硬件的總體時(shí)序邏輯,完成對LVDS數(shù)據(jù)的采集、存儲(chǔ)以及上傳操作。板卡硬件實(shí)物如圖2所示。
圖2 數(shù)據(jù)采集卡實(shí)物Fig.2 Physical map of data acquisition card
數(shù)據(jù)接收模塊采用DS90LV048芯片將差分LVDS信號轉(zhuǎn)換成單端信號輸入到FPGA,該芯片具有4路轉(zhuǎn)換通道,最高轉(zhuǎn)換速率可達(dá)400Mbps。DS90LV048每路接收通道接有100歐的終端匹配電阻進(jìn)行阻抗匹配。通過FPGA內(nèi)部的協(xié)議解析模塊完成串行信號到并行數(shù)據(jù)的轉(zhuǎn)換,進(jìn)而實(shí)現(xiàn)LVDS數(shù)據(jù)的采集和存儲(chǔ)[3]。
該模塊采用兩片型號為K9F8G08U0M的NAND-FLASH實(shí)現(xiàn)本地采集數(shù)據(jù)的存儲(chǔ),K9F8G08U0M具有1Gbyte的數(shù)據(jù)存儲(chǔ)容量,數(shù)據(jù)線與地址線復(fù)用,并行數(shù)據(jù)傳輸,除了8路I/O引腳與FPGA直接相連外,控制引腳如CE_等均通過電阻上拉后再與FPGA相連。
PCI總線接口模塊采用FPGA與PCI-9054橋接芯片來實(shí)現(xiàn)PCI總線和局部(Local)總線之間的信息傳遞。PCI-9054提供了PCI,EEPROM,LOCAL總線3個(gè)接口,其作為橋接芯片在PCI總線與LOCAL總線之間傳遞信息,既可以作為2個(gè)總線的主控設(shè)備去控制總線也可以作為2個(gè)總線的目標(biāo)設(shè)備去響應(yīng)總線。本采集卡的PCI-9054工作在C模式下,芯片上的模式選擇引腳MODE[1:0]都置低,在該模式下PCI總線中的地址線與數(shù)據(jù)線被分開,編程控制較為簡單。Local總線即為PCI-9054與FPGA互聯(lián)部分,F(xiàn)PGA需要配合LOCAL總線信號,產(chǎn)生相應(yīng)的時(shí)序,實(shí)現(xiàn)讀寫功能[4]。其中重要的通信引腳有LA[31:2](地址)、LD[31:0](數(shù)據(jù))、LHOLD(總線請求)、LHOLDA(總線)應(yīng)答,LADS#(地址周期開始)、READY#(局部總線準(zhǔn)備好)、LINT#(局部中斷)等。PCI-9054內(nèi)有兩路DMA數(shù)據(jù)傳輸通道,可以使數(shù)據(jù)在PC機(jī)與PCI板卡之間進(jìn)行高速傳輸[5]。本文所設(shè)計(jì)的LVDS數(shù)據(jù)采集卡即采用DMA數(shù)據(jù)傳輸方式來實(shí)現(xiàn)本地存儲(chǔ)數(shù)據(jù)的快速上傳。
PCI-9054芯片上電的時(shí)候要從外部EEPROM讀取數(shù)據(jù)信息來配置內(nèi)部寄存器、板卡的硬件資源要求以及選擇PCI-9054的工作方式,因此EEPROM的配置信息是十分必要的[6]。本文所設(shè)計(jì)的LVDS數(shù)據(jù)采集卡的EEPROM選用ST93C56芯片,PCI-9054的配置方式為數(shù)據(jù)總線32位寬度,支持DMA數(shù)據(jù)傳輸方式,分配地址空間大小為4M。
本采集卡的核心單元FPGA采用Verilog語言進(jìn)行開發(fā)[7],按照功能分為數(shù)據(jù)采集、數(shù)據(jù)存儲(chǔ)、總線控制3個(gè)功能模塊,通過編程實(shí)現(xiàn)對各個(gè)功能模塊的調(diào)用[8]。FPGA內(nèi)部功能模塊如圖3所示。
圖3 FPGA內(nèi)部各功能模塊Fig.3 Function modules inner FPGA
為了防止數(shù)據(jù)丟失,各個(gè)模塊之間的數(shù)據(jù)在傳輸時(shí)都通過FIFO進(jìn)行緩沖,所以本采集卡在FPGA內(nèi)部開辟了3個(gè)用于數(shù)據(jù)緩存的FIFO。分別是數(shù)據(jù)直接上傳FIFO,數(shù)據(jù)存儲(chǔ)FLASH FIFO和FLASH數(shù)據(jù)上傳FIFO。每個(gè)FIFO的容量都是兩幀數(shù)據(jù)。當(dāng)數(shù)據(jù)從接收模塊向存儲(chǔ)模塊傳輸時(shí)要經(jīng)過數(shù)據(jù)存儲(chǔ)FLASH FIFO進(jìn)行緩沖,當(dāng)數(shù)據(jù)從接收模塊向上位機(jī)傳輸時(shí)由數(shù)據(jù)直接上傳FIFO對其進(jìn)行緩沖,當(dāng)數(shù)據(jù)由FLASH芯片向上位機(jī)傳輸時(shí)則通過FLASH數(shù)據(jù)上傳FIFO進(jìn)行緩沖。
根據(jù)采集卡的設(shè)計(jì)要求和目的可知,需要接收的LVDS串行數(shù)據(jù)沒有時(shí)鐘及相應(yīng)的同步信號,傳送過來的只有5 Mbit/s的串行數(shù)據(jù),數(shù)據(jù)以字節(jié)為單位,每個(gè)字節(jié)共十位,包括1位起始位,8位數(shù)據(jù)位和1位停止位。發(fā)射端以固定周期發(fā)送一幀數(shù)據(jù),每幀數(shù)據(jù)的開始處設(shè)有幀頭。因此數(shù)據(jù)采集功能可分為字節(jié)提取與數(shù)據(jù)判斷傳送兩部分。字節(jié)提取部分將傳送過來的串行10 bit數(shù)據(jù)轉(zhuǎn)化成8 bit字節(jié)數(shù)據(jù),數(shù)據(jù)判斷與傳送部分將采集到的字節(jié)數(shù)據(jù)進(jìn)行判斷,如果檢測到幀頭就開始一幀數(shù)據(jù)的向外傳送存儲(chǔ)操作,直到傳完一幀數(shù)據(jù)為止。
字節(jié)提取部分:傳送過來的數(shù)據(jù)是5 Mbit/s,板卡采用40 M時(shí)鐘,所以要對本地時(shí)鐘進(jìn)行分頻產(chǎn)生5 M的采樣時(shí)鐘,由于發(fā)送端時(shí)鐘與本地時(shí)鐘不同,采用本地產(chǎn)生的時(shí)鐘會(huì)產(chǎn)生累積誤差,導(dǎo)致采集到的數(shù)據(jù)錯(cuò)位。因此采集卡的采集時(shí)鐘每個(gè)字節(jié)同步一次,用本地的40 M時(shí)鐘來對起始位進(jìn)行檢測,如果檢測到起始位則立即產(chǎn)生5 M的采集時(shí)鐘用于后續(xù)的數(shù)據(jù)采集,在停止位取消采集時(shí)鐘。本模塊設(shè)有一個(gè)八位的串并轉(zhuǎn)換移位寄存器,當(dāng)檢測到起始位并且采樣時(shí)鐘啟動(dòng)時(shí),該寄存器逐位接收到來的串行數(shù)據(jù),同時(shí)依據(jù)采樣時(shí)鐘逐位右移,直到經(jīng)過八個(gè)采樣時(shí)鐘遇到停止位為止,此時(shí)該寄存器的數(shù)據(jù)即為接收到的并行數(shù)據(jù)。為了防止毛刺信號的干擾導(dǎo)致對一字節(jié)起始位的誤判或漏判,每次檢測到一個(gè)字節(jié)的起始位后再進(jìn)行采集檢測一次,連續(xù)兩次采到的起始位電平一致則確定是有效起始位,進(jìn)而產(chǎn)生采樣時(shí)鐘進(jìn)行采集。
數(shù)據(jù)判斷與傳送部分:當(dāng)數(shù)據(jù)采集部分采完一字節(jié)數(shù)據(jù)后,會(huì)以標(biāo)志位的方式通知數(shù)據(jù)判斷與傳送部分進(jìn)行幀頭判斷,如果判斷到幀頭則認(rèn)為一幀數(shù)據(jù)到來,對后續(xù)接收到的數(shù)據(jù)均傳進(jìn)數(shù)據(jù)存儲(chǔ)FLASH FIFO中,直到傳完一幀數(shù)據(jù)為止,然后等待下一幀數(shù)據(jù)的到來重新判斷幀頭。同時(shí)按照設(shè)計(jì)要求,為了減輕上位機(jī)的負(fù)擔(dān),底層板卡每接收到五幀數(shù)據(jù)向上位機(jī)傳送一幀數(shù)據(jù)來進(jìn)行實(shí)時(shí)解析顯示。因此該模塊設(shè)有一計(jì)數(shù)器,對接收到的幀數(shù)進(jìn)行計(jì)數(shù),當(dāng)收到五幀數(shù)據(jù)時(shí),在將一幀數(shù)據(jù)傳送到數(shù)據(jù)存儲(chǔ)FLASH FIFO中的同時(shí)也傳進(jìn)數(shù)據(jù)直接上傳FIFO中,并通過中斷通知上位機(jī)以DMA方式從數(shù)據(jù)直接上傳FIFO中讀取數(shù)據(jù)進(jìn)行實(shí)時(shí)解析顯示。
數(shù)據(jù)存儲(chǔ)模塊實(shí)時(shí)檢測數(shù)據(jù)存儲(chǔ)FLASH FIFO中是否有一幀數(shù)據(jù)存在,如果有則將一幀數(shù)據(jù)存入FLASH芯片中。當(dāng)數(shù)據(jù)采集結(jié)束,上位機(jī)要讀取FALSH芯片中的數(shù)據(jù)時(shí),該模塊也要檢測FLASH數(shù)據(jù)上傳FIFO是否為空,如果為空則從FLASH芯片中取出兩幀數(shù)據(jù)存入到FLASH數(shù)據(jù)上傳FIFO中,并以中斷的方式通知上位機(jī)來進(jìn)行讀取,當(dāng)FLASH數(shù)據(jù)上傳FIFO又為空時(shí),數(shù)據(jù)存儲(chǔ)模塊繼續(xù)向其傳送數(shù)據(jù),直到接收的所有數(shù)據(jù)都被上位機(jī)取走為止。因?yàn)镹AND-FLASH本身存在壞塊問題,所以每次上電后該接口模塊首先對硬件進(jìn)行一次壞塊搜索,在后續(xù)的操作過程中將壞塊屏蔽掉。
總線控制模塊接收來自上位機(jī)通過PCI-9054發(fā)送過來的指令進(jìn)行相應(yīng)的操作,同時(shí)配合上位機(jī)進(jìn)行數(shù)據(jù)的DMA傳輸操作,該模塊循環(huán)查詢LADS#信號,當(dāng)其為低時(shí)說明PCI總線對本地發(fā)起總線操作,如果LOCAL端完成相應(yīng)的指令操作或要上傳的數(shù)據(jù)已準(zhǔn)備好就及時(shí)給出READY#信號釋放總線。
為了驗(yàn)證板卡功能,采用一塊無時(shí)鐘LVDS數(shù)據(jù)發(fā)送板卡與設(shè)計(jì)的無時(shí)鐘LVDS數(shù)據(jù)接收板卡相連,發(fā)送板卡以固定周期發(fā)送一幀數(shù)據(jù),數(shù)據(jù)的格式按照工程協(xié)議要求設(shè)定。觀察接收板卡測試界面顯示接收的數(shù)據(jù)。試驗(yàn)板卡連接如圖4所示。
圖4 無時(shí)鐘LVDS數(shù)據(jù)接收試驗(yàn)Fig.4 Experiment of receiving non-clock LVDS signal
測試結(jié)果如圖5所示:從實(shí)驗(yàn)結(jié)果可知接收數(shù)據(jù)顯示界面的顯示結(jié)果和發(fā)送板卡的發(fā)送數(shù)據(jù)內(nèi)容完全一致,說明本采集卡能夠很好地接收無時(shí)鐘LVDS數(shù)據(jù)。
圖5 實(shí)驗(yàn)結(jié)果Fig.5 Experiment of receiving non-clock LVDS signal
文中設(shè)計(jì)了一種基于PCI總線的無時(shí)鐘LVDS數(shù)據(jù)采集卡,該采集卡結(jié)構(gòu)緊湊,工作穩(wěn)定,并且在該板卡的基礎(chǔ)上對無時(shí)鐘LVDS數(shù)據(jù)接收問題進(jìn)行了分析研究,通過每字節(jié)同步接收時(shí)鐘的方式保證了接收數(shù)據(jù)的準(zhǔn)確性,板卡上自帶的大容量存儲(chǔ)器即使在上位機(jī)負(fù)擔(dān)較重的情況下仍能保證數(shù)據(jù)的無丟失接收,該板卡可廣泛應(yīng)用于航空測控領(lǐng)域。在教學(xué)試驗(yàn)中,學(xué)生可利用該板卡學(xué)習(xí)verilogHDL語言對FPGA的開發(fā)及PCI總線的相關(guān)操作,有助于提高自身的專業(yè)技能。
[1]于勁松,李行善.美國軍用自動(dòng)測試系統(tǒng)的發(fā)展趨勢[J].測控技術(shù),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]宋千.高速數(shù)據(jù)采集系統(tǒng)理論與實(shí)現(xiàn)技術(shù)研究[D].長沙:國防科技大學(xué),2001.
[3]黃曉敏.LVDS驅(qū)動(dòng)器電路設(shè)計(jì)及其硬件實(shí)現(xiàn)[D].武漢:華中科技大學(xué),2004.
[4]李貴山,陳金鵬.PCI局部總線及其應(yīng)用[M].西安:西安電子科技大學(xué)出版社,2003.
[5]PCI-9054 Data Book Version 2.1,PCI 9054 Data Book[S].U.S.:PLX,2000
[6]伊勇,李寧.PCI總線設(shè)備開發(fā)寶典[M].北京:北京航空航天大學(xué)出版社,2005.
[7]夏宇聞.復(fù)雜數(shù)字邏輯系統(tǒng)的Verilog HDL設(shè)計(jì)技術(shù)和方法[M].北京:高等教育出版社,2000.
[8]褚振勇,翁木云.FPGA設(shè)計(jì)及應(yīng)用[M].西安:西安電子科技大學(xué)出版社,2002.