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