胡建華,王亞偉,厲寶山,張 寧,姜 濤,徐 剛,魏 麗
(1.中國科學(xué)院自動化研究所,北京 100190;2.佛山市科自智能系統(tǒng)技術(shù)有限公司,廣東 佛山 528010;3.渤海造船廠集團有限公司,遼寧 葫蘆島 125000)
印刷業(yè)是我國國民經(jīng)濟重要產(chǎn)業(yè),是文化產(chǎn)業(yè)的基本載體。隨著經(jīng)濟的發(fā)展,具有低運行成本、綠色環(huán)保的數(shù)字噴墨印刷技術(shù)正代替各種傳統(tǒng)印刷方式而逐漸成為主流印刷技術(shù),并已經(jīng)廣泛應(yīng)用于大幅面廣告印刷行業(yè)、數(shù)字彩繪[1]等領(lǐng)域。
數(shù)字印刷是一個全數(shù)字生產(chǎn)流程,它將印前、印刷和印后完全整合成為一個整體,由計算機集中操作、控制和管理。噴頭作為數(shù)字印刷的主要設(shè)備之一,其噴繪效率主要依賴于數(shù)字噴墨控制系統(tǒng)主控制器和噴頭驅(qū)動板間的數(shù)據(jù)傳輸效率。由于噴墨所用噴頭寬度有限,數(shù)字印刷所使用的噴頭數(shù)量一般較大。小幅面印刷機即有數(shù)十個噴頭,而大幅面印刷機則有幾百個之多。每個噴頭所需的控制數(shù)據(jù)都由主控制器提供,為了能夠?qū)崿F(xiàn)噴頭驅(qū)動板和主控制器之間的穩(wěn)定高效數(shù)據(jù)傳輸,合適的通訊協(xié)議是必不可少的。表1所示為目前幾種常見的數(shù)據(jù)傳輸協(xié)議。其中并口、RS232、SPI協(xié)議均不需要專用硬件即可實現(xiàn)數(shù)據(jù)傳輸,但都屬于慢速協(xié)議,無法滿足噴印時的高速數(shù)據(jù)傳輸;以太網(wǎng)、USB2.0、1394b等協(xié)議傳輸速度都很高,但均需要專用硬件支持,同時協(xié)議復(fù)雜,不適合用于由大量噴頭驅(qū)動器組成的數(shù)字噴墨印刷系統(tǒng)。因此,為了提高數(shù)字噴墨印刷效果,需要設(shè)計一個合適的通訊協(xié)議。
表1 數(shù)據(jù)集信息
為了滿足主控制器和噴頭驅(qū)動板間數(shù)據(jù)傳輸?shù)男枨?,本文提出了一種PSTP(Printhead Serial Transmission Protocol)協(xié)議。該協(xié)議只需要發(fā)送和接收兩對差分信號便可實現(xiàn)雙向100 Mb/s雙工傳輸,而且無需專用硬件支持,僅利用簡單的數(shù)字電路即可實現(xiàn)。本文結(jié)構(gòu)組織如下:第一、二部分分別介紹了PSTP協(xié)議的物理層設(shè)計和基于Reed-Solomon交織縮短編碼糾錯算法的鏈路層協(xié)議;第三部分給出了一種基于FPGA的實現(xiàn)方案;第四部分對PSTP協(xié)議做了仿真實驗;第五部分為內(nèi)容小結(jié)。
PSTP協(xié)議本質(zhì)上是一種特殊的同步串行協(xié)議。為了更好地理解PSTP協(xié)議物理層工作方式,先將常規(guī)同步串行通信協(xié)議進行一下簡單介紹。同步串行通信協(xié)議中發(fā)送端每次向數(shù)據(jù)通道傳輸一個位元,接收端每次從數(shù)據(jù)通道接收一個位元并判斷其取值。數(shù)據(jù)接收端為了正確獲取位元數(shù)據(jù)就需要獲得串行位元的準(zhǔn)確頻率及相位關(guān)系,目前接收端常用的獲取頻率及相位的方法有以下幾種:
(1)直接傳輸時鐘:該方法的優(yōu)點是實現(xiàn)簡單,缺點是增加了傳輸線的數(shù)量,不適宜傳輸高速信號。SPI協(xié)議[2]便是基于這種模式的同步傳輸協(xié)議。
(2)將時鐘信息編碼到數(shù)據(jù)中:該方法的優(yōu)點是減少了傳輸線的數(shù)量,缺點是提高了數(shù)據(jù)通道波特率。如曼徹斯特碼。
(3)通過鎖相技術(shù)恢復(fù)時鐘:該方法的優(yōu)點是既減少了傳輸線的數(shù)量,也沒有顯著提高數(shù)據(jù)通道的波特率,但此技術(shù)需要采用專用的模擬鎖相環(huán)電路或復(fù)雜的數(shù)字同步鎖相技術(shù)[3]。
PSTP協(xié)議巧妙地回避了接收端必須獲取串行位元準(zhǔn)確頻率及相位關(guān)系才能準(zhǔn)確接收數(shù)據(jù)的限制,采用4B/5B編碼[4]技術(shù)進行串行位元的接收和解析,而不需要時刻保持與串行位元的精確同步。4B/5B編碼將發(fā)送端發(fā)送的4位數(shù)據(jù)編碼為5位數(shù)據(jù)發(fā)送到數(shù)據(jù)通道,而接收端將5位數(shù)據(jù)解碼為4位數(shù)據(jù)。由于4位數(shù)據(jù)共有16種組合,而5位數(shù)據(jù)共有32種組合,因此除了對應(yīng)于4位數(shù)據(jù)的16種編碼外,仍有16種編碼可用作控制信息。PSTP協(xié)議采用5B編碼中的00001b作為同步控制碼,而數(shù)據(jù)碼和同步控制碼以外的其它編碼均認(rèn)為是非法編碼,4B/5B解碼器遇到非法編碼后會輸出解碼錯誤信號。系統(tǒng)啟動后,發(fā)送端會向數(shù)據(jù)通道發(fā)送同步控制碼,接收端從接收移位寄存器中尋找同步控制碼,一旦發(fā)現(xiàn)同步控制碼,則每5位一組送入4B/5B解碼器進行解碼。
由于發(fā)送端和接收端時鐘并非精確同步,每隔一定時間后接收端采樣時鐘的相位和發(fā)送端時鐘相位會產(chǎn)生一個周期的相位差,此時接收端將漏掉一個位元的數(shù)據(jù),如圖1中虛線框內(nèi)所示。其中clk1為發(fā)送端時鐘,clk2為接收端時鐘,data1(1010101)為發(fā)送端發(fā)送的數(shù)據(jù)流,data2(101011)為接收端接收到的數(shù)據(jù)流。由于產(chǎn)生了一位錯誤,送入4B/5B解碼器的數(shù)據(jù)是非法的,解碼器輸出解碼錯誤,接收端將重新進行尋找同步碼進行同步。為了方便接收端進行同步,發(fā)送端在數(shù)據(jù)通道空閑時會一直發(fā)送同步控制碼。但如果在傳輸數(shù)據(jù)時發(fā)生解碼錯誤,則只有在該數(shù)據(jù)幀結(jié)束后才能重新獲得同步,而該數(shù)據(jù)幀內(nèi)的數(shù)據(jù)就會發(fā)生錯誤。
圖1 周期相位偏移
為了消除PSTP協(xié)議物理層中由于周期性重新同步而造成的錯誤,PSTP協(xié)議采用了基于Reed-Solomon交織縮短碼糾錯算法的鏈路層協(xié)議。Reed-Solomon編碼是由里德和索羅蒙于1960年構(gòu)造出來的多進制BCH碼,是一種糾錯能力很強的極大最小距離碼。為了便于字節(jié)數(shù)據(jù)的處理,PSTP采用有限域GF(28)中的Reed-Solomon碼進行糾錯算法的設(shè)計。設(shè)(dk-1,dk-2,…,d0)為發(fā)往數(shù)據(jù)通道的k字節(jié)數(shù)據(jù),經(jīng)編碼器編碼成碼字(ck-1,ck-2,…,c0)后發(fā)往數(shù)據(jù)通道。對于幀長為n的數(shù)據(jù)幀,采用Reed-Solomon編碼可以糾正t=( )n-k/2個字節(jié)的錯誤。為了進一步提高糾錯能力,PSTP在Reed-solomon碼的基礎(chǔ)上加入了塊交織算法[5]。設(shè)i為交織深度,則交織Reed-Solomon碼可糾正i×t字節(jié)的連續(xù)錯誤。由上述分析可知,PSTP協(xié)議可正確恢復(fù)數(shù)據(jù)的條件是連續(xù)i=n/t幀數(shù)據(jù)傳輸過程中最多有一幀數(shù)據(jù)發(fā)生了錯誤。由此可得錯誤發(fā)生的最小間隔為:
其中tb為傳輸一位數(shù)據(jù)所需時間。設(shè)PSTP協(xié)議中的基準(zhǔn)時鐘為f,發(fā)送端和接收端相對時鐘頻率偏差為Δf,則同步時間間隔,也即錯誤發(fā)生間隔為:
為了簡化系統(tǒng)的復(fù)雜度,PSTP鏈路層取幀長n=80,校驗字節(jié)數(shù)n-k=16,交織深度i=10,傳輸速率為100 Mb/s。故tb=10 ns,f=100 MHz。由式(1)(2)可知發(fā)送端和接收端允許的最大相對時鐘偏差Δfmax=156.25 ppm。由于常規(guī)晶體振蕩器Δf一般小于5 ppm,因此完全可滿足實際應(yīng)用需求。
圖2所示為PSTP協(xié)議流程。發(fā)送端流程如圖2(a)所示,系統(tǒng)啟動后先發(fā)送同步控制碼,然后判斷是否有數(shù)據(jù)幀等待發(fā)送,如果有數(shù)據(jù)需要發(fā)送則將數(shù)據(jù)幀送入Reed-Solomon編碼器進行編碼,編碼器輸出的碼字進入交織器進行交織,然后經(jīng)過4B/5B編碼器進行編碼,最后通過發(fā)送單元進行串行發(fā)送。如果沒有數(shù)據(jù)幀需要發(fā)送,則向數(shù)據(jù)通道發(fā)送同步控制碼以使接收端保持同步。接收端流程如圖2(b)所示,系統(tǒng)啟動后進入同步過程,同步器從接收到的數(shù)據(jù)流中尋找同步數(shù)據(jù),一旦發(fā)現(xiàn)同步碼字,則將每5位一組的數(shù)據(jù)送入4B/5B解碼器進行解碼,解碼正確則進入解交織器和Reed-Solomon解碼器進行解碼。解碼失敗則表明同步出現(xiàn)問題,需要進入同步單元進行重新同步。
圖2 工作流程
本節(jié)給出了一種PSTP協(xié)議的可實現(xiàn)設(shè)計方案。
發(fā)送端主要由Reed-Solomon編碼器、交織器、4B/5B編碼器以及串行發(fā)送單元組成,4B/5B編碼器和串行發(fā)送單元的設(shè)計均比較簡單,交織器主要完成數(shù)據(jù)順序的調(diào)整,可通過對ram存取地址的控制來實現(xiàn)。Reed-Solomon編碼器電路是發(fā)送端中最復(fù)雜的電路,下面給出了一種8倍并行設(shè)計方案:
為了更好地描述編解碼過程,定義數(shù)據(jù)多項式為D(x)=dk-1xk-1+dk-2xk-2+…+d0。碼 字 多 項 式 為C(x)=cn-1xn-1+cn-2xn-2+…+c0,其對應(yīng)的生成多項式為:
通常碼字多項式可由有限域除法電路獲得。但常規(guī)除法電路每個時鐘周期只能處理一個字節(jié)的數(shù)據(jù),為了提高數(shù)據(jù)吞吐率,本文采用8倍并行編碼設(shè)計。設(shè)生成多項式為:
寄存器當(dāng)前狀態(tài)為Xt=[ ]x0,x1,…,x15,輸入數(shù)據(jù)序列為Zt=[ ]zt+7,zt+6,…,zt,則生成多項式的伴隨矩陣為:
由Patel[6]提到的方法可得遞推式:
其中:
接收端主要由同步器、數(shù)據(jù)接收單元、4B/5B解碼器、解交織器、Reed-Solomon解碼器構(gòu)成。同步器本質(zhì)上是一個同步序列檢測器,可用簡單的移位寄存器實現(xiàn)。數(shù)據(jù)接收單元、4B/5B解碼器,解交織器的設(shè)計和發(fā)送單元中的串行發(fā)送單元、4B/5B編碼器、交織器類似。Reed-Solomon譯碼器的設(shè)計比較復(fù)雜,下面給出了一種Reed-Solomon縮短碼譯碼器的設(shè)計方案:
譯碼器主要由伴隨式計算(SC),關(guān)鍵方程求解(KES),錯誤值校正(EE)3個部分構(gòu)成。
3.2.1 伴隨多項式求解
Reed-Solomon譯碼的第一步是求解伴隨多項式,設(shè)接收的數(shù)據(jù)碼流為:
則伴隨多項式為:
伴隨多項式的求解可通過迭代算法實現(xiàn)
但迭代電路需要80個時鐘才能完成Si的計算,為了提高運算速度,可將電路8倍并行化設(shè)計。為此將式(8)改寫為:
可得伴隨式電路如圖3所示。
圖3 伴隨式計算電路
3.2.2 關(guān)鍵方程求解(KES)
獲得伴隨多項式后便可求解關(guān)鍵方程:
其中,σ(x)為錯誤位置多項式,ω(x)為錯誤值多項式。求解關(guān)鍵方程主要有Peterson算法,Berlekamp-Massey(BM)算 法 和Euclidean(EA)算 法[7]。PeteReed-Solomonon算法在t較大時需進行大量矩陣運算,不適合硬件電路實現(xiàn)。BM算法和EA算法均采用迭代運算進行,但由于其中的求逆運算造成實現(xiàn)復(fù)雜且無法方便地插入流水線。針對BM和EA算法的不足,RiBM算法[8]、PiBM算法[9]以及DCME算法[10]、PrME算法[11]、pDCME算法[12]相繼被提出,這些算法均有非常規(guī)則的結(jié)構(gòu)并可通過流水線提高解碼速度。此處采用RiBM算法進行解碼。
RiBM算法流程如下。
寄存器分配:
KES模塊主要由Process Elements(PE)單元構(gòu)成。PE模塊的具體結(jié)構(gòu)如圖4所示,其中包含2個8位寄存器、2個GF(28)乘法器和1個GF(28)加法器。整個KES模塊由25個PE單元構(gòu)成,分別對應(yīng)于δi、θi,i=0,1,2,…,24。
圖4 RiBM模塊
寄存器δi(0)、θi(0),i=0,1,2,…,15在算法開始時被賦值為伴隨多項式的系數(shù)si,i=0,1,2,…,15,隨后在每個時鐘的上升沿進行一次迭代運算。16個時鐘周期后便可產(chǎn)生錯誤位置多項式系數(shù)σi(16)=δi+8(16),i=0,1,2,…,8以及修正的錯誤值多項式ω?i(16)=δi(16),i=0,1,2,…,7。
3.2.3 錯誤位置和錯誤值計算
獲取錯誤位置多項式后便可計算產(chǎn)生錯誤的位置,求解錯誤位置的主要算法為錢氏搜索算法[5],錯誤值可由Forney算法獲取。錢氏搜索和Forney算法描述如下:
由于RiBM算法求取的是修正的錯誤值多項式,所以需要將其轉(zhuǎn)化為錯誤值多項式。σ'(x)是σ(x)的形式導(dǎo)數(shù)。Ri是cci接收多項式第i項的系數(shù)。由于采用縮短碼,因此i的初始值為176。σ的求取電路如圖5所示,ω以及σ'的求和電路與σ類似。
圖5 錯誤位置計算
為了驗證PSTP協(xié)議數(shù)據(jù)傳輸?shù)恼_性,本文設(shè)計了基于Mentor Graphics公司的Modelsim SE6.5的仿真平臺,綜合及測試代碼均采用verilog硬件編程語言編寫,波形可視化采用Modelsim中的Wave可視化模塊完成。仿真環(huán)境參數(shù)如下:仿真時間單位為1 ns;仿真時間精度為1 ns;信道波特率為100 Mb/s。接收端和發(fā)送端時鐘偏差100 ppm。
圖6(a)給出了當(dāng)數(shù)據(jù)幀為[01…6263]時,Reed-Solomon編碼器輸出,其中第三個信號rdy為編碼完成信號,可見相對于傳統(tǒng)串行編碼器64個時鐘周期才能輸出所有碼字,采用本文提出的8倍并行編碼算法只需要8個時鐘周期即可完成編碼任務(wù)。數(shù)據(jù)完成編碼后經(jīng)4B/5B編碼器進入數(shù)據(jù)通道。
圖6 FPGA仿真波形
數(shù)據(jù)流在通過數(shù)據(jù)通道時,由于接收端的重新同步,其中一幀(80字節(jié))發(fā)生了錯誤。錯誤幀數(shù)據(jù)在交織器的交錯作用下將這80個字節(jié)的錯誤分散到10個數(shù)據(jù)幀中進行糾錯解碼。限于篇幅這里僅給出其中一幀的數(shù)據(jù)解碼結(jié)果,如圖6(b)所示。這一幀中第8個到第15個字節(jié)(data_i71-data_i64)本應(yīng)該是8-15,由于錯誤的產(chǎn)生全部變成了0,經(jīng)過Reed-Solomon解碼器解碼后數(shù)據(jù)全部得到恢復(fù)。由此可見,PSTP可在發(fā)送端和接收端時鐘偏差達(dá)100 ppm的情況下完成數(shù)據(jù)的可靠傳輸。
本文最后基于Altera CYCLONE III FPGA平臺進行了系統(tǒng)硬件驗證,綜合軟件為QUARTU SII9.1。表2所示列出了編碼器和譯碼器各單元資源使用情況。硬件測試結(jié)果表明PSTP協(xié)議完全可以勝任數(shù)字噴墨控制系統(tǒng)中主控制器和噴頭驅(qū)動板間數(shù)據(jù)傳輸需求。
表2 資源占用情況
本文針對數(shù)字噴墨控制系統(tǒng)中主控制器和噴頭驅(qū)動板間數(shù)據(jù)傳輸需求,在分析了幾種常用串行傳輸協(xié)議的優(yōu)缺點的基礎(chǔ)上提出了PSTP協(xié)議。該協(xié)議物理層利用4B/5B編碼進行自動同步和數(shù)據(jù)解析,無需傳輸時鐘信號或采用專用芯片進行時鐘恢復(fù)。配合鏈路層中基于Reed-Solomon交織縮短編碼的糾錯算法,PSTP協(xié)議可以在發(fā)送端和接收端時鐘相對偏差達(dá)100 ppm的情況下進行可靠的數(shù)據(jù)傳輸。而且該協(xié)議只需要簡單的數(shù)字電路即可實現(xiàn)。
PSTP協(xié)議給出了一種數(shù)據(jù)傳輸?shù)男赂拍?,本文建議性的給出了一種實現(xiàn)方案,后續(xù)研究可對鏈路層糾錯算法進行優(yōu)化設(shè)計,進一步提高傳輸性能。