FPGA與USB技術(shù)在紡織品數(shù)字印刷機(jī)系統(tǒng)中的應(yīng)用
摘 要: 介紹了紡織品數(shù)字印刷機(jī)的設(shè)計(jì)概況以及USB控制器CY7C68013A的特性,闡述了通過Verilog HDL語言設(shè)計(jì)FPGA對 USB 控制器的訪問控制操作、USB控制器固件程序設(shè)計(jì)、USB驅(qū)動(dòng)程序設(shè)計(jì)及PC端的應(yīng)用程序設(shè)計(jì)。測試結(jié)果表明, FPGA通過USB接口實(shí)現(xiàn)了高速可靠的數(shù)據(jù)傳輸。
關(guān)鍵詞: FPGA; USB2.0; CY7C68013A; 紡織品數(shù)字印刷機(jī)
工業(yè)化紡織品數(shù)字印刷機(jī)系統(tǒng)分為印刷機(jī)和上位主控PC機(jī)兩部分, 紡織品印刷機(jī)不是一套獨(dú)立的系統(tǒng),是接收上位主控PC機(jī)的指令和圖像數(shù)據(jù), 依據(jù)指令和圖像數(shù)據(jù)完成印刷動(dòng)作并將自身工作狀態(tài)反饋給上位主控PC 機(jī)的設(shè)備。接口部分是實(shí)現(xiàn)印刷機(jī)中的前端控制器與上位主控PC 機(jī)之間通信的橋梁。
紡織品數(shù)字噴墨印刷機(jī)在實(shí)時(shí)工業(yè)現(xiàn)場,要求達(dá)到較高的傳輸速度,傳統(tǒng)的數(shù)字噴墨式印刷機(jī)與主機(jī)的通信主要通過主機(jī)主板提供的串行接口、并行接口或通過接口卡來實(shí)現(xiàn),因其傳輸速度較低已不能滿足工業(yè)生產(chǎn)過程高速化的需求。USB技術(shù)很好地解決了上述問題,雖然最近發(fā)布的USB3.0協(xié)議理論上可達(dá)到5 Gb/s的極限傳輸速度,但因目前集成USB3.0的微處理器仍處在實(shí)驗(yàn)測試階段,有待全面優(yōu)化后發(fā)布市場。因此支持USB2.0協(xié)議的微處理芯片依然是工業(yè)高速印染設(shè)備中所選擇的主要通信微處理器。
FPGA是一種現(xiàn)場可編程門陣列電子集成器件,由于其集成度高,用中小規(guī)模集成電路實(shí)現(xiàn)的幾大塊印刷電路板縮小至一兩片超大規(guī)模集成電路,不僅使控制系統(tǒng)的體積大為縮小,而且系統(tǒng)的可靠性得到大大提高。 FPGA的可編程性還可以使紡織品數(shù)字印刷機(jī)控制系統(tǒng)的設(shè)計(jì)、調(diào)試、生產(chǎn)和維護(hù)更加靈活方便。隨著大規(guī)??删幊踢壿嬈骷?FPGA的飛速發(fā)展,F(xiàn)PGA器件可以在這樣的運(yùn)動(dòng)控制系統(tǒng)中發(fā)揮優(yōu)越的性能和較大的作用。它作為紡織品數(shù)字印刷機(jī)控制系統(tǒng)的輔助電路,可代替許多傳統(tǒng)的邏輯電路 ,簡化系統(tǒng)設(shè)計(jì),并且可提高系統(tǒng)的可靠性,減小電路板體積,使產(chǎn)品小型化,同時(shí)也有利于保護(hù)知識(shí)產(chǎn)權(quán)[1]。如何優(yōu)化USB2.0設(shè)備的傳輸性能,突破速度瓶頸,最大限度地提高傳輸速度,是印刷機(jī)設(shè)計(jì)中急需解決的問題。 本文設(shè)計(jì)了基于USB2.0的高速工業(yè)化紡織品數(shù)字噴墨印刷機(jī)數(shù)據(jù)傳輸系統(tǒng),進(jìn)而研究FPGA在印刷機(jī)系統(tǒng)中的設(shè)計(jì)優(yōu)化以及實(shí)現(xiàn)USB2.0接口數(shù)據(jù)傳輸速度的全面提升的方法。
1 系統(tǒng)設(shè)計(jì)
針對紡織品印刷機(jī)系統(tǒng)的特點(diǎn),本系統(tǒng)可實(shí)現(xiàn)由一臺(tái)PC機(jī)控制運(yùn)行,采用IJA模式噴繪機(jī)噴頭,每噴頭510孔,180 dpi。為了提高噴繪速度,采用分組噴頭,每組6色或者8色,共3~6組可選。支持打印1~4灰度等級的圖像。系統(tǒng)的主控制器由數(shù)據(jù)傳輸板與運(yùn)動(dòng)控制板組成,主要由S3C2440為處理器的ARM核心板構(gòu)成,400 MHz的工作主頻,64 MB的SDRAM,16 MB的Flash,支持LCD接口,支持IIC接口,支持16 bit的外部總線尋址,支持DMA。主控制器接收來自PC的控制命令和圖像數(shù)據(jù),檢測并控制系統(tǒng)中的各個(gè)運(yùn)動(dòng)環(huán)節(jié),同步運(yùn)動(dòng)與噴頭的噴射,并將噴頭需要的圖像數(shù)據(jù)傳輸?shù)絿婎^板上。
主控制器在聯(lián)機(jī)工作時(shí)要能與PC雙向通信,接收PC發(fā)來的圖像數(shù)據(jù)和各種配置信息以及控制命令,同時(shí)要將系統(tǒng)的狀態(tài)傳送給PC,可考慮采用USB2.0的接口協(xié)議。由于S3C2440不支持USB2.0協(xié)議,系統(tǒng)擴(kuò)展CY7C68013A的USB擴(kuò)展接口芯片,為緩沖該芯片與ARM總線,系統(tǒng)擴(kuò)展了一片F(xiàn)PGA。由FPGA負(fù)責(zé)USB的接口緩沖、運(yùn)動(dòng)控制、位置、速度檢測、二級墨盒液位檢測、二級墨盒液泵控制、噴頭板的圖像數(shù)據(jù)格式轉(zhuǎn)換和傳輸、按噴頭位置及顏色順序點(diǎn)火噴頭的控制。
本文主要討論P(yáng)C主機(jī)與印刷機(jī)主控制板的數(shù)據(jù)通信。鑒于系統(tǒng)的需求,本通信模塊采用支持USB2.0高速數(shù)據(jù)傳輸?shù)腅Z-USB FX2LP單片機(jī)CY7C68013A作為接口芯片。采用FPGA EP1C6Q-240做為USB接口芯片的外部邏輯,完成FPGA與USB接口芯片之間的通信。當(dāng)上位機(jī)發(fā)出控制信號,經(jīng)接口芯片CY7C68013A解析后與FPGA進(jìn)行通信。系統(tǒng)主控制器檢測到上位機(jī)發(fā)出的啟動(dòng)數(shù)據(jù)傳輸、選擇數(shù)據(jù)格式等命令時(shí),啟動(dòng)數(shù)據(jù)傳輸,經(jīng)由SIE解析的數(shù)據(jù)包通過USB接口芯片CY7C68013A以同步從屬FIFO的模式將數(shù)據(jù)經(jīng)由CY7C68013A內(nèi)部乒乓控制的FIFO緩存后快速存入FPGA內(nèi)部的FIFO中,然后由主控制器ARM控制FPGA將主機(jī)通過USB傳遞的數(shù)據(jù)由噴頭控制器讀取數(shù)據(jù),再分配給6色噴頭。系統(tǒng)結(jié)構(gòu)框圖如圖1所示。
2 硬件設(shè)計(jì)
2.1 USB接口部分
紡織品數(shù)字印刷機(jī)的噴印以行為單位,每行噴印過程中必須以恒定的速度噴印。在每行的行端,噴頭小車要進(jìn)行加減速和換向,要卷動(dòng)卷布輥進(jìn)布,以便進(jìn)行下一行的噴印。恒定速度的噴印必須有恒定的圖像數(shù)據(jù)傳輸率來保證。噴印速度要求越高,對圖像數(shù)據(jù)的傳輸速度要求也越高。在本通信系統(tǒng)中,選用CY7C68013A芯片,其采用的構(gòu)架是EZ-USB FX2LP,是在 FX2 的基礎(chǔ)上改進(jìn)而成的一款 USB2.0 芯片,它集成了增強(qiáng)型的8051內(nèi)核,并采用了低功耗設(shè)計(jì),代表了業(yè)界的領(lǐng)先水平,是新一代符合USB2.0高速控制器的構(gòu)架,完全兼容FX2[2]。
在PC與FX2LP的前端控制系統(tǒng)中,F(xiàn)X2LP的內(nèi)置CPU負(fù)責(zé)接收上位PC機(jī)發(fā)來的命令對印刷機(jī)的運(yùn)動(dòng)進(jìn)行操控, 并同步圖像數(shù)據(jù), 圖像數(shù)據(jù)通過FPGA和ARM送到噴頭, 并在合適時(shí)機(jī)命令噴頭做一次點(diǎn)火動(dòng)作。如果用傳統(tǒng)的方法, 由FX2LP的內(nèi)置CPU直接尋址存儲(chǔ)由上位機(jī)發(fā)來的圖像數(shù)據(jù)的圖像存儲(chǔ)器, 并將圖像數(shù)據(jù)與運(yùn)動(dòng)控制同步發(fā)送到FPGA, 然后FPGA配合ARM控制噴頭點(diǎn)火,這些動(dòng)作需要復(fù)雜的指令序列, 多次的存儲(chǔ)器訪問, 需要耗費(fèi)大量的時(shí)間,要實(shí)現(xiàn)較高的數(shù)據(jù)傳輸率幾乎是不可能的。
分析紡織品噴墨印刷機(jī)的工作機(jī)制發(fā)現(xiàn), 前端控制系統(tǒng)不需要理解上位機(jī)傳來的圖像數(shù)據(jù),它所要做的僅是對這些圖像數(shù)據(jù)的同步, 在適當(dāng)?shù)臅r(shí)機(jī)將圖像數(shù)據(jù)傳送到噴頭。因此, 圖像數(shù)據(jù)可以不通過FX2LP的內(nèi)置CPU存取, 可直接在CPU的同步下送到噴頭。由于EZ-USB FX2提供了一種獨(dú)特的架構(gòu),EZ-USB的CPU可不在USB主機(jī)和外部邏輯的數(shù)據(jù)通道上。為了達(dá)到最大的數(shù)據(jù)帶寬,EZ-USB將USB主機(jī)和外部邏輯直接連接,從而將CPU旁路掉,使USB接口和外部應(yīng)用環(huán)境直接共享FIFO,而微處理器可不參與數(shù)據(jù)傳輸[4],此時(shí)無需執(zhí)行USB接口芯片內(nèi)部8051固件程序便可直接實(shí)現(xiàn)端點(diǎn)FIFO與外部的數(shù)據(jù)交換,這種被稱為“量子FIFO”的處理構(gòu)架,很好地解決了普通微處理器轉(zhuǎn)發(fā)方式造成的帶寬瓶頸[3]。
通過以上的分析, 系統(tǒng)采用了一種將圖像數(shù)據(jù)旁路的方法。用CY7C68013A內(nèi)部共享的4 K端點(diǎn)FIFO作為圖像暫時(shí)的存儲(chǔ)器。FIFO存儲(chǔ)器的輸入端點(diǎn)直接接收USB主機(jī)端的圖像像素?cái)?shù)據(jù)。FIFO存儲(chǔ)器的輸出端點(diǎn)數(shù)據(jù)由FPGA同步讀取, 讀取的數(shù)據(jù)經(jīng)過ARM的控制指令和硬件通道發(fā)送到噴頭。因而圖像數(shù)據(jù)的傳輸速度不再與EZ-USB的CPU的存儲(chǔ)器尋址周期緊密相關(guān),從而利用這種旁路的快速通路實(shí)現(xiàn)PC 機(jī)與噴頭之間的高速數(shù)據(jù)傳輸。FIFO 的作用也表現(xiàn)為在高速的USB傳輸與中速連續(xù)的噴印需求之間建立一個(gè)緩沖。
2.2 FPGA橋接部分
由于選用CY7C68013A芯片作為USB2.0接口芯片,而該芯片的接口頻率與系統(tǒng)主控制器的總線時(shí)序不同,不能直接將該芯片與主控制器總線連接,所以考慮用FPGA作為橋接,這樣就需要該芯片與FPGA內(nèi)部的總線進(jìn)行接口,考慮數(shù)據(jù)傳輸速率的不同,同時(shí)在FPGA內(nèi)部建立USB的數(shù)據(jù)緩沖區(qū),該緩沖區(qū)由FIFO構(gòu)成,完成與主控制器的信息交換。同時(shí),F(xiàn)PGA作為Slave FIFO模式的外部控制邏輯,提供USB的片選、寫數(shù)據(jù)時(shí)鐘和端點(diǎn)選擇等信號,實(shí)現(xiàn)對數(shù)據(jù)讀寫的控制,橋接電路的接口圖如圖2所示。
(1)與USB芯片的接口
FPGA內(nèi)部總線是同步32 bit總線,總線信號包括11位地址線addr、32 bit數(shù)據(jù)輸入data_i、32 bit數(shù)據(jù)輸出data_o、寫控制輸入we、總線周期信號cyc、鎖存信號stb、響應(yīng)信號輸出ack,以及系統(tǒng)時(shí)鐘信號clk和系統(tǒng)復(fù)位信號rst、字節(jié)選擇信號sel。
(2)FIFO的選擇與建立
由于FIFO的兩端要以不同的速率操作,因此采用的FIFO以不同的時(shí)鐘工作,寫入以USB_IFCLK為同步時(shí)鐘,讀出以系統(tǒng)時(shí)鐘clk_i為同步時(shí)鐘。寫入請求線SLRD與寫入時(shí)鐘同步,當(dāng)FIFO沒有滿且USB芯片非空時(shí),始終產(chǎn)生寫入請求。這樣保證FIFO自動(dòng)將USB芯片內(nèi)的數(shù)據(jù)讀出,減少軟件判斷的負(fù)擔(dān)。
由于采用不同時(shí)鐘的FIFO模塊不能自動(dòng)產(chǎn)生接近滿和接近空信號,故使用一個(gè)半滿信號,該信號由讀使用字rdusedw的最高位獲得。這樣只要適當(dāng)選擇FIFO的容量,就可由ARM判斷半滿信號,一旦有半滿信號,ARM就可不再判斷,連讀讀出FIFO中一半容量的數(shù)據(jù)??紤]噴頭每次噴射需要至少1 KB的數(shù)據(jù),故選擇FIFO至少為16 bit,2 KB的容量。當(dāng)ARM檢測到FIFO沒有達(dá)到半滿時(shí),如果FIFO沒空,仍然可以讀出數(shù)據(jù),只是這時(shí)每讀出一個(gè)字就必須檢測一下FIFO是否為空,讀出的速率不可能達(dá)到很高。
3 軟件設(shè)計(jì)
3.1 USB固件程序
USB固件是運(yùn)行在CY7C68013A中集成的微控制器上的程序,Cypress公司的EZ-USB FX2開發(fā)套件提供給用戶一個(gè)固件函數(shù)庫(Ezusb.lib)和固件框架(Framework),兩者均是基于KEIL C51開發(fā)的。在使用固件框架進(jìn)行特定的固件開發(fā)時(shí),固件框架已經(jīng)實(shí)現(xiàn)了初始化、重枚舉、電源管理等功能。對用戶而言,只需要在固件架構(gòu)的預(yù)留位置處添加代碼,就可以完成特定的功能[4]。
在本系統(tǒng)的固件程序設(shè)計(jì)中,利用初始設(shè)置函數(shù)TD_Init()和描述符表文件Dscr.a51完成系統(tǒng)的初始化以及端點(diǎn)配置等工作。為了優(yōu)化數(shù)據(jù)傳輸速度,配置雙端點(diǎn)組合的方式實(shí)現(xiàn)高速批量傳輸,設(shè)置相關(guān)特殊功能寄存器的初值以實(shí)現(xiàn)本系統(tǒng)的同步Slave FIFO的自動(dòng)傳輸功能[5]。
固件程序在接到上位機(jī)傳來的噴印請求命令時(shí), 開啟一次USB傳輸。在ARM發(fā)起控制信號啟動(dòng)小車運(yùn)動(dòng) 到達(dá)噴印位置時(shí), ARM從FPGA內(nèi)部FIFO讀取圖像數(shù)據(jù)并啟動(dòng)噴頭點(diǎn)火信號, 完成一個(gè)像素點(diǎn)的噴印。然后繼續(xù)小車運(yùn)動(dòng), 開始下一次噴印。當(dāng)一次噴印結(jié)束,ARM將系統(tǒng)狀態(tài)經(jīng)由CY7C68013A反饋給PC后, CY7C68013A結(jié)束本次數(shù)據(jù)傳輸。ARM主控程序命令小車減速、停止并啟動(dòng)卷布動(dòng)作。待卷布完成后, 一個(gè)動(dòng)作流程結(jié)束,等待接收下一個(gè)命令。
3.2 驅(qū)動(dòng)程序
USB設(shè)備驅(qū)動(dòng)程序負(fù)責(zé)建立起主機(jī)端和設(shè)備端的聯(lián)系。在Cypress公司提供的EZ-USB FX2LP 開發(fā)包里包含了CyUSB.sys文件,這是一個(gè)符合WDM規(guī)范支持 USB2.0的通用設(shè)備驅(qū)動(dòng)程序,開發(fā)應(yīng)用時(shí)只需對VID、PID等幾處修改即可滿足本系統(tǒng)的應(yīng)用需求。
通過對該驅(qū)動(dòng)程序的CyUSB.inf文件進(jìn)行客戶化設(shè)計(jì)并隨后采用Windows設(shè)備管理程序的做法,任何 USB設(shè)備均可與CyUSB.sys驅(qū)動(dòng)程序相匹配。該驅(qū)動(dòng)程序面向通用型用途的一個(gè)重要特點(diǎn)是其無需重新編譯即可進(jìn)行客戶化設(shè)計(jì),通過修改該驅(qū)動(dòng)程序的.inf文件,能夠使其通告一個(gè)與眾不同的全局唯一標(biāo)識(shí)符(GUID)。這將允許該驅(qū)動(dòng)程序的不同副本在一臺(tái)PC上適度地共存。此外,該.inf文件還使得驅(qū)動(dòng)程序能夠執(zhí)行一連串預(yù)先記錄的控制端點(diǎn)傳送。這便允許根據(jù)與其相連設(shè)備的Vendor ID和 Product ID來對該驅(qū)動(dòng)程序的啟動(dòng)特性進(jìn)行客戶化設(shè)計(jì)[6]。
3.3 應(yīng)用程序
主機(jī)與設(shè)備一般通過主從方式進(jìn)行數(shù)據(jù)通信,主機(jī)應(yīng)用程序向設(shè)備發(fā)送命令數(shù)據(jù)包,設(shè)備接收到命令數(shù)據(jù)后,接收主機(jī)傳送過來的數(shù)據(jù)。主機(jī)應(yīng)用程序通過設(shè)備驅(qū)動(dòng)程序完成對設(shè)備的控制和通信,采用 VC++6.0編寫。
為了提高傳輸速度與效率,也為防止應(yīng)用程序在讀寫數(shù)據(jù)時(shí)產(chǎn)生的“假死機(jī) ”現(xiàn)象,應(yīng)用程序采用多線程方法編寫,一般要把數(shù)據(jù)傳輸放在另外一個(gè)線程里,即單獨(dú)開啟一個(gè)批量傳輸線程作為區(qū)別于主線程的輔助線程。批量傳輸線程負(fù)責(zé)向設(shè)備寫入數(shù)據(jù),并通過消息傳送機(jī)制與主線程通信。主線程負(fù)責(zé)界面管理、數(shù)據(jù)處理、向設(shè)備發(fā)送命令數(shù)據(jù)包以及啟動(dòng)/停止批量傳輸線程。
在線程循環(huán)中,主要調(diào)用BeginDataXfer()、WaitForXfer()、FinishDataXfer()3個(gè)函數(shù)。其中BeginDataXfer()為發(fā)起異步傳輸,并且立即返回。即發(fā)起此次需要傳輸字節(jié)后,并不會(huì)等待傳輸完畢,而是立即開始下一次字節(jié)數(shù)據(jù)的傳輸;WaitForXfer()為異步傳輸最大等待時(shí)間;執(zhí)行FinishDataXfer()時(shí)才開始真正地將傳輸數(shù)據(jù)寫入設(shè)備存儲(chǔ)器中。另外,如果要傳輸非512 B整數(shù)倍的數(shù)據(jù),而且不是一次傳輸完,則應(yīng)在批量傳輸線程中利用SetXferSize()函數(shù)重新設(shè)置傳輸大小,否則會(huì)導(dǎo)致數(shù)據(jù)不同步。
該系統(tǒng)經(jīng)過測試,達(dá)到了預(yù)想的噴繪效果和速度要求。通過對 FPGA器件的使用,減少了分立元件的數(shù)量,同時(shí)簡化了系統(tǒng)設(shè)計(jì),增強(qiáng)了系統(tǒng)的可編程性能,使系統(tǒng)易于維護(hù)和升級,并有利于技術(shù)保密和知識(shí)產(chǎn)權(quán)保護(hù)。該設(shè)計(jì)方案已應(yīng)用于實(shí)際開發(fā)的項(xiàng)目中。
pid控制相關(guān)文章:pid控制原理
fpga相關(guān)文章:fpga是什么
pid控制器相關(guān)文章:pid控制器原理
存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理
評論