RocketIOTM GTP在串行高速接口中的位寬設計
無論是在傳輸還是在操作過程中,都要保證每個Dword的正確性和完整性,否則將導致數據出錯或原語流失。
另外,目前高速數據傳輸接口或總線常用8B/10B編碼來編碼,其根本目的是實現直流平衡(DC Balance)。當高速串行流的邏輯1或邏輯0有多個位沒有變化時,信號的轉換就會因為電壓位階的關系而造成信號錯誤。直流平衡的最大好處便是可以克服以上問題。8B/10B編碼是目前許多高速串行總線采用的一種編碼機制,如1394b、Serial ATA、PCI Express、Infini-band、Fiber Channel、RapidIO等總線或網絡,都是8B/10B編碼的擁護者。該編碼技術的基本精神很簡單,就是將8個位經過映射的機制轉化為10個位的字碼,但它平衡了位流中0與l的數量。
8B/10B編碼是將一組連續的8位數據分解成兩組數據,一組3位,一組5位,經過編碼后分別構成一組4位代碼和一組6位代碼,從而組成一組10位的數據發送出去。相反,解碼是將l組10位的輸入數據經過變換得到8位數據位。其8B/10B編解碼過程如圖2所示。本文引用地址:http://www.104case.com/article/180728.htm
Xilinx公司推出的Virtex-5 FPGA以及配套的Virtex-5 RocketI0TM GTP收發器只支持16bit接口位寬的數據傳輸,即該GTP收發器是以word為數據處理單位。由于這與SATA2.0協議的相關規定出現了偏差,因而要求在數據進入設計主體邏輯前后要進行合并以及分解。同時,FPGA中設計的數據處理邏輯是根據協議的要求而定義為75 MHz的時鐘域來進行處理的,因此,在將數據交給FPGA中的數據處理主體邏輯之前,也必須進行位寬的轉換。
由于GTP附帶的2 bit控制字節指示信號rxcharisk可用以表征接收到了K字符,故實際的數據需要從150 MHz (16+2) bit轉換為75 MHz(32+4)bit。但由于16 bit和32 bit的并行數據是主體。因此,筆者仍稱之為16 bit到32 bit位寬轉換和32bit到16 bit位寬轉換,它們實際上都包含了指示信號,用來標示該字符是否是控制字符。
2 位寬轉換
根據SATA2.0協議的規定和Virrex-5 RocketIOTM GTP的特性,以及SATA2.0接口邏輯中需要提取原語(primitive)進行邏輯控制的要求,16bit和32 bit位寬的相互轉換不能簡單的進行word合并拆解,而是需要實現圖1中wordO和wordl的正確組合,否則將導致原語或數據受損,使控制邏輯無法獲得有效的交互原語,數據處理邏輯組幀傳輸錯誤,文件損壞的狀況發生。這就要求系統能夠在提取原語和數據組幀之前,及時進行Dword邊界校正,以保證后續處理的正確。
2.1 16bit至32bit位寬轉換模塊
該模塊將GTP接收后的150 MHz 16 bit并行數據轉換成數據處理邏輯可以工作的75 MHz 32 bit的并行數據。圖3所示為其位寬轉換要求示意圖。
由于在轉換開始時,必須正確地將2個相關的16 bit Word組合成一個32bit DW,但不能將一個DW的低字跟相鄰的一個DW的高字組合成一個DW,否則邏輯處理時就會出錯。圖4所示是16Bit轉32 bit的實現邏輯示意圖。
評論