新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于USB2.0和DDR2 SDRAM IP核的數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

基于USB2.0和DDR2 SDRAM IP核的數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

作者: 時(shí)間:2017-06-05 來源:網(wǎng)絡(luò) 收藏

引言

隨著計(jì)算機(jī)、微電子和嵌入式系統(tǒng)技術(shù)的發(fā)展,技術(shù)已經(jīng)在生物醫(yī)學(xué)、圖像處理、雷達(dá)系統(tǒng)等眾多領(lǐng)域得到廣泛應(yīng)用。本文設(shè)計(jì)的高速系統(tǒng)是應(yīng)用于芯片現(xiàn)場(chǎng)測(cè)試的實(shí)時(shí)系統(tǒng),由于被測(cè)試芯片為250 MHz 8 bit的高速AD輸出, 因此, 該數(shù)據(jù)采集系統(tǒng)的數(shù)據(jù)采集率是2 Gbps。為了達(dá)到實(shí)時(shí)、高速、海量的數(shù)據(jù)采集, 該系統(tǒng)利用DDR2 SDRAM的高速數(shù)據(jù)傳輸能力和海量存儲(chǔ)能力做為采集數(shù)據(jù)的緩存,然后通過具有即插即用、易擴(kuò)展、傳輸速率較高等特點(diǎn)的USB2.0接口來將DDR2 SDRAM中的數(shù)據(jù)傳輸?shù)接?jì)算機(jī)中進(jìn)行存儲(chǔ)和分析。

1 數(shù)據(jù)采集系統(tǒng)架構(gòu)

該數(shù)據(jù)采集系統(tǒng)的總體架構(gòu)由硬件部分、固件部分和計(jì)算機(jī)上的USB驅(qū)動(dòng)及應(yīng)用程序等幾大部分組成, 本文完成了硬件和固件部分的設(shè)計(jì)。

該系統(tǒng)的硬件部分主要由USB2.0、DDR2SDRAM、MCU以及IF等核心模塊組成, 圖1所示是其系統(tǒng)架構(gòu)圖。

圖1 系統(tǒng)總體架構(gòu)圖

本文引用地址:http://butianyuan.cn/article/201706/349123.htm

USB2.0由控制器和物理傳輸層組成, 其中控制器是在FPGA上實(shí)現(xiàn)的Faraday公司的,物理層可選用SMSC公司的GT3200芯片, 控制器與物理層芯片之間可通過標(biāo)準(zhǔn)的UTMI接口相連。

DDR2 SDRAM控制器是基于Xilinx公司提供的, 工作頻率是125~266 MHz, 與SDRAM之間的接口是64 bit SODIMM筆記本內(nèi)存條接口。作為數(shù)據(jù)存儲(chǔ)的SDRAM 是Samsung 公司的M470T5663QZ3-CE6 2GB 內(nèi)存條。系統(tǒng)的控制核心MCU采用Mentor Graphics公司的增強(qiáng)型8051 M8051EW,該8051核采用兩個(gè)時(shí)鐘周期為一個(gè)機(jī)器周期的高性能架構(gòu), 同時(shí)支持MWAIT信號(hào)來控制程序總線,從而能夠支持慢速的外部程序和數(shù)據(jù)存儲(chǔ)器。IF模塊是該系統(tǒng)設(shè)計(jì)的關(guān)鍵, 它相當(dāng)于DMA的功能,主要負(fù)責(zé)USB與DDR2、外部數(shù)據(jù)接口與DDR2之間的數(shù)據(jù)傳輸。

2 數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)

本文中的數(shù)據(jù)采集系統(tǒng)采用USB2.0和DDR2SDRAM相結(jié)合的設(shè)計(jì)思路,從而打破了傳統(tǒng)數(shù)據(jù)采集系統(tǒng)在實(shí)時(shí)數(shù)據(jù)采集中大容量和高速率不可兼得的瓶頸。在圖1所示的系統(tǒng)架構(gòu)的四個(gè)部分中,由于USB2.0和DDR2控制器都是IP核, 因此, 該系統(tǒng)設(shè)計(jì)的關(guān)鍵在于MCU和IF模塊。

2.1 MCU的設(shè)計(jì)

MCU是數(shù)據(jù)采集系統(tǒng)的控制核心, 主要用于對(duì)USB2.0控制器進(jìn)行配置、查詢和處理USB事務(wù), 以及解析USB設(shè)備請(qǐng)求, 同時(shí),還需配置IF模塊, 處理與IF模塊之間的控制信號(hào)等, 因此,MCU的設(shè)計(jì)包括數(shù)據(jù)接口及控制信號(hào)的設(shè)計(jì)以及固件設(shè)計(jì)兩個(gè)部分。

MCU數(shù)據(jù)總線接口包括與USB2.0控制器和與IF模塊的接口,這里的USB2.0控制器和IF模塊相當(dāng)于外部設(shè)備掛在MCU的外部存儲(chǔ)器總線和ESFR(外部特殊功能寄存器) 總線上。控制信號(hào)主要用于計(jì)算機(jī)上的控制臺(tái)控制IF模塊數(shù)據(jù)傳輸?shù)拈_始與結(jié)束, 通常包含在USB的設(shè)備請(qǐng)求中。

整個(gè)固件的開發(fā)可在Keil C下完成, 并可通過JTAG進(jìn)行調(diào)試。開發(fā)一般包括三部分: 一是協(xié)助USB控制器完成總線列舉過程,讓計(jì)算機(jī)識(shí)別USB設(shè)備; 二是通過解析自定義USB設(shè)備請(qǐng)求,來對(duì)采集模式、深度等進(jìn)行配置, 從而控制采集的開始與結(jié)束;三是查詢和處理IN、OUT事務(wù)中斷, 并控制USB數(shù)據(jù)傳輸。

2.2 IF模塊設(shè)計(jì)

IF模塊負(fù)責(zé)接口的轉(zhuǎn)換和數(shù)據(jù)傳輸?shù)目刂?,其結(jié)構(gòu)如圖2所示。其中, usb2ddr和eoc2ddr子模塊分別控制USB2.0與DDR2 SDRAM、外部采集接口與DDR2 SDRAM之間數(shù)據(jù)的上下行傳輸。

上下行數(shù)據(jù)傳輸分別由usb2ddr_ctrl 和eoc2ddr_ctrl模塊中的狀態(tài)機(jī)進(jìn)行控制和管理。其中采集模式和深度由MCU的ESFR總線配置,而傳輸開始信號(hào)則使用MCU的PORT0 [0]、PORT0[1], 結(jié)束信號(hào)連接在MCU的外部中斷NINT0和NINT1上,這樣可使MCU能夠及時(shí)響應(yīng)。上行采集開始后, 首先使eoc2ddr_ctrl中的控制狀態(tài)機(jī)處于寫狀態(tài),并不斷地比較DDR2的地址與配置深度, 直到采集完成。然后再使usb2ddr_ctrl中的控制狀態(tài)機(jī)處于讀狀態(tài),同樣也比較地址與深度,直到數(shù)據(jù)讀取完成。下行傳輸過程則與之相反。

圖2 IF模塊結(jié)構(gòu)框圖。

由于各個(gè)接口上數(shù)據(jù)傳輸?shù)乃俾什煌?因此, 數(shù)據(jù)傳輸時(shí), 要異步FIFO或者緩存。在本設(shè)計(jì)中, 由于各接口速率固定, 因此,可采用雙端口RAM作方式以提高效率并保證數(shù)據(jù)連續(xù), 圖3所示是原理圖。

圖3 原理圖。

當(dāng)下行發(fā)出數(shù)據(jù)時(shí), 從DDR2的125 M×128bit到50 M×8 bit所需要的最小深度為32×8 bit,因?yàn)閺腟DRAM中讀數(shù)據(jù)的最大延遲是26個(gè)DDR2時(shí)鐘周期(即208 ns), 而將DDR2讀出的128 bit發(fā)出則需要16個(gè)時(shí)鐘周期(即320 ns), 因此, 為了保證發(fā)出的數(shù)據(jù)可連續(xù)進(jìn)行乒乓操作, 需要2×128bit的深度。同理,在上行數(shù)據(jù)從DDR2的125 M×128 bit到USB的30 M×32 bit則需要4×128 bit深度,因?yàn)閁SB時(shí)鐘讀完128 bit數(shù)據(jù)需要133.2 ns, 小于SDRAM 讀數(shù)據(jù)延遲的208 ns, 因此, 每次從SDRAM中讀2×128 bit數(shù)據(jù)時(shí),其乒乓操作就至少需要4×128 bit深度。

3 系統(tǒng)的改進(jìn)

本數(shù)據(jù)采集系統(tǒng)對(duì)傳統(tǒng)的數(shù)據(jù)采集系統(tǒng)做了創(chuàng)新型改進(jìn)。改進(jìn)主要是三個(gè)方面: 一是對(duì)數(shù)據(jù)采集的深度實(shí)行可配置模式;二是在功能上不僅作為數(shù)據(jù)采集系統(tǒng), 還能作為數(shù)據(jù)發(fā)生器, 即將采集到計(jì)算機(jī)上的數(shù)據(jù)通過數(shù)據(jù)采集系統(tǒng)發(fā)送出來;三是該數(shù)據(jù)采集系統(tǒng)有兩種工作模式, 即普通采集模式和觸發(fā)采集模式。

深度可配置增加了系統(tǒng)在使用過程中的靈活性。該系統(tǒng)除了采集數(shù)據(jù)外, 還能將數(shù)據(jù)發(fā)出來用于芯片的FPGA原型驗(yàn)證,從而避免了緩慢的大數(shù)據(jù)量仿真, 更增強(qiáng)了系統(tǒng)的實(shí)用性。通過ESFR配置8 bit的深度寄存器可實(shí)現(xiàn)以16 MByte為單位的深度調(diào)節(jié)。觸發(fā)是數(shù)據(jù)采集系統(tǒng)不可缺少的功能, 因此,該數(shù)據(jù)采集系統(tǒng)分為普通采集模式和觸發(fā)采集模式。觸發(fā)采集模式的原理如圖4所示。在觸發(fā)模式中, 可將SDRAM看做一個(gè)圓形的循環(huán)存儲(chǔ)器,觸發(fā)前后的采集深度同樣也可以通過ESFR配置, 從而實(shí)現(xiàn)觸發(fā)前后的采集深度比例可調(diào)。

圖4 觸發(fā)實(shí)現(xiàn)機(jī)制原理圖。

4 FPGA實(shí)現(xiàn)

FPGA在系統(tǒng)設(shè)計(jì)中具有很好的靈活性和可擴(kuò)展性, 因此, FPGA是一個(gè)非常好的系統(tǒng)實(shí)現(xiàn)平臺(tái)。通過對(duì)數(shù)據(jù)采集系統(tǒng)的資源*估,可得出如表1所列的資源占用結(jié)果。

表1 FPGA的資源占用情況。

本系統(tǒng)最終選擇了Xilinx 公司的FPGA器件Virtex5 LX30。由于DDR2 SDRAM控制器是Xilinx公司的IP核, 故在系統(tǒng)的集成和實(shí)現(xiàn)過程中不可避免的要對(duì)原IP核進(jìn)行改動(dòng), 同時(shí),在ISE中布局布線時(shí), 相應(yīng)地要對(duì)原有UCF文件中的約束進(jìn)行修改, 以滿足時(shí)序要求。本系統(tǒng)除USB2.0的PHY和SDRAM外,其余部分均由FPGA實(shí)現(xiàn), 圖5所示是系統(tǒng)在計(jì)算機(jī)上的操作界面和實(shí)物圖。

圖5 操作界面和FPGA實(shí)物圖。

5 結(jié)束語

本文結(jié)合USB2.0與DDR2 SDRAM的特點(diǎn), 給出了可打破普通數(shù)據(jù)采集系統(tǒng)在實(shí)時(shí)、高速和大容量數(shù)據(jù)采集上的瓶頸的方法,并且在實(shí)用性方面進(jìn)行了改進(jìn)。該系統(tǒng)最終可在FPGA上實(shí)現(xiàn),因?yàn)橛肍PGA實(shí)現(xiàn)具有極大的靈活性和可擴(kuò)展性,并且在系統(tǒng)設(shè)計(jì)成本和快速實(shí)現(xiàn)上具有很好的競(jìng)爭(zhēng)優(yōu)勢(shì)。目前,該數(shù)據(jù)采集系統(tǒng)在實(shí)際運(yùn)用中效果良好。實(shí)際上, 若對(duì)采集接口稍加改進(jìn), 并將IF模塊中的乒乓緩存改為異步FIFO,就能廣泛地應(yīng)用于各類高速系統(tǒng)的實(shí)時(shí)數(shù)據(jù)采集。

須注意的是,時(shí)鐘速率與傳輸延時(shí)并沒有什么關(guān)系,甚至普通的100bps時(shí)鐘也會(huì)出現(xiàn)抖動(dòng)問題。這意味著雖然FPGA供應(yīng)商宣稱他們的芯片具有較短的傳輸時(shí)間和很高的時(shí)鐘速率,但抖動(dòng)問題可能會(huì)嚴(yán)重,甚至那些沒有運(yùn)行在最高速率上的設(shè)計(jì)也是如此。

好在FPGA供應(yīng)商已經(jīng)認(rèn)識(shí)到時(shí)鐘抖動(dòng)的影響,并在他們的芯片中提供低抖動(dòng)的布線資源。這些特殊的布線能夠在芯片中一個(gè)給定范圍內(nèi)的任何兩個(gè)觸發(fā)器之間提供一個(gè)確定的最大抖動(dòng)。部分產(chǎn)品的低抖動(dòng)資源覆蓋了整個(gè)芯片,而其它的則可能只覆蓋了FPGA邏輯塊中的一個(gè)特定的行或列。對(duì)于一個(gè)需要很多不同時(shí)鐘源的設(shè)計(jì),這些低抖動(dòng)FPGA是比較理想的選擇。

多時(shí)鐘設(shè)計(jì)的最嚴(yán)重問題之一是用異步時(shí)鐘將兩級(jí)邏輯結(jié)合在一起。由于異步時(shí)鐘會(huì)產(chǎn)生亞穩(wěn)態(tài),從而嚴(yán)重降低設(shè)計(jì)性能,或完全破壞設(shè)計(jì)所能實(shí)現(xiàn)的功能。在觸發(fā)器的時(shí)序要求產(chǎn)生沖突時(shí)(設(shè)置時(shí)間和保持時(shí)間)將產(chǎn)生亞穩(wěn)態(tài),觸發(fā)器的最終輸出是未知的,并使整個(gè)設(shè)計(jì)處于不確定狀態(tài)。如果有一級(jí)邏輯要將數(shù)據(jù)異步地發(fā)送到另一級(jí),圖3所示的情形將不能滿足觸發(fā)器的設(shè)置和保持時(shí)間要求。確切地說,如果設(shè)計(jì)中含有異步邏輯將有可能會(huì)產(chǎn)生亞穩(wěn)態(tài)。在處置異步資源時(shí)必需非常小心,因?yàn)檫@可能產(chǎn)生一些很嚴(yán)重的問題。

多時(shí)鐘設(shè)計(jì)

本文以電信應(yīng)用中的E3多路復(fù)用/解復(fù)用設(shè)計(jì)為例。如圖4所示,多路復(fù)用器接收來自一組獨(dú)立線路接口芯片的16個(gè)獨(dú)立E1信道,每一個(gè)信道都工作于2.048MHz;經(jīng)復(fù)用后,這些E1流組合成4個(gè)E2流,分別工作在8.0448MHz;4個(gè)E2流最后組合成一個(gè)E3流,以34.368Mbps的速率串行發(fā)送出去。在接收端執(zhí)行相反的操作:解復(fù)用器從E3流提取4個(gè)E2數(shù)據(jù)流,然后從E2流提取16個(gè)E1流,最終將E1流發(fā)送到接收端的線路接口芯片。

這些E1線路接口在發(fā)送和接收時(shí)都獨(dú)立工作,因此2.048MHz的時(shí)鐘速率可以有+/- 20ppm的偏差。同樣,因?yàn)榇蠖鄶?shù)系統(tǒng)同時(shí)發(fā)送和接收數(shù)據(jù),分立的多路復(fù)用器和多路解復(fù)用器將提供2個(gè)獨(dú)立的E3流(發(fā)送和接收)。因此,兩個(gè)34.368MHz的時(shí)鐘可以存在細(xì)微的差異。

由于E2流是在芯片上產(chǎn)生的,這些E2多路復(fù)用器可以共享同一個(gè)8.448MHz時(shí)鐘。然而,由于接收的數(shù)據(jù)速率與我們所設(shè)計(jì)的板無關(guān)(且不能假定所有E2多路復(fù)用器使用相同時(shí)鐘),所以E2解復(fù)用器時(shí)鐘必須能工作在略為不同的速率下。

此外,假定設(shè)計(jì)中需要一個(gè)由工作頻率為1MHz的處理器控制的獨(dú)立SPI(串行外圍接口)總線接口,該接口用于狀態(tài)和控制。這樣一來,設(shè)計(jì)中總共用了32個(gè)2.048MHz時(shí)鐘,5個(gè)8.448MHz時(shí)鐘,2個(gè)34.368MHz時(shí)鐘和一個(gè)1MHz時(shí)鐘,總共多達(dá)40個(gè)時(shí)鐘。

本設(shè)計(jì)中最快時(shí)鐘是34.368MHz E3時(shí)鐘。FPGA的最大時(shí)鐘速率的確定很重要,因?yàn)樵O(shè)計(jì)的差異將影響到該最大值。然而,在芯片商的資料手冊(cè)中常??梢钥吹?ldquo;全局時(shí)鐘設(shè)置及保持時(shí)間”和“至CLB輸出的時(shí)鐘”兩個(gè)參數(shù),將這兩個(gè)參數(shù)的最大值相加,再增加25%就能可以得到最小時(shí)鐘周期的初略值,在最大時(shí)鐘速率條件下允許10%的余量,以保證過熱條件下能正常工作。因此,我們?cè)O(shè)置的最小速率為40MHz,很多較新的FPGA都能夠很容易地支持該頻率。事實(shí)上,F(xiàn)PGA供應(yīng)商已經(jīng)推出了超過300MHz的器件。

在確定了能滿足最大頻率要求的FPGA后,就需要保證有足夠的空間來實(shí)現(xiàn)你的設(shè)計(jì)。如果所選的FPGA沒有足夠的余量,就不能提供足夠的布線資源來滿足設(shè)計(jì)的時(shí)序約束。通常芯片供應(yīng)商宣稱的速率是最佳條件下的速率,F(xiàn)PGA供應(yīng)商一般建議FPGA邏輯在布線功能開始明顯變差以前可以用到80%。在選擇FPGA器件時(shí),建議在新的設(shè)計(jì)時(shí)最好使FPGA邏輯用到50%左右,這樣就允許計(jì)算起始設(shè)計(jì)大小出現(xiàn)超差,以及為在設(shè)計(jì)起動(dòng)后產(chǎn)生不可避免的設(shè)計(jì)變更留出空間。如果最終的設(shè)計(jì)只占用低于50%的資源,則可以使用同一系列中較小的FPGA以降低成本。

通過時(shí)序約束來規(guī)定慢時(shí)鐘速率,從而可以改進(jìn)設(shè)計(jì)中最快時(shí)鐘的布線。在多路復(fù)用器例子中,如果設(shè)置FPGA布線工具SPI總線時(shí)鐘為1MHz,而E3時(shí)鐘為40MHz,布線工具將盡量使E3時(shí)鐘的邏輯電路模塊相鄰布局。如果由于空間的限制而不能將全部電路布局在一起,則首先應(yīng)將SPI邏輯另外布局,因?yàn)镾PI邏輯可以處理更長(zhǎng)傳輸延遲。所有FPGA供應(yīng)商的布線工具都能規(guī)定這些較慢時(shí)鐘速率。

減少時(shí)鐘數(shù)量

根據(jù)市場(chǎng)調(diào)查,目前還沒有哪個(gè)FPGA器件能夠支持這種多路復(fù)用器/解復(fù)用器設(shè)計(jì)所需的40個(gè)時(shí)鐘。所以,我們必須減少所需要的時(shí)鐘數(shù)。

首先了解E2和E3多路復(fù)用器的時(shí)鐘。前面已經(jīng)分析了4個(gè)E2多路復(fù)用器工作在相同時(shí)鐘下的可接受度,E3多路復(fù)用器運(yùn)行于比E2時(shí)鐘高得多的速率,必需使用一個(gè)不同的時(shí)鐘。但是,如果我們從E3時(shí)鐘中引出E2時(shí)鐘是否可行呢?因?yàn)镋3多路復(fù)用器要從每個(gè)E2支路得到數(shù)據(jù),我們可以在需要E2多路復(fù)用器給我們數(shù)據(jù)時(shí),簡(jiǎn)單地將脈沖送給每個(gè)多路復(fù)用器。我們沒有去掉任何時(shí)鐘,但E2時(shí)鐘現(xiàn)在是基于E3時(shí)鐘。

如果在所有的多路復(fù)用器中也使用同樣的時(shí)鐘,并且只使用一個(gè)使能信號(hào)來告訴E2多路復(fù)用器什么時(shí)候工作,這時(shí)會(huì)產(chǎn)生什么問題呢?如果E3多路復(fù)用器用34.368MHz時(shí)鐘產(chǎn)生使能信號(hào),在這些使能信號(hào)上的抖動(dòng)不會(huì)比用在FPGA中任何其它同步邏輯更大。所以,使能信號(hào)可以使用正常(高抖動(dòng))布線資源,這樣就不需要單獨(dú)的8.448MHz多路復(fù)用器時(shí)鐘,讀取E1數(shù)據(jù)緩沖器的數(shù)據(jù)時(shí)也是一樣。換言之,如果E2多路復(fù)用器需要數(shù)據(jù),它可以激活到特定緩沖器的使能信號(hào)。到緩沖器的時(shí)鐘本身能夠保持E3多路復(fù)用器所用的34.368MHz時(shí)鐘,如圖5所示。

最后,我們檢查16個(gè)從線路接口芯片輸入到FPGA的E1時(shí)鐘。這些時(shí)鐘有會(huì)產(chǎn)生下面幾個(gè)問題:首先,16個(gè)時(shí)鐘將占用太多可用芯片時(shí)鐘布線資源;其次,在同一個(gè)FPGA中使用16個(gè)異步時(shí)鐘來驅(qū)動(dòng)相互鄰近的觸發(fā)器,由于地彈、串?dāng)_和其它效應(yīng)將產(chǎn)生噪聲問題。例如,由于噪聲的原因,一個(gè)正邊沿觸發(fā)器會(huì)在下降邊沿時(shí)改變輸出狀態(tài),此類問題將難以處理。



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉