蘇政偉,陳科明,馬 琪
(杭州電子科技大學(xué)微電子CAD研究所,浙江杭州310018)
發(fā)排卡是一種用來(lái)連接印前設(shè)備和輸出設(shè)備的印刷業(yè)專用設(shè)備,主要功能是把PC機(jī)里的版面文件處理成點(diǎn)陣格式后發(fā)送給輸出設(shè)備[1]。按其采用的接口技術(shù)可以分為PCI發(fā)排卡、USB發(fā)排卡等。近年來(lái),USB發(fā)排卡憑借發(fā)排速度快、通用性強(qiáng)、支持即插即用等優(yōu)勢(shì),逐漸取代PCI發(fā)排卡成為主流。但是USB發(fā)排卡還是存在發(fā)排速度不高、穩(wěn)定性不夠、系統(tǒng)通用性和可擴(kuò)展性不足等問(wèn)題。本文根據(jù)實(shí)際需求,設(shè)計(jì)了由FPGA專用硬件邏輯、USB2.0接口芯片及SDRAM存儲(chǔ)器構(gòu)成的USB發(fā)排卡系統(tǒng)結(jié)構(gòu),同時(shí)從軟硬件兩方面對(duì)發(fā)排卡的發(fā)排速度、系統(tǒng)穩(wěn)定性進(jìn)行了優(yōu)化,優(yōu)化后發(fā)排速度高達(dá)30MB/s,并且性能穩(wěn)定。
直接制版機(jī)(Computer To Plate,CTP)是一種數(shù)字化印刷成像的光機(jī)電一體化設(shè)備,將文字、圖像轉(zhuǎn)變?yōu)閿?shù)字信號(hào),用此信號(hào)驅(qū)動(dòng)激光器在專用版材上掃描成像,再用顯影液顯影生成印版[2]。CTP設(shè)備主要應(yīng)用于大型印刷企業(yè),如報(bào)社印刷廠和商業(yè)印刷廠等等。
CTP系統(tǒng)如圖1所示,包括PC機(jī)、CTP控制系統(tǒng)、USB發(fā)排卡、LD驅(qū)動(dòng)電路和激光器等。USB發(fā)排卡的主要功能是通過(guò)USB從PC機(jī)取得激光打點(diǎn)數(shù)據(jù),并轉(zhuǎn)發(fā)給LD驅(qū)動(dòng)電路進(jìn)行激光打點(diǎn)。
圖1 CTP系統(tǒng)框圖
USB發(fā)排卡硬件結(jié)構(gòu)如圖2所示,主要包括FPGA主控制器、USB接口、SDRAM存儲(chǔ)器、SPI通信接口、編碼器輸入和LD驅(qū)動(dòng)接口等模塊,主控制器用Altera EP1C6Q240 FPGA芯片實(shí)現(xiàn)。
PC機(jī)發(fā)排軟件將版面數(shù)據(jù)發(fā)送到USB接口模塊,F(xiàn)PGA主控制器將版面數(shù)據(jù)放SDRAM中緩存。在激光掃描過(guò)程中發(fā)排卡的數(shù)據(jù)必須和CTP的機(jī)械運(yùn)動(dòng)相配合,因此將編碼器輸入的CTP系統(tǒng)行同步信號(hào)和位同步作為讀數(shù)據(jù)的時(shí)鐘,按照一定的時(shí)序關(guān)系將SDRAM中暫存的版面數(shù)據(jù)輸出至LD驅(qū)動(dòng)接口模塊。為了提高傳輸速度,結(jié)構(gòu)設(shè)計(jì)中采用了面積換取速度的思想,用兩塊SDRAM進(jìn)行乒乓操作來(lái)輪流讀寫數(shù)據(jù)[3]。LD驅(qū)動(dòng)接口模塊負(fù)責(zé)將輸出的并行數(shù)據(jù)轉(zhuǎn)換成高速的串行數(shù)據(jù),輸出到CTP的LD驅(qū)動(dòng)電路。SPI通信模塊則負(fù)責(zé)發(fā)排卡與CTP控制系統(tǒng)的通信,完成信息的交互和握手信號(hào)的傳遞。
圖2 USB發(fā)排卡硬件結(jié)構(gòu)圖
FPGA主控制器的硬件邏輯結(jié)構(gòu)如圖3所示,劃分為以下4個(gè)模塊:USB通信接口、SDRAM控制器、與CTP控制系統(tǒng)的SPI通信模塊、發(fā)排卡數(shù)據(jù)輸出時(shí)序控制模塊。在USB通信接口和SDRAM控制器之間,采用了一個(gè)1 024×16的FIFO作為輸入數(shù)據(jù)的緩沖;而在SDRAM控制器與數(shù)據(jù)輸出時(shí)序控制模塊之間,則采用了一個(gè)4 096×16的FIFO作為輸出數(shù)據(jù)的緩沖。
SDRAM控制器設(shè)計(jì)是FPGA主控制器硬件邏輯設(shè)計(jì)的難點(diǎn)。SDRAM的操作流程是:先初始化設(shè)置SDRAM工作模式,然后進(jìn)行數(shù)據(jù)讀寫,同時(shí)通過(guò)刷新保持電容的數(shù)據(jù)。SDRAM控制器狀態(tài)機(jī)如圖4所示。
圖3 FPGA主控制器邏輯結(jié)構(gòu)框圖
圖4 SDRAM控制器狀態(tài)機(jī)
由于USB發(fā)排卡的實(shí)際傳輸數(shù)據(jù)較大,設(shè)計(jì)中選擇SDRAM的頁(yè)猝發(fā)方式進(jìn)行讀寫。對(duì)于設(shè)計(jì)選用的SDRAM芯片MT48LC16M16A2,一次要連續(xù)寫入或讀取512個(gè)字。但是在USB發(fā)排卡傳輸版面數(shù)據(jù)的最后一行時(shí)會(huì)出現(xiàn)傳輸數(shù)據(jù)小于512字的情況。本設(shè)計(jì)利用預(yù)充電命令中斷猝發(fā)讀寫,可以解決這個(gè)問(wèn)題。在版面數(shù)據(jù)傳輸結(jié)束時(shí),把輸入緩沖FIFO中的讀地址傳入SDRAM控制器,即傳入SDRAM最后一行數(shù)據(jù)的大小N。寫入時(shí),在發(fā)起寫入命令后的N-1個(gè)時(shí)鐘,對(duì)所有BANK預(yù)充電中斷頁(yè)猝發(fā)寫。讀出時(shí),在讀取命令后的N+1個(gè)時(shí)鐘對(duì)所有BANK預(yù)充電中斷猝發(fā)讀。此外本文采用了集中刷新方式解決了刷新與讀寫數(shù)據(jù)的沖突。當(dāng)刷新定時(shí)器計(jì)數(shù)到時(shí),若正好有數(shù)據(jù)傳輸,會(huì)先讓數(shù)據(jù)傳輸繼續(xù)。數(shù)據(jù)傳輸完成后,利用數(shù)據(jù)傳輸?shù)臅r(shí)間間隙再連續(xù)刷新多次,這樣能保證SDRAM中的數(shù)據(jù)不丟失。
本設(shè)計(jì)開發(fā)的軟件包括上位機(jī)發(fā)排軟件動(dòng)態(tài)鏈接庫(kù)和USB固件程序。為了保證數(shù)據(jù)傳輸?shù)倪B貫性,發(fā)排卡輸入端USB的傳輸速度應(yīng)該大于發(fā)排卡輸出端LD驅(qū)動(dòng)電路的傳輸速度。發(fā)排卡實(shí)際的數(shù)據(jù)傳輸速度由CTP系統(tǒng)的LD驅(qū)動(dòng)電路和激光器的路數(shù)所決定,當(dāng)CTP系統(tǒng)采用更多路的激光器時(shí),LD驅(qū)動(dòng)電路數(shù)據(jù)傳輸速度就要求更快,USB的傳輸速度也要隨之提高。本設(shè)計(jì)從上位機(jī)軟件、USB驅(qū)動(dòng)程序、USB固件等幾方面對(duì)USB傳輸速度進(jìn)行了優(yōu)化,最高傳輸速度能夠達(dá)到30MB/s,提高了發(fā)排卡的發(fā)排速度。
發(fā)排軟件動(dòng)態(tài)鏈接庫(kù)是在Microsoft Visual C++6.0開發(fā)環(huán)境下,使用CYPRESS提供的CYAPI.lib庫(kù)文件進(jìn)行設(shè)計(jì),實(shí)現(xiàn)對(duì)USB設(shè)備的管理和控制[4]。本文在動(dòng)態(tài)鏈接庫(kù)中設(shè)計(jì)了通用的USB數(shù)據(jù)傳輸函數(shù),屏蔽了USB傳輸?shù)募?xì)節(jié),發(fā)排軟件開發(fā)人員可直接調(diào)用,而不需要考慮數(shù)據(jù)傳輸?shù)念愋?。本設(shè)計(jì)還對(duì)動(dòng)態(tài)鏈接庫(kù)中的函數(shù)進(jìn)行了優(yōu)化,以提高發(fā)排卡系統(tǒng)的性能。驅(qū)動(dòng)程序中數(shù)據(jù)緩沖大小不足是造成USB傳輸慢的一個(gè)重要原因。本文通過(guò)將驅(qū)動(dòng)程序緩沖大小設(shè)置為2MB,將USB傳輸速度由優(yōu)化前的 13MB/s,提高到 28MB/s。
實(shí)際使用中還發(fā)現(xiàn)CY7C68013A芯片工作不穩(wěn)定,導(dǎo)致數(shù)據(jù)傳輸被中斷的現(xiàn)象。經(jīng)大量嘗試,發(fā)現(xiàn)對(duì)CY7C68013A進(jìn)行軟件復(fù)位能夠解決這個(gè)問(wèn)題。本設(shè)計(jì)通過(guò)端點(diǎn)0對(duì)CY7C68013A的CPUCS寄存器先后寫入數(shù)據(jù)0x01和0x00來(lái)實(shí)現(xiàn)對(duì)芯片復(fù)位。
USB固件程序完成芯片的初始化、處理各種USB標(biāo)準(zhǔn)設(shè)備請(qǐng)求、重列舉和電源管理。CYPRESS公司提供CY7C68013A固件程序的流程框架,設(shè)計(jì)中根據(jù)需求修改和添加固件框架中的描述符文件dscr.a51和外設(shè)功能文件periph.c中的代碼,即可實(shí)現(xiàn)USB特定設(shè)備的功能[5]。
本設(shè)計(jì)從數(shù)據(jù)包大小和端點(diǎn)緩沖區(qū)配置兩方面對(duì)固件程序進(jìn)行一定的優(yōu)化,以提高USB的傳輸速度。數(shù)據(jù)包大小的設(shè)置應(yīng)該在協(xié)議消耗和剩余帶寬之間取平衡。高速傳輸下,塊傳輸允許的數(shù)據(jù)包最大值為512Byte。而數(shù)據(jù)包設(shè)置多大能使傳輸速度達(dá)到最佳,取決于傳輸?shù)臄?shù)據(jù)量以及端點(diǎn)的配置,需要根據(jù)實(shí)際情況測(cè)得。本文通過(guò)大量實(shí)驗(yàn),測(cè)得在傳輸20MB數(shù)據(jù)時(shí),數(shù)據(jù)包大小設(shè)置為480字節(jié),USB傳輸速度最快。端點(diǎn)緩沖區(qū)大小對(duì)USB傳輸速度也有一定影響。多重緩沖結(jié)構(gòu)可以在數(shù)據(jù)傳輸過(guò)程中有效提升數(shù)據(jù)帶寬,平滑帶寬抖動(dòng),減少傳輸?shù)却臅r(shí)間。本設(shè)計(jì)將端點(diǎn)緩沖區(qū)大小優(yōu)化后配置為3×512字節(jié),較原來(lái)的2×512字節(jié)的配置,USB傳輸速度有一定的提升。
本文設(shè)計(jì)了一種USB2.0高速發(fā)排卡,硬件上采用USB2.0+FPGA+SDRAM的設(shè)計(jì)結(jié)構(gòu),軟件上通過(guò)對(duì)發(fā)排軟件動(dòng)態(tài)鏈接庫(kù)和USB固件程序進(jìn)行設(shè)計(jì)和優(yōu)化,能夠完成與主機(jī)的USB通信、版面數(shù)據(jù)的緩沖、與CTP控制系統(tǒng)的交互以及發(fā)排數(shù)據(jù)輸出的時(shí)序控制,具有可擴(kuò)展性強(qiáng)、傳輸速度高和傳輸連貫性好等優(yōu)點(diǎn)。經(jīng)過(guò)優(yōu)化,發(fā)排卡的傳輸速率由13MB/s提高到了30MB/s,系統(tǒng)穩(wěn)定性也有大幅提升。目前,發(fā)排卡已應(yīng)用于實(shí)際印刷制版中。
[1] 王玉麗.基于USB2.0的直接制版機(jī)高速發(fā)排卡的設(shè)計(jì)與實(shí)現(xiàn)[D].蘇州:蘇州大學(xué),2010.
[2] 于鵬.直接制版機(jī)控制系統(tǒng)和USB發(fā)排卡的設(shè)計(jì)與實(shí)現(xiàn)[D].蘇州:蘇州大學(xué),2008.
[3] 劉延飛,楊鐵阡,李琪,等.多總線地面測(cè)試設(shè)備中雙SDRAM控制器的設(shè)計(jì)[J].電訊技術(shù),2011,51(4):31-34.
[4] 何蘇勤,黃翠翠.基于USB2.0的異步數(shù)據(jù)傳輸和控制接口的設(shè)計(jì)[J].應(yīng)用天地,2010,29(3):79-83.
[5] 薛園園.USB應(yīng)用開發(fā)技術(shù)大全[M].北京:人民郵電出版社,2007:202-205.