具体实施方式
12英寸宽的打印头通常由一个或多个PEC控制,以便能够在A4和信纸页面上实现全页宽打印。在本发明所述的打印环境中,最多使用6个彩色墨水通道,包括:
·CMY,用于常规的彩色打印。
·K,用于黑色文本和其它黑色内容的打印。
·IR(红外),用于支持标记的应用。
·F(固定剂),支持高速打印。
由于本发明所述的打印机支持高速打印,所以应使用固定剂进行高速打印,使下一页打印完成前本页上的墨水能够完全干燥,否则页面之间可能发生蹭色现象。在较低速度的打印环境中,不需要使用固定剂。
打印引擎/控制器可以制造在一个芯片中,并与打印头相连。该芯片应具有4个基本功能:
通过串行接口(例如IEEE1394)接收压缩页面内容。
提供一个从压缩格式产生页面的打印引擎。该打印引擎的功能包括放大页面图像、抖动连续色调层、把黑色层合成到连续色调层上、增加红外标记(可选)、以及向打印头发送所得图像。
一个用于控制打印头和步进电机的打印控制器。
两个标准的低速串行口,用于与两个QA芯片通信。需要注意的是,在验证过程中,为了保证较大的安全性,必须使用两个端口,而不是一个端口。
图1所示为从计算机系统向打印页面发送文档的数据流。文档在11处被接收,然后被装入到存储缓冲器12中,在缓冲区12中,可以生成页面布局,同时还可以增加一些所需的对象。从存储缓冲器12中送出的页面在13处被光栅化,在14处被压缩,然后被传送给打印机引擎控制器10。打印机引擎控制器10接收压缩的页面图像,把压缩的页面图像存储到缓冲器15中,然后压缩的页面图像被送入到页面扩展器16中,并在页面扩展器中被还原为非压缩格式。在17处,可以进行任何必要的抖动处理。在18处,可以把黑色双水平层复合到连续色调层上,在19处还可以加入红外标记。在20处,合成后的页面数据被打印出来,形成页面21。
打印引擎/控制器接收压缩页面图像,对页面进行扩展,然后以管道方式打印页面内容。页面扩展和打印最好采用管道方式,因为不可能在内存中存储可变大小的双水平CMYK+IR页面图像。
管道打印的第一个阶段扩展JPEG格式压缩的连续色调CMYK层(见下文的说明),扩展一个Group4传真格式压缩的双水平抖动显示阵选择图(见下文的说明),并且扩展一个Group4传真格式压缩的双水平黑色层(见下文的说明),所有扩展工作都以并行方式进行,同时,标记编码器对压缩的页面图像编码双层IR标记数据。第二个阶段使用由抖动显示阵选择图选择的抖动显示阵抖动连续色调CMYK层。如果需要C、M、Y、K、或IR通道,那么在每个点的位置上还会产生一个固定剂层。最后一个阶段通过打印头和打印头接口(见下文的说明)打印双水平CMYK+IR数据。
图2所示为打印引擎/控制器10与总体打印机系统体系的关系。打印机系统可能包含的部件有:
·一个打印引擎/控制器(PEC):一个PEC芯片10或芯片集负责接收压缩的页面数据,并把数据存储到存储缓冲器24中,执行页面扩展、黑色层复合,并把点数据发送给打印头23。PEC芯片10或芯片集还可以与QA芯片25,26通信,从而提供一种获得打印头特性数据的方法,以保证最佳打印效果。PEC是本发明的主体。
·一个存储缓冲器:存储缓冲器24用于存储压缩的页面图像,并且在打印特定页面的过程中存储临时数据。存储缓冲器的构造和原理是习知技术,在使用本发明的PEC时,可以利用相关的各种标准的芯片和技术。
·一个主QA芯片:主芯片25与可更换墨盒QA芯片26配合使用。QA单元的构造和原理是一种习知技术,在使用本发明的PEC时,可以利用相关的各种现有QA过程。例如,在我们的同类美国专利申请中描述了一种QA芯片:
USSN |
我们的备案号 |
我们的标题 |
TBA |
AUTH01 |
验证协议和系统 |
09/112,763 |
AUTH02 |
用于保护芯片免受IDD波动冲击的电路 |
09/112,737 |
AUTH04 |
保护片上存储器(闪存和RAM)的方法 |
09/112,761 |
AUTH05 |
芯片的防篡改方法 |
09/113,223 |
AUTH06 |
鉴权物理对象的系统 |
TBA |
AUTH07 |
验证协议和系统 |
TBA |
AUTH08 |
验证协议和系统 |
09/505,003 |
AUTH09 |
消耗品的鉴权协议和系统 |
09/517,608 |
AUTH10 |
消耗品的鉴权协议和系统 |
09/505,147 |
AUTH11 |
消耗品的鉴权协议和系统 |
09/505,952 |
AUTH12 |
对存储在闪存中的数值的非法更改 |
TBA |
AUTH13 |
处理安全数据的系统 |
09/516,874 |
AUTH14 |
带有防电源冲击的鉴权芯片 |
TBA |
AUTH15 |
秘密数据的保护处理 |
QA芯片通信功能最好包含在PEC芯片的总体功能中,因为它在图像扩展和驱动物理打印头方面有一定的作用。通过嵌入QA芯片的通信功能,可以保证打印页面时不会发生却墨现象。另外,还可以使用一个鉴权芯片把QA嵌入到打印头组件中。由于它是主QA芯片,所以只包含鉴权密钥,不包含用户数据。但是,该该芯片必须与墨盒的QA芯片匹配。墨盒中的QA芯片储存保证最佳打印质量所需的信息,它是一个鉴权芯片。优选的是使用64M位(8MB)存储缓冲器存储压缩页面图像。这样,当向缓冲区中写入一个页面时,可以同时从缓冲区中读取另一个页面(双缓冲)。另外,在打印页面时,PEC使用内存来缓冲计算得到的点信息。在打印第N个页面时,缓冲区用于:
·读取压缩页面N
·读取和写入页面N的双水平点信息
·写入压缩页面N+1
优选的是PEC芯片带有一个简单的微处理器CPU核心35以执行下列功能:
·在打印页面过程中,通过串行接口36执行的QA芯片鉴权协议
·在打印页面过程中,通过并行接口91驱动步进电机(步进电机需要5KHz的处理频率)
·在打印过程中同步PEC芯片的各部分
·提供与外部数据请求(编程寄存器等)的一种接口方法
·提供与打印头段低速数据请求(例如读取向量属性和写入脉冲参数)的一种接口方法
·提供向外部DRAM写入横向和纵向打印标记的一种方法
由于所有图像处理工作都由专用的硬件执行,所以上述CPU不需要处理像素。因此,CPU可以非常简单。多种现有的CPU核心都可以胜任上述工作:任何一种具有足够处理能力执行所需计算和控制功能的处理器核心都可以使用。例如一个速度为1MHz的Philips 8051微控制器。可以为CPU核心35配备一个程序ROM和一个小的程序RAM。CPU通过内存映射I/O与PEC芯片内的其它单元通信。可以把特定的地址范围与特定的单元映射,在每个地址范围内,可以把特定地址与相应单元的特定寄存器映射,其中包括串口36和并口91。在PEC芯片中可以集成一个比较小的程序闪存ROM,其大小取决于所选的CPU,但是不能超过8KB。同样,可以在PEC芯片中集成一个小的RAM区。由于程序代码不需要控制图像,所以不需要很大的RAM。RAM的大小与所选的CPU有关(例如堆栈机制、子程序调用规定、寄存器大小等),但是不能超过2KB。
使用上述基于引用段的页宽打印头的PEC芯片可以在全点阵分辨率(通常为1600dpi)下再生黑色,但是需要使用半色调处理以较低的分辨率再生连续色调颜色。因此,页面描述被分为黑色双水平层和连续色调层。黑色双水平层用于复合到连续色调层上。黑色双水平层由包含1位暗度/像素的位图构成。黑色层蒙罩的分辨率是打印机的全点分辨率的一个整数因子。它所支持的最高分辨率是1600dpi,即打印机的全点分辨率。连续色调层由包含32位CMYK颜色/像素的一个位图构成,其中的K是可选的。这种连续色调图像的分辨率是打印机的点分辨率的一个整数因子。对于单个PEC来说,它所支持的最高分辨率是320ppi/12英寸,即打印机的点分辨率的1/5。对于更高的连续色调分辨率,需要使用多个PEC,其中的每个PEC产生输出页面的一条。为了简化RIP中的计算,连续色调分辨率通常还是黑色双水平分辨率的一个整数因子。但是,这不是一种强制要求。为了实现在打印机的内存中的高效存储,黑色双水平层和连续色调层都为压缩形式。
图3所示为打印机引擎的体系结构。打印机引擎的页面扩展和打印管道由一个高速串行接口27(例如标准的IEEE1394接口)、一个标准的JPEG解码器28、一个标准的Group4传真解码器、一个定制的半色调器/合成器单元29、一个定制的标记编码器30、一个行装载器/格式器单元31、以及一个连接打印头33的定制接口32构成。解码器28,88和编码器30向半色调器/合成器单元29缓冲。标记编码器30根据协议向页面增加页面标记,协议与页面的使用有关。讨论标记的内容已经超出了本
发明的范围。
打印引擎以双缓冲方式工作。一个页面从高速串行接口27通过DRAM接口89和数据总线90被装载到DRAM34中,同时装载的前一个页面被从DRAM34读出,并被通过打印引擎管道传送。当完成页面的打印时,刚刚装入的页面成为被打印页面,同时通过高速串行接口27向DRAM34装入一个新页面。在第一个阶段,管道扩展所有JPEG压缩的连续色调(CMYK)层,并扩展所有两个Group4传真压缩的双水平数据流。上述两个数据流是一个黑色层(当然,PEC不知道是否为彩色,而且该双水平层可以定向到任何输出墨水)以及一个蒙罩(该蒙罩用于为连续色调的抖动选择抖动点阵,见下文的说明)。在第二个阶段,上述数据被并行地加入标记,以便随后以红外(IR)或黑色墨水渲染。最后,在第三个阶段中,对连续色调层进行抖动处理,并把位置标记和双水平点层复合到抖动后的双水平层上。然后,数据流被很好地调整,以便在打印头中的重合段之间产生平滑的渐变效果,同时补偿打印头中的被堵喷嘴。在此阶段最多可以生成6个通道的双水平数据。但是需要注意,并不是全部6个通道都出现在打印头上。例如,打印头可能只是CMY的,此时K被推入CMY通道,而IR被忽略。另外,如果没有IR墨水(或者出于测试目的),位置标记也可以被打印到K中。所得到的双水平CMYK-IR点数据被缓冲并格式化,然后被通过一套行缓冲器(见下文的说明)输出到打印头上。大多数行缓冲器可以在芯片DRAM34中实现。在最后一个阶段中,通过打印头接口32打印上述6个通道的双水平点数据。
在使用PEC的打印系统中通常采用压缩处理。这是为了降低主机和PEC之间的带宽要求以及降低页面存储的内存要求。在267ppi分辨率下,连续色调CMYK数据的一个信封页面的数据量为25MB。使用有损连续色调压缩算法(例如JPEG,见下文的说明),连续色调图像的压缩比可达到10∶1,同时不会对打印质量产生明显影响,因此,压缩后的页面大小为2.5MB。在800dpi分辨率下,双水平数据的一个信封页面的数据量为7MB(压缩后)。连贯的数据(例如文本)的压缩效果很好。使用无损双水平压缩算法(例如Group4传真,见下文的说明),10点文本内容的压缩比可达到10∶1以上,因此上述信封页面的压缩数据量为0.8MB。经过抖动后,一个CMYK连续色调图像页面的数据为114MMB双水平数据。下文中所述的双层压缩页面图像格式综合利用了有损JPEG连续色调图像压缩算法和无损双水平文本压缩算法的各自优点。经过压缩处理后,数据的格式已非常紧凑,实现了高效存储,同时保持了简单性,从而可以在打印过程中直接地、实时地扩展。由于文本和图像通常不重叠,所以在正常的最坏情况下,页面图像数据为2.5MB(即,完全为图像),而在最佳情况下,页面图像数据只有0.8MB(即,完全为文本)。在极端最坏情况下,页面图像数据为3.3MB(即,文本在图像之上)。假设图像占1/4页面,则页面图像数据为1.2MB。
对于通过慢速线路或噪音较高的电话线路传输无损压缩双水平数据的情况,可以使用Group3传真压缩算法(见ANSI/EIA 538-1988,Group4传真设备的传真编码方案和编码控制功能,1988年8月)。双水平数据代表在白色背景上扫描的黑色文本和图形。而且,上述算法还针对此类图像进行了优化(但是对于半色调双水平图像没有进行优化)。1DGroup3算法以扫描宽度编码方法对每个扫描行进行编码,然后采用霍夫曼编码方法对所得到的扫描宽度编码。范围在0到63之间的扫描宽度使用终止编码处理;范围在64到2623之间的扫描宽度使用标记编码处理。每个标记编码为64的整数倍,后跟一个终止码。超过2623的扫描宽度使用多标记编码处理,后跟一个终止码。霍夫曼表是固定的,但是针对黑色和白色扫描分别进行了优化(但超过1728的标记编码除外,它们是通用的)。在可能的情况下,2D Group3算法把一个扫描行作为一系列相对于前一个扫描行的短边偏移(delta)(0,±1、±2、±3)编码。delta符号是统一编码的(因此0偏移符号只占一位)。2D编码行中无法采用delta编码的边以扫描宽度编码处理,并加一个1D-前缀。而以2D编码的扫描行采用不同的方法标记。不管需要与否,1D编码的扫描行都以正常间隔产生,以便保证解码器可以从行噪中恢复数据,同时尽可能不损失图像质量。2D Group3通常可以实现6∶1的压缩比(见Urban,S.J.,“传真系统的电子成像标准回顾”,电子成像杂志,1992年1月,Vol.1(1),第5-21页)。
对于通过无错通信线路(即,线路可实现真正无错传输,或者在较低的协议层进行纠错)传输数据的情况,Group4传真算法(见ANSI/EIA538-1988,Group4传真设备的传真编码方案和编码控制功能,1988年8月)可以无损压缩双水平数据。Group4算法以2D Group3算法为基础,其主要修改是:由于传输是无错的,所以不需要再为纠错而每隔一定间隔产生1D编码行。对于CCITT测试图像,Group4算法的压缩比在20∶1到60∶1之间。Group4压缩算法的设计目标和性能使其成为双水平层的一种理想压缩算法。但是,其霍夫曼表针对较低的扫描分辨率(100-400dpi)进行了优化,而且它会拙劣地编码超过2623的扫描宽度。在800dpi分辨率下,我们的最大扫描宽度是6400。虽然Group4解码器核心可以在PEC中使用,它可能无法处理超过正常的400dpi传真应用中的扫描宽度,所以需要进行适当的修改。使用G4传真对黑色层(通常为1600dpi)进行无损压缩的压缩比为10∶1以上。使用G4传真对抖动显示阵选择层(通常为320dpi,与连续色调彩色层相配)进行无损压缩的压缩比为50∶1以上。
Group4(G4)传真解码器反而则对双水平数据进行解压缩。双水平数据被限制为单点颜色(通常黑色用于文本和线图像),抖动显示阵选择位图用于对连续色调数据(由JPEG解码器解压缩)进行后续抖动。输入G4传真解码器的数据是从外部DRAM读取的2个平面的双水平数据。由G4传真解码器输出的数据是2个平面的解压缩双水平数据。解压缩后的双水平数据被送到半色调器/合成器单元(HCU)进行打印管道中的下一个阶段的处理。两个双水平数据缓冲器用于在G4传真解码器和HCU之间传送双水平数据。每个解压缩的双水平层被输出到两个行缓冲器中。每个缓冲器可以储存一个最大分辨率的12英寸整点行。采用两个行缓冲器的好处是,当HCU读取一行数据时,G4传真解码器可以写另一行数据。这种能力是非常重要的,因为单个双水平行通常低于1600dpi,所以必须在点和行方向上同时扩展。如果缓冲低于一个整行,那么G4传真解码器就必须对同一行多次解码——每次用于输出一个600dpi点行。
点颜色1能够使输出图像的单个彩色平面具有高分辨率的点数据。虽然连续色调层为图像提供的足够的分辨率,但是点颜色1更适用于文本和线图形(通常为黑色)的应用。当点颜色用于文本和线图形时,压缩比通常可以超过10∶1。点颜色1支持的最高分辨率为1600dpi。因此,每个行缓冲器的数据为2400B(12英寸×1600dpi=19200位)。
抖动显示阵选择图的分辨率应该较好地匹配连续色调分辨率。所以每个行缓冲器的数据是480B(3840位),可以存储320dpi的12英寸点行。当抖动显示阵选择图与连续色调的分辨率匹配时,压缩比一般可以超过50∶1。
为了支持下列功能:
·800dpi点颜色1层(通常为黑色)
·320dpi抖动显示阵选择层
为了实现1页/秒的打印速度(页宽可以是12英寸或8.5英寸),压缩带宽应为9.05MB/秒,在最高打印速度时(30000行/秒),对于12英寸页面宽度和8.5英寸页面宽度,所需的压缩带宽分别为20MB/秒和14.2MB/秒。当解压缩数据被输出到行缓冲器中时,G4传真解码器可以快速地、同时地从每个输出中解压缩出行数据。
G4传真解码器通过DRAM接口直接从内存中接收数据。压缩量决定了与外部DRAM之间的带宽要求。由于G4传真是无损压缩的,所以图像的复杂程度影响数据量和带宽。通常一个800dpi黑色文本/图形层的压缩比超过10∶1,所以1页/秒的打印速度需要0.78MB/秒的带宽。同样,通常一个320dpi抖动选择阵的压缩比在50∶1以上,所以1页/秒的打印速度需要0.025MB/秒的带宽。对与最快打印速度,320dpi抖动选择阵和800dpi点颜色1所需的带宽分别为1.72MB/秒和0.056MB/秒。因此,2MB/秒的总带宽完全可以满足DRAM的带宽要求。
G4传真解码功能通过G4传真解码器核心实现。可以使用各种G4传真解码器核心:只要这种G4传真解码器核心的处理速度足以执行所需的计算和控制功能。G4传真解码器核心必须能够处理在超过400dpi分辨率的传真应用中的扫描宽度,因此可能需要进行一些修改。
JPEG压缩算法(见ISO/IEC 19018-1:1994,信息技术——连续色调静态图像的数字压缩和编码:要求与原则,1994)在特定质量等级上对连续色调图形进行有损压缩。在压缩比低于5∶1时,JPEG算法不会给图像质量带来可见影响。在压缩比低于10∶1时,图像质量的下降可以忽略(见Wallace,G.K.,“JPEG静态图形压缩标准”,ACM通信,Vol.34,No.4,1991年4月,33-44)。JPEG通常首先把图像转化为一个颜色空间,该颜色空间把亮度和色度分离为独立的颜色通道。这样,色度通道可以被二次取样,同时不会使图像质量降低很多,因为人类视觉系统对亮度的敏感性要比对色度的敏感性强得多。经过第一步后,对每个颜色通道独立压缩,把图像分解为8×8的像素块。然后,通过离散余弦变换(DCT)把每个像素块变换为频域。这种变换相对较低的频率因子中的图像能量集中,从而较高频率因子能够自然地量化。这种量化是JPEG中的主要压缩源。下一步,根据频率排列因子,尽可能使零因子相邻,然后以扫描宽度编码处理零因子,从而实现进一步压缩。最终,对扫描宽度和非零频率因子进行统一编码。解压缩是压缩的反过程。
CMYK(或CMY)连续色调层被压缩为一个平面颜色JPEG字节流。如果出于表共享或色度二次取样的目的需要进行亮度/色度分离,那么CMYK将被转化为YCrCb和Cr,而Cb被适当地二次取样。JPEG字节流是完整的、自包容的。它包含解压缩所需的全部数据,包括量化和霍夫曼表。
JPEG解码器负责对连续色调数据层进行实时解压缩。向JPEG解码器输入的数据最多可以是4个平面的连续色调数据。输入数据通常可以是3个平面,代表CMY连续色调图像,也可以是4个平面,代表CMYK连续色调图像。虽然一般情况下所有彩色平面的分辨率是相同的,但是每个彩色平面的分辨率也可以不同。连续色调层从外部DRAM读取。JPEG解码器的输出是解压缩的连续色调数据,这些连续色调数据在独立的彩色平面中。解压缩后的连续色调图像被送到半色调器/合成器单元(HCU)29,进行打印管道的下一个阶段的处理。4个平面连续色调缓冲器用于在JPEG解码器和HCU29之间传送连续色调数据。
解压缩后的连续色调数据的每个彩色平面被输出到一套双行缓冲器(见下文的说明)中,每个行缓冲器的容量为3840B,因此可以存储12英寸宽的320ppi分辨率的单个彩色平面的像素。行缓冲的目的,当HCU从一个行缓冲器中读数据时,JPEG解码器可以向另一个行缓冲器写数据。这种能力是非常重要的,因为单个连续色调行通常低于1600dpi,所以必须在点和行方向上同时扩展。如果缓冲低于一个整行,那么JPEG解码器就必须对同一行多次解码——每次用于输出一个600dpi点行。虽然JPEG支持多种分辨率,但是必须在分辨率和可用带宽之间进行权衡。当分辨率和颜色数增加时,带宽要求也随之增加。另外,PEC芯片的目的段的数量也会影响带宽和分辨率。注意,由于连续色调图像被以平面格式处理,所以每个彩色平面可以采用不同的分辨率存储(例如,CMY平面的分辨率可以高于K平面的分辨率)。所支持的最高连续色调分辨率是1600dpi(与打印机的全点分辨率匹配)。但是,输出行缓冲器的容量只能储存12英寸320ppi的连续色调像素。如果需要以更高连续色调分辨率输出完整的12英寸宽度,那么需要使用多个PEC,但是需要注意的是,打印机上的最终输出仍是双水平数据。如果支持320ppi的4种颜色,对于1页/秒的打印速度(页宽可以是12英寸或8.5英寸),解压缩后的输出带宽应为40MB/秒;对于最高的打印机速度性能(30000行/秒),12英寸和8.5英寸页宽所要求的解压缩输出带宽分别为88MB/秒和64MB/秒。
JPEG解码器通过DRAM接口直接从主内存接收数据。压缩量决定了与外DRAM进行数据传输的带宽要求。当压缩水平提高时,带宽会相应降低,但是最终的输出图像的质量也同时降低。单个彩色平面的DRAM带宽可以通过压缩带宽×压缩比的方式快速得出。例如,为了实现1页/秒的打印速度,压缩比为10∶1的320ppi的单个彩色平面所要求与DRAM通信的带宽为1MB/秒。
JPEG的功能由一个JPEG核心实现。有多种JPEG核心可用:只要它具有足够的处理能力来执行所需的计算和控制功能。例如,BTGX-March核心的解压缩速度最高可达140MB/秒,对于最高的打印机速度(1600dpi,30000行/秒),它可以对4个400ppi的连续色调彩色平面同时解压缩;对于1页/秒的打印机速度,它可以对4个800ppi的连续色调彩色平面同时解压缩。需要注意的是,上述JPEG核心只需要支持解压缩功能,因此,降低了对通用型JPEG压缩/解压缩核心的要求。由于解压缩数据被输出到行缓冲器中,所以JPEG解码器可以一次快速解压一个彩色平面的一整行,消除了在上下文中的行处理中的切换工作,同时简化了JPEG解码器的控制。此时,必须维护4个上下文(每个彩色平面使用一个上下文),每个上下文包含外部DRAM的当前地址以及适当的JPEG解码参数。
图4中显示的半色调器/合成器单元(HCU)29把半色调和连续色调(通常是CMYK)层合并为一个双水平层,并把Spot1双水平层复合到适当的半色调连续色调层上。如果打印机中没有K墨水,那么HCU29可以把K适当地映射为CMY点。它还根据抖动显示阵选择图中的相应数值逐点选择抖动显示阵。HCU29的输入是(从JPEG解码器单元)通过缓冲器37输入的一个扩展的连续色调调层,通过缓冲器38输入的一个扩展的双水平Spot 1层,通过缓冲器39输入的一个扩展的抖动显示阵选择位图(通常与连续色调层的分辨率一样),以及通过缓冲器40输入的全点分辨率的标记数据。HCU29最多可以使用从外部DRAM34读取的两个抖动显示阵。由HCU29向行装载器/格式器单元(LLFU)41的输出是一套打印机分辨率双水平图像行,最多可以达到6个彩色平面。连续色调层一般是CMYK或CMY,而双水平Spot1层是K。
图5中更详细地描述了HCU单元。在启动后,HCU不断运行,直到检测到一个页面结束条件或通过其控制寄存器被明确停止。HCU的第一个任务是把从缓冲器平面(例如42)中接收并存储到各个比例单元(例如比例单元43)中的数据在水平和垂直方向上同时缩放为打印机的分辨率。
比例单元提供了在水平和垂直方向上把连续色调数据或双水平数据缩放为打印机分辨率的一种方法。缩放是通过把上述两个方向上的数据值复制为该值的整数倍而实现的。缩放数据的处理过程是本领域的技术人员所熟知的。
页边单元57向比例单元43提供两个控制位:前进点和前进行。前进点位允许状态机为同一个点数据生成多个实例(用于页边和为打印头中的重叠段创建点数据)。前进行位允许状态机控制特定点行的结束时间,从而根据打印机的页边;截断数据。它还使比例单元不必执行特殊的行结束逻辑。比例单元的输入数据是一个整行缓冲器。该行被重复使用比例因子次,以便通过行复制实现垂直方向的缩放,在每一行中,每个值被重复使用比例因子次,以便通过像素复制实现水平方向的缩放。当输入行被重复使用比例因子次时(前进行位已经被设置为比例因子次),地址的输入缓存选择位被切换(双缓冲)。缩放单元的逻辑对于8位和1位的情况都是相同的,因为比例单元只产生地址。
由于每个连续色调层可以使用不同的分辨率,所以每个连续色调层被单独缩放。缓冲器45中的双水平Spot1层和缓冲器46中的抖动显示阵选择层也需要缩放。由于缓冲器47中的双水平标记数据是以正确的分辨率建立的,所以不需要缩放。缩放后的抖动显示阵选择位被抖动显示阵存取单元48用于从两个抖动显示阵中选择一个8位值。该8位值被输出到4个比较器中44,和49-51,在这些比较器中,它们与特定的8位连续色调值相比较。实际抖动显示阵的产生与打印头的结构有关,而产生抖动显示阵的过程是一种习知技术。如果连续色调值大于或等于上述8位抖动矩阵值,那么就输出1,否则输出0。在52-56中,这些位与从页边单元57而来的inPage位(指示特定点是否在页面的可打印区域内)进行“与(AND)”操作。HCU中的最后一个步骤是合成步骤。对于6个输出层中的每一层,都有一个单点合并单元(例如单元58),每个单点合并单元使用6个输入值。每个点合并单元的输出位是上述输入位的合并值。这样,点颜色就能够被放入到任何输出彩色平面中(包括用于测试的红外彩色平面),黑色被合并到青色中、洋红色和红色(CMY)中(如果打印头中没有黑色墨水),而标记点数据被放入到一个可见平面中。定色剂颜色层也可以立即生成。点再生单元(DRU)59负责把为特定颜色层产生的点流组织到32位数值中,这样,输出内容被按段排列,而在每一段中,输出内容被按点排列。由于叠加段的点不是以段顺序生成的,所以还需要进行稍许调整。
页边单元57向比例单元43提供两个控制位:前进点和前进行。前进点位允许状态机为同一个点数据生成多个实例(用于页边和为打印头中的重叠段创建点数据)。前进行位允许状态机控制特定点行的结束时间,从而根据打印机的页边;截断数据。它还使比例单元不必执行特殊的行结束逻辑。
比较器单元带有一个简单的8位“大于或等于”比较器。该比较器用于确定8位连续色调值是否大于或等于8位抖动显示阵值。因此,比较器单元使用两个8位输入,并产生一个1位长度的输出。
图6更详细地描述了点合并单元。点合并单元提供了一种把双水平抖动数据、Spot 1颜色以及标记数据与实际打印头的输出墨水映射的方法。每个点合并单元使用6个1位输入,产生一个1位长度的输出,该输出值代表彩色平面的输出点。在60处的输出位是输入位的合并值。这样,点颜色可以被放入到任何输出彩色平面中(包括用于测试的红外彩色平面),黑色被合并到青色中、洋红色和红色(CMY)中(如果打印头中没有黑色墨水),而标记点数据被放入到一个可见平面中。定色剂颜色层可以通过简单地合并所有输入位生成。点合并器包含一个6位ColorMask寄存器61,该寄存器中的值作为6个输出位的掩码。每个输出位与相应的ColorMask寄存器位进行“与(AND)”操作,然后,把所得到的6位进行“或(OR)”操作,形成最终的输出位。
图7描述了点再生单元(DRU),该单元负责为特定彩色平面把生成的位流组织到为32位数值中,这样,输出内容被按段排列,而在每一段中,输出内容被按点排列。由于叠加段的点不是以段顺序生成的,所以还需要进行稍许调整。DRU带有一个32位移位寄存器,一个普通的32位寄存器、以及一个普通的16位寄存器。一个5位计数器跟踪所处理的位数。抖动显示阵存取单元(DMAU)发出的点前进信号被用于指令DRU输出具体位值。
图7中的寄存器(A)62每个周期移位一次。它包含32个由点合成器单元(DMU)最近产生的点。每过32个周期,寄存器(A)62中的全部32位值被复制到寄存器(B)63中,复制动作由DRU状态机64通过一个简单的5位计数器产生的WriteEnable信号触发。在WriteEnable脉冲的同时,寄存器(B)63中的16位奇位(1,3,5,7等)被复制到寄存器(C)65中。然后,一个32位多路器根据状态机中的2位在下列3个输出中作出选择:
·寄存器B中的全部32位
·由寄存器A中的16个偶数位(0,2,4,6等)和寄存器B中的16个偶数位构成的一个32位值。寄存器A的16个偶数位构成该32位值的0-15位,而寄存器B中的16个偶数位构成该32位值的16-31位。
由寄存器B中的16个奇数位(1,3,5,7等)和寄存器C中的16位构成的一个32位数值。寄存器C中的位构成该32位值的0-15位,而寄存器B中的16个奇数位构成该32位值的16-31位。
DRU的状态机如表1所示。状态机的起始状态为0,每隔32个周期改变状态。在一个32周期过程中,一个noOverlap位为该32周期累计所有dot advance位的“与(AND)”值(周期0的noOverlap=dot advance,周期1-31的noOverlap=noOverlap AND dot advance)。表1.DRU的状态机
状态 |
NoOverlap |
输出 |
输出有效 |
注释 |
下一个状态 |
0 |
X |
B |
0 |
起始状态 |
1 |
1 |
1 |
B |
1 |
正常的non-overlap |
1 |
1 |
0 |
B |
1 |
A包含第一个overlap |
2 |
2 |
X |
偶数 A,偶数B |
1 |
A包含第二个overlapB包含第一个overlap |
3 |
3 |
X |
C,奇数B |
1 |
C包含第一个overlapB包含第二个overlap |
1 |
图5中的页边单元(MU)57负责根据当前页的页边距把从抖动显示阵存取单元(DMAU)获得的前进点和前进行信号转化为一般控制信号。它还负责生成end of page条件。MU的计数器保存着当前页的点和行的数值。在一页开始时,这两个值都为0。每次当MU从DMAU接收一个dot advance信号时,点计数器加1。当MU从DMAU接收到line advance信号时,行计数器加1,而点计数器被置0。在每个周期内,把当前行和点值与页边值进行比较,然后根据这些页边值输出dot advance、lineadvance,和within margin信号。DMAU只包含HCU的实际存储要求。
图8所示为行装载器/格式器单元(LLFU)。LLFU从HCU接收点信息,为特定的打印行把点装载到适当的缓冲器中(某些在芯片中,某些在外部DRAM34中),并把这些点数据格式化为打印头所需的顺序。图9为一个LLFU的外部接口的高级模块图。向LLFU的输入67是一套32位字和一个DataValid位,这些数据都由HCU产生。输出68是一套90位的值,代表6种颜色的15个打印头段的最大值。并不是所有输出位都有效,这与打印头中实际使用的颜色数有关。
本文中所述的打印头的喷嘴部分由两排喷嘴构成,也就是说,同一种颜色的奇数和偶数点在不同的行上打印,偶数点用于行L,而奇数点用于行L-2。另外,在一个颜色的点与另一种颜色的点之间有若干行。因为HCU同时计算相同点位置的6个彩色平面,所以必须为每个彩色平面延迟点数据,直到同一个点定位到相应的彩色喷嘴上。
每个缓冲行的大小取决于打印头的宽度。由于每个PEC为多达15个打印头段产生点数据,所以单个奇数缓冲行或偶数缓冲行由15套640点组成,总数据量为9600位(1200B)。例如,color 6奇数点所需的缓冲器为45KB。
所有必要的缓冲器最好内建在PEC芯片中。否则,colors 2以上的缓冲器应存储在外部DRAM芯片中。这样,即使将来彩色平面之间的距离发生变化,PEC仍然可用。在PEC上保存color 1的偶数点意义不大,因为所有内容都是相对于该特定点行(不需要额外的行缓冲器)打印的。另外,缓存color 1奇数点所需的2个半行可节省实际的DRAM带宽。在打印页面前,各种行缓冲器(片上缓冲器和DRAM缓冲器)都需要预置0,使打印页面有一个空边。页面的结尾由HCU自动产生,所以页面将有一个空边。
图10是Color N OESplit(见图9的Oesplit 70)的模块图,图9中的每个缓冲器E和F,71和72的模块图可以在图10和图11中找到。缓冲器EF是一种双缓存机制,用于向图3中显示的打印头接口(PHI)32传输数据。因此,缓冲器E和F具有相同的结构。在点行的处理过程中,当上述缓冲器E和F中一个用于写数据时,另一个用于读数据。这两个缓冲器在接收到从PHI发来的行同步信号时进行逻辑交换。缓冲器E和F都由6个子缓冲器构成,一个子缓冲器对应一个颜色,如图11所示。Color 1的子缓冲器编号为73。每个子缓冲器的容量是2400B,足以储存15个1280点/段的段。由于内存是以32位方式读写的,所以每个子缓冲器有600个地址(需要10个地址位)。在每个颜色的子缓冲器中,所有偶数点都被放在奇数点的前面。如果有未用的空间(用于少于15个段的打印),那么未用空间应位于每个颜色的子缓冲器的末端。每个子缓冲器实际使用的存储量与PEC实际编址的端数量直接相关。对于一个15段打印头,由1200B个偶数点,后跟1200B个奇数点,没有未用空间。所使用的子缓冲器的数量与打印头所用的颜色数直接相关。所支持的最多颜色数为6。
每个缓冲器E和F的寻址编码电路可以保证在一个特定周期中对所有6个子缓冲器进行一次32位访问——可以从所有6个缓冲器读取数据,也可以向其中的某个缓冲器写入数据。从每个颜色缓冲器中读取的32位中,只有一位被选择用来构成6个输出位的输出。这个过程在图11中示出。地址的15位中,10位地址用于选择32位数据,5位地址用于从所选的32位数据中选择1位,从而获得要读取的1位数据。每个子缓冲器73-78都有自己的WriteEnable行,因此,一个32位值可以在给定周期内写入特定的颜色缓冲器。这些WriteEnable行是通过上述WriteEnable输入与颜色选择的解码形式的“与(AND)”操作实现的。行79的DataIn的32位是共享的,因为实际上只有一个缓冲器接受数据。
用于从缓冲器E和F中读取数据的地址是直接生成的。每个周期产生一个用于为特定段取上述6位数值(1位/颜色)的位地址。通过向当前位地址上加640,可以转到下一个段中的对应点。加640而不是1280是因为,在缓冲器中奇数和偶数点是分离的。对上述动作重复NumSegments次,可以取回代表偶数点的数据,然后把这些位传送给PHI。当NumSegments=15时,位数为90(15×6位)。然后,为奇数点重复上述过程。因此,完整的偶数/奇数位生成过程需要重复动作640次,每次需对起始地址加1。采取这种方法,所有点数据都在640×2×NumSegments个周期中被以打印头所需要的顺序传递到PHI中。当NumSegments=15时,要经历19200个周期。需要注意的是,不管在打印头中实际使用的颜色数是多少,在给定读取周期中,都会产生6位数值(每位用于1个颜色缓冲器)。
另外,我们为写入到图9中的90位Transfer寄存器90产生TWriteEnable控制信号。由于LLFU在PHI之前开始,我们必须从PHI传送Advance脉冲前的第一个值。我们还必须为第一个Advance脉冲产生下一个值。方法是在NumSegments周期后把第一个值传送给Transfer寄存器,然后停止NumSegments个周期,等待Advance脉冲启动下一个NumSegments周期组。当第一个Advance脉冲到达时,LLFU将与PHI同步。
单个点行的读取过程在下面的伪代码中说明:
DoneFirst=FALSE
WantToXfer=FALSE
ForDotInSegment0=0 to 1279
If(DotInSegment0:bit0=0)
CurrAdr=DotInSegment0(high bits)(puts in range 0 to 639)
<!-- SIPO <DP n="28"> -->
<dp n="d28"/>
EndIf
XfersRemaining=NumSegments
Do
WantToXfer=(XfersRemaining=0)
TWriteEnable=(WantToXfer AND NOT DoneFirst)OR
PHI:ADVANCE
DoneFirst=DoneFirst OR TWriteEnable
Stall=WantToXfer AND(NOT TWriteEnable)
SWriteEnable=NOT(Stall)
If(SWriteEnable)
Shift Register=Fetch 6 bits from
EFSense[ReadBuffer]:CurrAdr
CurrAdr=CurrAdr+640
XfersRemaining=XfersRemaining-1
EndIf
Until(TWriteEnable)
EndFor
Wait until BufferEF Write process has finished
EFSense=NOT(EFSense)
当读进程从E或F向PHI传送数据时,一个写进程正在准备另一个缓冲器中的下一个点行。
被写入E或F的数据是由HCU产生的color 1数据以及从缓冲器D(由DRAM提供数据)提供的color 2-6数据。每当HCU的OutputValid被置为真时,Color 1数据就被写入EF中;在其它时间,color 2-6数据被从寄存器C中写入EF。
图9中的缓冲器OE1 81是一个32位寄存器,它用于存储某个HCU为color 1产生的连续32个点的集合。虽然点在页面上是连续的,但是奇数和偶数点不是同时打印的。
缓冲器AB82采用一种双缓存机制,它为color 1把奇数点数据延迟2个点行。因此,缓冲器A和B的结构是相同的。在点行的处理过程中,一个点行被从缓冲器中读取,其中一个点行被读取,然后被写入。当整个点行处理完成后,这两个缓冲器互换逻辑。一个1位标志ABSense确定从哪个缓冲器中读取以及向哪个缓冲器写入。
每当输出有效控制标志被设置为真时(在第一个标志发送后,每隔32个周期设置一次),HCU提供color 1的32位数据。这32位数据为一个点行定义了一个连续的32点集,其中有16个偶数点(位0、2、4等),16个奇数点(位1、3、5等)。输出有效控制器标志作为OE1寄存器81的WriteEnable控制标记。我们每隔2个OutputValid信号处理一次HCU数据。HCU color 1的16个偶数位被与寄存器OE1的16个偶数位合并,产生32位的偶数color 1数据。同样,HCU的16个奇数位被与寄存器OE1的16个奇数位合并,产生32位的奇数color 1数据。在收到第一个OutputValid信号时,我们读取缓冲器AB的数据,把奇数数据传送给缓冲器EF中的color 1,如图11中的73。在收到第二个OutputValid信号时,我们把奇数数据的32位写入上述缓冲器AB中,然后把偶数数据的32位写到缓冲器EF的color 1中。
每当OutputValid被设置为真时,HCU就为每个彩色平面提供32位数据。这种动作每隔32个周期出现一次(不包括在特定启动时间内)。这32位数据为一个点行定义了一个连续的32点,其中包含16个偶数点(位0、2、4等)和16个奇数点(位1、3、5等)。
缓冲器OE1(图10中的83)用于为color 1存储一个32位值,但是缓冲器OE2到OE6分别用于为color 2到color 6存储一个32位值。正如color 1的点每隔64个周期(每隔两个OutputValid标志)被分为代表color 1的奇数点的32位数据和代表color 1的偶数点的32位数据一样,其它彩色平面的点也被划分为偶数和奇数点。
但是,点数据被延迟若干行,然后被通过缓冲器CD(图9中的84)输出到DRAM中,而不是直接写入缓冲器EF中。当特定行的点被写入DRAM时,前一行的点被从DRAM中读出,并被写入缓冲器EF71,72。这个过程必须与把color 1写入缓冲器EF的过程交错进行。
每次从HCU收到一个OutputValid标志时(如图10中的85行),颜色N的32位数据就被写入缓冲器OEN83。每次收到第二个OutputValid标志时,合并后的64位数据就被写入颜色缓冲器N86。对于彩色平面2-6,这个过程是并行进行的。颜色缓存区N 86含有40套64位数据(320B),以便为两个完整的段存储点数据。这样,前一个段的数据(包括奇数和偶数点)在一个整段生成时间(20×64=1280周期)内被输出到DRAM中。写入操作的地址是直接生成的。行87的ColorNWriteEnable信号每隔两个OutputValid标志产生一次。地址从0开始,每隔两个OutputValid标记增加1,直到39。当地址到达39时,它将被重置为0,而不是步进到40,这样可以实现双缓冲方案。只要在OutputValid标记出现之间不发生读操作,上述工作就一直进行,并且前一个段的数据可以在产生单个段的数据的时间内被写入到DRAM中。下面的伪代码说明了上述过程:
adr=0
firstEncountered=0
While(NOT AdvanceLine)
If(HCU_OutputValid)AND(firstEncountered))
ColorNWriteEnable=TRUE
ColorNAdr=adr
If(adr=39)
adr=0
Else
adr=adr+1
EndIf
Else
ColorNWriteEnable=FALSE
EndIf
If(HCU_OutputValid)
firstEncountered=NOT(firstEncountered)
<!-- SIPO <DP n="32"> -->
<dp n="d32"/>
EndIf
EndWhile
读操作的地址生成过程比较复杂一些,因为它与DRAM读写(包括读和写)、缓冲器EF的读写、以及color 1的生成时间有关。读操作的地址生成过程在下面进一步说明。
缓冲器C、D、E、F和color N的地址生成都与DRAM读写的时间有关,并且不能影响与缓冲器E和F有关的color 1的处理。地址生成的基本原理是,把color N(奇数点或偶数点)的一个段的数据从DRAM中通过缓冲器CD传送给缓冲器EF,当从DRAM中读出数据时,根据ColorBufferN中的值替换上述点,同样,对奇数和偶数点中的每种颜色执行相同的过程。当累积了一个完整段的所有点数据后(需要20个64周期),重新开始上述过程。当把给定行的所有段的数据在寄存器与DRAMA之间传输完成后,把该颜色的DRAM的当前地址步进1次,直到把该颜色的点行的特定数据从DRAM中读回。在本处理方法中,DRAM与一种FIFO非常相似。最终的结果是,colorN(偶数或奇数点)被从DRAM中读入缓冲器D,同时color N(前述偶数或奇数点)被复制到缓冲器C中。向缓冲器C复制数据需要20或21个周期,具体周期数取决于OutputValid标志是否在20次传输过程中出现。当上述两个操作都完成后(通常,DRAM存取是一种较慢的工作),过程的第二部分开始。也就是说,把缓冲器C中的数据写入到DRAM中(写到上述读操作的同一个地点),并且把缓冲器D中的数据复制到缓冲器EF中(同样,由于正在传输color 1的数据,所以当OutputValid标志出现时,不会传输color N的数据)。当上述两个操作完成后,为color N(奇数或偶数点)执行相同的过程,然后为每个剩余的颜色也执行相同的过程。上述的完整双过程被重复执行10次。然后,为下一行的处理更新DRAM中存储的每个当前行的地址。
在带宽方面,为点数据缓存区存取DRAM会占用从PEC访问DRAM的大部分带宽。对于每一个打印行,需要为color2-6读取整个点行,并且为color2-6写入整个点行。因此,15个段(最多)的数据量为2×5×15×1280位=192000位(24000B)/打印行。对于最快速的打印系统(30000行/秒),带宽必须为687MB/秒。对于1页/秒的打印系统,所要求的带宽为312MB/秒。由于所要求的带宽太高,所以必须针对所用的存储器类型优化DRAM中每种颜色的各种半行的地址。例如,在一个RDRAM存储器系统中,为了最大限度地增加DRAM存取的打印页面点数,必须为每种颜色把第一个半行缓冲区调整为1KB范围。当处理各种段时,如果下一段的起始位置在1KB页面中的960B处,那么640位存取会跨越2个页面。为此,可以使用DRAMMax Val变量检查这种情况。如果这种情况发生,那么就需要把下一个半行缓冲区的地址调整为与页面对齐。这样虽然每13段会浪费64B存储空间,但是640位存取将完全发生在一个页面中。
上述的地址生成过程可以视为NumSegments需要10个(20×32位读操作+20×32位写操作)。下面的伪代码可以说明这种地址生成过程:
EFStartAdr=0
Do NumSegments times:
<!-- SIPO <DP n="34"> -->
<dp n="d34"/>
For CurrColor=0 to MaxHalfColors
DRAMStartAddress=ColorCurrAdr[CurrColor]
While reading 640 bits from DRAMStartAddress into D(>=20
cycles)
ColorNAdr=0
While(ColorNAdr!=20)
If(NOT HCU_Output Valid)
Transfer ColorNBuffer[ColorNAdr|CurrColor_bit0] to
C[ColorNAdr]
ColorNAdr=ColorNAdr+1
EndIf
EndWhile
EndWhile-wait until read has finished
While writing 640 bits from C into DRAMStartAddress(>=20
cycles)
ColorNAdr=0
EFAdr=EFStartAdr
While(ColorNAdr!=20)
If(NOT HCU_OutputValid)
Transfer D[ColorNAdr]to EF[CurrColor|EFAdr]
<!-- SIPO <DP n="35"> -->
<dp n="d35"/>
If((ColorNAdrNAdr=19)AND(CurrColor=
NumHalfColors))
EFStartAdr=EFAdr+1
Else
EFAdr=EFAdr+1
EndIf
ColorNAdr=ColorNAdr+1
EndIf
EndWhile
EndWhile-wait until write has finished
If(DRAMStartAddress=DRAMMaxVal)
ColorCurrAdr[currColor]=round up DRAMStartAddress to
next 1KByte page
Else
ColorCurrAdr[currColor]=DRAMStartAddress+640bits
EndIf
If(Segment=maxSegments)
If(ColorCurrRow[CurrColor]=ColorMaxRow[CurrColor])
ColorCurrRow[currColor]=ColorStartRow[currColor]
ColorCurrAdr[currColor]=ColorStartAdrcurrColor]
<!-- SIPO <DP n="36"> -->
<dp n="d36"/>
Else
ColorStartRow[currColor]=ColorCurrRow[currColor]+1
EndIf
EndIf
EndFor
EndDo
Wait until next Advance signal from PHI
需要注意的是,MaxHalfColors寄存器应小于需要对奇数颜色和偶数颜色单独处理的颜色(但不包括color 1)数。例如,对于一个标准的6颜色打印系统,需要处理的总颜色数(包括奇数颜色和偶数颜色)为10(colors2-6的奇数和偶数色),所以应该把MaxHalfColors设置为9。
LLFU需要2个NumSegments周期来为PHI准备数据的第一个180位。因此,必须在已经LLFU启动2个NumSegments周期的时间后才能启动打印头和开始第一个LineSync脉冲。这样Transfer的初始值才有效,也才能向Transfer寄存器中装入下90位数据。
打印头接口(PHI)是处理器向打印头装载要打印点的途径,它控制着实际的点打印过程。它从LLFU接收数据,并把数据输出给打印头。必须能处理各种打印头宽度和格式。PHI的内部结构应支持6种打印颜色、每次传输8个段、以及2个段组。这样才能满足能够以全页宽打印A4/信封幅面的15段(8.5英寸)打印机的要求。
上述描述内容的主要目的是阐述本发明的优选实施例,但该描述和所述实例不应限制本发明的范围。本领域的技术人员可以很容易地根据本发明的具体实施例进行多种变化。任何根据本发明的具体实施例进行的修改都在本发明的保护范畴内。