引言 SpacewiTe是歐空局2003年提出的一種高速的、點(diǎn)對(duì)點(diǎn)、全雙工的串行總線網(wǎng)絡(luò),面向空間應(yīng)用。它以IEEE 1355—1995和LVDS標(biāo)準(zhǔn)為基礎(chǔ),提供了一種通用接口標(biāo)準(zhǔn)以簡(jiǎn)化和規(guī)范不同設(shè)備之間的互連,對(duì)解決目前星上數(shù)據(jù)處理系統(tǒng)的總線帶寬不足有重要作用。而且,隨著FPGA容量增大和功耗降低,以及內(nèi)部軟核的廣泛應(yīng)用,使用FPGA開(kāi)發(fā)數(shù)字電路,可以縮短設(shè)計(jì)時(shí)間、減少PCB面積、提高系統(tǒng)的可靠性,F(xiàn)PGA已成為解決系統(tǒng)級(jí)設(shè)計(jì)的重要選擇方案之一。本文在Actel的集成開(kāi)發(fā)環(huán)境Libem下編寫(xiě)了HDL代碼,利用內(nèi)部集成仿真工具M(jìn)od—elSim對(duì)設(shè)計(jì)進(jìn)行了時(shí)序仿真。 1 SpaceWire Codec接收端概述 SpaceWire標(biāo)準(zhǔn)餌CSS—E一50—12A)包括鏈路,節(jié)點(diǎn)和交換機(jī)三方面的內(nèi)容。SpaceWire采用線路交換形式,節(jié)點(diǎn)是指?jìng)鬏敯牧鞒鲈O(shè)備或者流向設(shè)備,鏈路是指數(shù)據(jù)包傳輸?shù)穆窂健?br /> SpaceWire是總線數(shù)據(jù)網(wǎng)絡(luò)結(jié)構(gòu),包括6層協(xié)議:物理層,信號(hào)層,字符層,交換層,信息包層和網(wǎng)絡(luò)層。SpaceWire Codec實(shí)現(xiàn)的是信號(hào)層,字符層和交換層的相關(guān)內(nèi)容。 SpaceWire物理層電纜采用九針微型D連接器.由四對(duì)雙絞線組成,傳輸四對(duì)差分信號(hào)。 SpaceWire信號(hào)層用LVDS差分信號(hào)傳輸,抑制了共模噪聲,保證了低電磁干擾。采用DS(data-strobe)編碼實(shí)現(xiàn)嵌入式時(shí)鐘總線傳輸,Ds編碼用data信號(hào)表示實(shí)際傳輸?shù)臄?shù)據(jù),strobe信號(hào)隨D信號(hào)變化而編碼,原則是在任一時(shí)鐘周期Ds信號(hào)只有一個(gè)發(fā)生變化,這樣DS信號(hào)異或就可得到接收端的時(shí)鐘。如圖1: ![]() SpaceWire字符層定義了兩種類型的字符:四個(gè)控制字符和數(shù)據(jù)字符,采用奇校驗(yàn)方式。 串行比特流各個(gè)字符之間沒(méi)有分隔符,每個(gè)字符以奇偶檢驗(yàn)位開(kāi)始,第二位是ctrl—flag位,即區(qū)分?jǐn)?shù)據(jù)字符和控制字符的標(biāo)志,后面是不同的數(shù)據(jù)字符和控制字符。串行的比特流以包的形式傳輸,包以控制字符EOP標(biāo)志結(jié)尾。 SpaceWire交換層定義了鏈路的初始化和狀態(tài)機(jī)的運(yùn)轉(zhuǎn),實(shí)現(xiàn)鏈路的擁塞控制,檢測(cè)鏈路的斷開(kāi)等。 SpaceWire Codec由發(fā)送端,接收端和控制器組成,控制器根據(jù)接收端收到的不同數(shù)據(jù)字符控制狀態(tài)機(jī)的運(yùn)行,協(xié)調(diào)發(fā)送端和接收端的工作。 其中接收端實(shí)現(xiàn)時(shí)鐘恢復(fù),檢測(cè)DS信號(hào),判斷并處理Data數(shù)據(jù),進(jìn)行奇偶校驗(yàn),把數(shù)據(jù)字符送到fifo中,實(shí)現(xiàn)鏈路的擁塞控制,檢測(cè)鏈路的斷開(kāi)狀況等。這些功能的實(shí)現(xiàn)使用到不同的時(shí)鐘,設(shè)計(jì)時(shí)需要解決多時(shí)鐘域信號(hào)傳輸?shù)耐絾?wèn)題。 在本設(shè)計(jì)中。SpaceWire Codec接收端按照功能不同劃分為以下幾個(gè)模塊: ![]() 圖2接收端模塊劃分 上圖中的asyrst_n由epu復(fù)位信號(hào)和控制器的復(fù)位信號(hào)做組合邏輯得到。設(shè)計(jì)時(shí)用cpu配置鏈路狀態(tài),控制FPGA運(yùn)行。數(shù)據(jù)字符經(jīng)過(guò)6fo送到epu存儲(chǔ)區(qū)中。 2 時(shí)鐘域劃分 上圖中,虛線表示了不同的時(shí)鐘域。 用恢復(fù)的時(shí)鐘clk0進(jìn)行Ds信號(hào)的檢測(cè)和處理.在clk0時(shí)鐘域內(nèi)實(shí)現(xiàn)的是同步檢測(cè)和設(shè)計(jì)。由于DS信號(hào)不能通過(guò)自身恢復(fù)得到的時(shí)鐘去檢測(cè)DS鏈路的斷開(kāi).因此需要采用FPGA的pU模塊倍頻得到的高頻時(shí)鐘gclk 來(lái)檢測(cè)鏈路的斷開(kāi)狀_re況。在本設(shè)計(jì)中,擁塞控制要和發(fā)送端配合工作,發(fā)送端使用的是本地時(shí)鐘gclk,因此鏈路擁塞控制模塊也要用本地時(shí)鐘gclk來(lái)控制。用cpu時(shí)鐘clk_c讀走fifo中數(shù)據(jù),送到cpu存儲(chǔ)區(qū)中。 3 復(fù)位信號(hào)處理 接收端模塊的復(fù)位信號(hào)由cpu給出,鏈路狀態(tài)機(jī)運(yùn)行到復(fù)位狀態(tài)也要對(duì)接收端進(jìn)行復(fù)位。由于復(fù)位信號(hào)扇出很大,且要在不同的時(shí)鐘域起作用.因此對(duì)復(fù)位信號(hào)的處理相當(dāng)重要。 在接收端中,DS信號(hào)到來(lái)之前,DS信號(hào)檢測(cè)和Data數(shù)據(jù)一處理模塊的寄存器必須有確定的狀態(tài),這兩個(gè)模塊復(fù)位時(shí)clk0還沒(méi)有出現(xiàn),因此采用了不需要時(shí)鐘控制的異步復(fù)位。 對(duì)復(fù)位信號(hào)而言,復(fù)位信號(hào)的釋放和時(shí)鐘沿之間也存在時(shí)間約束關(guān)系,如同觸發(fā)器的D輸入端必須滿足建立和保持時(shí)間一樣,復(fù)位信號(hào)相對(duì)時(shí)鐘也必須滿足recovery time/removaltime。如圖3所示,recovery time指復(fù)位信號(hào)無(wú)效電平相對(duì)時(shí)鐘沿到來(lái)前的穩(wěn)定時(shí)間,removal time指復(fù)位信號(hào)無(wú)效電平相對(duì)時(shí)鐘沿到來(lái)后的穩(wěn)定時(shí)間。 ![]() 圖3復(fù)位信號(hào)的recovery/removal time 4 DS信號(hào)的檢測(cè) 如圖4示,恢復(fù)的clkO時(shí)鐘是D信號(hào)頻率的1/2,用clk0檢測(cè)DS信號(hào),必須用elk0的上沿和下沿實(shí)現(xiàn),如下圖所示: ![]() 圖4 DS信號(hào)的檢測(cè) clk0是DS組合邏輯得到的門(mén)控時(shí)鐘,且clk0的扇出很大,上沿和下沿都要用到,布局布線時(shí)將它放在全局時(shí)鐘bu雎r上,保證了clkO有最小的抖動(dòng)和偏移。 5 data數(shù)據(jù)處理 SpaceWire總線定義的串行數(shù)據(jù)的最大特點(diǎn)是各個(gè)不同的數(shù)據(jù)之間沒(méi)有分割字符。處理數(shù)據(jù)時(shí)不僅要對(duì)本次數(shù)據(jù)格式進(jìn)行正確判斷和校驗(yàn),并且要根據(jù)判讀和檢驗(yàn)結(jié)果指出下一個(gè)data起始位,否則下一個(gè)數(shù)據(jù)的判斷將會(huì)出現(xiàn)錯(cuò)誤。 設(shè)計(jì)中采取了串行移位寄存器的方法,設(shè)置了5個(gè)兩位的寄存器。在同—個(gè)cIkO周期內(nèi)能看到串行數(shù)據(jù)線上的10位串行數(shù)據(jù),根據(jù)不同數(shù)據(jù)位進(jìn)行判讀和奇偶校驗(yàn)。正確判讀后,根據(jù)不同的data數(shù)據(jù)長(zhǎng)度.分別用不同的ready信號(hào)指示下—個(gè)data的起始位,進(jìn)而進(jìn)行下一個(gè)數(shù)據(jù)格式的處理。 這些信號(hào)都是clkO時(shí)鐘域的同步信號(hào),且移位寄存器間沒(méi)有長(zhǎng)路徑延時(shí),這樣可以保證數(shù)據(jù)處理模塊的穩(wěn)定運(yùn)行。 6 多時(shí)鐘設(shè)計(jì) 接收端不同的時(shí)鐘域產(chǎn)生的信號(hào)是異步信號(hào),信號(hào)傳輸時(shí)需要同步到不同的時(shí)鐘域。數(shù)據(jù)信號(hào)通過(guò)fifo傳輸,控制信號(hào)在標(biāo)志位同步模塊中實(shí)現(xiàn)同步到gclk時(shí)鐘域。 在鏈路被動(dòng)啟動(dòng)時(shí),接收端收到NULL信號(hào)后,給出異got—NULL標(biāo)志,使link_enabh信號(hào)有效,鏈路由ready狀態(tài)進(jìn)入started狀態(tài),因此gotNULL信號(hào)電平有效。gotNULL信號(hào)由clkO時(shí)鐘域的DS數(shù)據(jù)處理模塊給出,需要同步到FPGA的本地時(shí)鐘域。電平同步通常用兩個(gè)D觸發(fā)器構(gòu)成同步器,第一級(jí)觸發(fā)器在采樣輸入信號(hào)時(shí)可能進(jìn)入亞穩(wěn)態(tài),后面的觸發(fā)器獲得前一個(gè)觸發(fā)器輸出時(shí),前一個(gè)觸發(fā)器已退出了亞穩(wěn)態(tài),并且輸出已穩(wěn)定.極大地減小了亞穩(wěn)態(tài)的發(fā)生。 其他的標(biāo)志位信號(hào),如gotDATA、gotFCT、gotEOP、gotEEP等都是脈沖有效,這些信號(hào)的同步是在電平同步的基礎(chǔ)上做組合邏輯實(shí)現(xiàn)的,如圖5所示: ![]() 圖5電平信號(hào)gotDATA的同步 在信號(hào)同步中,第二級(jí)寄存器的輸出是穩(wěn)定可用的,把第二級(jí)的輸出再延遲一拍,對(duì)gotDATA_2和gotDATA_3寄存器的輸出做組合邏輯,實(shí)現(xiàn)了一個(gè)gclk周期的有效電平。在時(shí)序允許的情況下,打一拍輸出,實(shí)現(xiàn)了脈沖有效信號(hào)的同步。 鏈路檢測(cè)模塊在gclk_re時(shí)鐘域?qū)崿F(xiàn),根據(jù)協(xié)議要求,當(dāng)離上一次DS信號(hào)出現(xiàn)850m后沒(méi)有Ds數(shù)據(jù)出現(xiàn),則認(rèn)為鏈路斷開(kāi)。該模塊給出的鏈路斷開(kāi)標(biāo)志link_dis相對(duì)gclk時(shí)鐘,是快時(shí)鐘域信號(hào),為了便于信號(hào)同步,link_dis標(biāo)志輸出電平而非脈沖。 結(jié)束語(yǔ) 本文介紹了SpaeeWire Codec接收端的時(shí)序設(shè)計(jì),給出了各個(gè)不同模塊的時(shí)鐘域劃分,門(mén)控時(shí)鐘和復(fù)位信號(hào)的有效處理,以及對(duì)串行數(shù)據(jù)的檢測(cè)和判讀,多時(shí)鐘域信號(hào)的同步等實(shí)現(xiàn)方法。 本文作者創(chuàng)新點(diǎn):對(duì)多時(shí)鐘域復(fù)位信號(hào)采用了對(duì)應(yīng)時(shí)鐘域的異步復(fù)位同步釋放方法;對(duì)串行總線數(shù)據(jù)判讀采用了串行移位寄存器的方法,便于數(shù)據(jù)的正確識(shí)別。對(duì)嵌入式時(shí)鐘總線傳輸?shù)慕邮斩嗽O(shè)計(jì)有一定的參考意義。 作者:曹海源 來(lái)源:《微計(jì)算機(jī)信息》2009年第1-2期 |