高分辨率汉字字形发生器的制作方法

文档序号:89126阅读:695来源:国知局
专利名称:高分辨率汉字字形发生器的制作方法
本发明属于汉字信息处理技术领域

印刷用汉字的分辨率高达25线/毫米以上,字体多、字号多,字模存储量大。若不采用高倍数信息压缩方法,将占磁盘很大的空间;而磁盘访问时间长,严重影响照排机或激光印字机的输出速度。我们在EP0095536A1中提出了一种高分辨率汉字字形信息压缩方案,压缩倍数高,又保证文字不失真。EP0095536A1中还提出了把汉字字形压缩信息转换成汉字点阵的复原操作的基本原理和操作步骤。1979年我们曾用小规模集成电路实现了EP0095536A1所提出的主要原理;1983年又用Am2901A为主的微型机实现了EP0095536A1的原理,在1983年10月发表的文章“高分辨率汉字字形在计算机中的压缩表示及其复原设备”(登载在<1983年中文信息处理国际研讨会论文集(二)>第71页~第84页)中,我们很简要的介绍了这一设备。本发明是上述基础上的进一步改进,这一改进主要表现在下列方面(1)83年的方案采用双微型机,各有自己的主存储器,器件较多;本发明采用单微机,单个主存储器。
(2)83年的方案采用两个小容量的标记点阵存储器,接口电路较多;由于RAM片集成度越来越高,价格越来越便宜,本发明采用容量有所扩大的单个标记点阵存储器,使器件数减少。
(3)把更多的逻辑放在外加电路中以提高操作平行程度。
(4)微处理器蕊片改用16位的Am29116。
(5)原来用PROM实现的一些关键电路改用随机逻辑实现。
(6)改善微处理器与外加电路的配合,使汉字字形复原过程中所有关键性步骤所需的拍节数均减少。
(7)精心选择外加电路,使之比较容易地集成到门阵列中。
改进的结果是复原速度约提高80%,器件数为原来的1/4。
为了实现EP0095536A1中提出的把汉字字形压缩信息复原成汉字点阵的原理,可以依靠微处理器。微处理器有两类一类是MOS型微处理器,例如16位的Intel 8086,80286,M68000等,其指令形式和指令系统是蕊片内做死的;另一类是双极型微处理器。例如2位的Intel 3000,4位的Am2901A,16位的Am29116等,这类微处理器蕊片必须和微程序控制器蕊片(例如Am2910,Am2909)以及微程序存储器(包括微指令寄存器在内)才能组成完整的微型机。这种双极型微型机的微指令形式和内容不是固定的,可以由用戶(即系统设计者)扩充,因而很灵活。这类微处理器称为用戶可编微程序的微处理器。
假如采用MOS型微处理器,并只依靠软件来完成EP0095536A1所述的复原操作,则速度很慢。为了提高复原操作的平行程度,需要在微处理器蕊片以外,增加若干个计数器、状态寄存器和专用的译码电路等;并使这些外加逻辑电路能与微处理器协调地平行工作。但是MOS型微处理器(例如M68000)不易与其外围电路在每一拍上协调;而双极型微处理器的微指令长度、形式、内容都可由设计者确定,非常灵活,特别适合于加快某种特殊操作的速度。因而我们选用双极型微处理器,并精心设计微指令形式,精心选择必要的外加逻辑电路,使这些设备协调工作,高速度地完成EP0095536A1所述的复原步骤。尤其重要的是,我们所选择的这些外加逻辑电路很容易集成在一块或两块大规模集成电路门阵列内,最终使我们设计的高分辨率汉字字形发生器的器件数量很少,体积很小,便于生产和维护。
下面对本
发明内容
作详细的介绍。
1.对汉字字形复原步骤的分析。
EP0095536A1第17页叙述了如下的复原步骤(a)把信息形式非常紧凑的规则笔划表示化成该笔划的一串轮廓折线(向量),并把不规则笔划的几种不同形式的表示化成统一的向量形式;
(b)把每个向量转换成最邻近的阶梯点,并在每个这样的阶梯点上写入两位标记(这两位表示“B标记”,“E标记”,“I标记”,“V标记”四种组合)以组成一个汉字的标记点阵;
(c)把标记点阵转换成最终输出点阵。
步骤(a)的主要任务是从规则笔划和不规则笔划信息中析出该笔划的起始x坐标、起始y坐标以及一串△x、△y增量形式的向量。这类操作主要是逻辑乘、逻辑加、按位加和移位,而Am2901A和Am29116都有灵活的逻辑运算功能,可以方便地完成这一任务。步骤(a)需要一系列快速寄存器用于暂存当前笔划的起始x坐标、起始y坐标,当前向量的起始x坐标、起始y坐标,当前向量的增量△x、增量△y等。这些值所需的字长均不超过16位。16位的Am29116蕊片内则有32个16位长的内部寄存器,可以暂存上述6个值。按照EP0095536A1第17页的叙述,步骤(a)中还要对向量进行变大、变小(变倍);变倍方法可以用访问PROM实现。图1的〔10〕即变倍用PROM,称为AT。为了变倍,还需暂存变倍后的向量起点x坐标、y坐标,变倍后的△x、△y值。需要强调步骤(a)处理的最小单元是折线(向量),而一个汉字平均只有十几笔笔划,其对应的轮廓折线总数一般为100多条。因而步骤(a)所化费的时间并不太多。依靠脉冲周期为150ns-200ns的Am29116的内部操作就可以高速完成步骤(a),而不需要增加专门的逻辑电路与之配合。
步骤(b)的操作可分成两部分(b)①.把向量转换成最邻近的阶梯点。
EP0095536A1的图13列出了这种转换的一个例子,图中有x号的方格即为最邻近的阶梯点;
(b)②.在这些阶梯点上写入两位标记。
可以看出,步骤(b)处理的是与向量最邻近的阶梯点。据统计,对于96×96点阵的汉字,轮廓折线最邻近的阶梯点总数一般为1000~2000点,也即阶梯点的点数是轮廓折线总数的10倍以上。依靠软件或微程序来处理“点”(二进位),是低速度的。同样,靠软件或微程序来形成步骤(b)②所需的两位标记,也是效率很低的;必需增加专门的逻辑电路来加快步骤(b)。
步骤(c)处理的是标记点阵的点(每点由两位二进位表示)。对于96×96点阵,标记点阵的点数为9216,远远大于轮廓折线阶梯点的数量。软件或微程序处理的速度更是不能容忍;必需增加专门的逻辑电路来加快步骤(c)。
下面4,5,6三节将叙述加快步骤(b)和(c)的措施。现在先对图1的某些设备作些解释。图1中的微处理器为Am29116〔1〕,微程序控制器为Am2910〔2〕,微程序存储器为Am27s43A(7片)〔3〕。
2.主存储器SS〔4〕主存储器SS的容量一般为512KB-2MB,通常由动态RAM片构成。其中一部分用于存放本次照排所用的几千个汉字的字形压缩信息,称为字形压缩信息区;另一部分用于缓冲一页版面的交替两行或若干行的点阵信息供激光扫描用,称为扫描缓冲区。图1的微处理器Am29116〔1〕的16位输出可送给主存储器SS的地址寄存器SSA〔5〕的高8位和低16位;而Am29116的两个16位内部寄存器内保留了SSA的付本;这样,靠Am29116的内部运算可以随意改变SSA(24位)内容,使之指向需要访问的SS单元。对SS的读写通过两片Am2950组件构成的SSD寄存器(16位)〔6〕。微指令中有专门段(CC(4位)。经过译码器CCG〔12〕产生下面操作之一Am29116→SSA低16位;
Am29116→SSA高8位;
Am29116→SSD;
对SS,进行读还是写,此操作记为
SWE。
微指令中还有专门位startS,控制对SS的启动。
由于SS由动态RAM片构成,需要定期更新。因而当启动SS后,数据读出的时间不完全确定;在组成SSD的Am2950组件中专门有一位触发器(称为SSEN)指示SS数据是否已读出,该触发器(即SSEN)状态经图1的状态检测选择器CCS〔11〕后,作为Am2910的
CC输入,可被微程序控制器Am2910所检测。SSEN将作为Am2910所检测的多个CC码源之一。这样微程序可以检测SSEN以判断SS的数据是否确已读出。
SS的结构与本发明并无直接关系。
3.标记点阵存储器WS〔7〕。
标记点阵与最终输出点阵之间的关系见EP0095536A1的图15。前者的每个点占两位,因而比后者的存储量大一倍。
标记点阵存储器WS的容量和构成可有下面三种不同的方式供选择(1)没有单独的WS存储体,不增加任何器件,而是用主存储器SS的一小部分作为WS,只存储一个最大号汉字的标记点阵(例如最大号汉字点阵为512×512,则SS中开辟的WS区域为512×512×2位),这种方案的优点是不增加设备,缺点是速度慢步骤(b)需把两位标记写入SS中的WS区;步骤(c)需从SS的WS区读出标记点阵,转换成最终点阵再送入SS的扫描缓冲区。由于容量大的SS一般动态RAM组件构成,读写控制复杂,读写速度慢,因而严重影响步骤(b)(c)的速度。
(2)没有单独的WS存储体,用SS的扫描缓冲区作WS,此时存储的不是一个或两个汉字的标记点阵,而是一页版面上的交替两行或若干行(甚至一页)汉字的标记点阵。这样把WS和SS的扫描缓冲区合为一体。当然,扫描缓冲区现在缓冲的不再是两行或若干行汉字的最终输出点阵,而是标记点阵,因而该区的存储量应扩大一倍。
步骤(b)照旧把两位标记写入WS区(实际上即SS的扫描缓冲区);当然,一行上不同的汉字的标记点阵将占不同的区域,其地址由该汉字在版面上的位置所决定。
步骤(c)所需的时间现在大大减少。本来激光扫描过程中将从SS的扫描缓冲区逐次读出一线最终点阵,提供给照排机或激光打字机;步骤(b)结束时,SS的扫描缓冲区中是标记点阵,而不是最终输出点阵。我们不必要专门执行步骤(c),可以在扫描过程从SS扫描缓冲区中读一线标记点阵时,顺便用专门的外加电路把它转换成最终输出点阵直接供激光扫描,而不必再把最终输出点阵存回SS。此时,步骤(c)并不是一个汉字、一个汉字地执行,而是一线一线地执行(这里的线指激光逐线扫描的扫描线)。也即先转换一行第一个汉字的第一线,再转换该行第二个汉字的第一线,…,当该行最末一个汉字的第一线转换完成,再开始转换该行第一个汉字的第二线,第二个汉字的第二线,…,最末个汉字的第二线…,以此类推。
由于步骤(c)不再成为单独的步骤,而是混在激光扫描过程中顺便进行,因而节省了时间;这一方案的缺点是SS的扫描缓冲区容量需加倍。
(3)用单独的静态RAM片构成一个汉字(或一个汉字的一部分,或交替两个汉字)的标记点阵存储器WS。
例如,若最大字号点阵为1024×1024,则WS可选为1024×1024×2位,即256KP。为节省起见,图1给出的WS〔7〕为32KB,只能存放半个512×512标记点阵,1/8个1024×1024标记点阵。由于超过256×256点阵的大号汉字很少见,我们可以采取分段生成的办法。一次只生成一个大号的汉字的一部分(例如上半部分或下半部分),并存入WS。这样大号汉字的复原速度将降低。由于大号汉字罕见,速度的损失是可以容忍的。
对于图1的32KB的WS,只需8k×8位静态RAM片四片,或者32K×8位静态RAM片一片就可以构成。静态RAM速度快,读写控制简单。
确定WS字长时既要考虑步骤(b),又要考虑步骤(c)。步骤(b)每次只写入两位。字长加长丝毫不增加速度,只会加多设备;但字长加长可减少步骤(b)读WS所需的时间。折衷结果,我们取WS字长为8位,也可取4位或16位。
4.加快复原步骤(b)①的措施。
EP0095536A1的第18页叙述了把一个向量转换成最邻近的阶梯点的步骤,即步骤(b)①对于△x≥△y的向量,x每步都变(加1或减1);y是否变将由下面比较决定向量开始时,置Acc初值为0;
每步中,Acc+△y→Acc,然后Acc与△x/2比较(注意EP0095536A1误写成Acc与△x比较)若Acc≥△x/2,则y变,且Acc-△x→Acc,继续下步;
若Acc<△x/2,则y不变,继续下步;
一直执行到△x步为止。
对于△x<△y的向量,步骤类似。
为了加快步骤(b)①,我们在Am29116蕊片外,增加了下列专门的逻辑电路(即图1中WA〔8〕,它的详细结构见附图2,还要说明一点。图1中的WA〔8〕及WI〔9〕,既可用中、小规模集成电路来实现也可以设计为专用门阵列,详见节8。)(1)x坐标计数器(10位)〔8-1〕,能加1或减1;
(2)y坐标计数器(10位)〔8-2〕,能加1或减1;
(3)长度Len计数器(15位)〔8-3〕,只能加1。
(4)当前向量状态寄存器VECD(3位)〔8-4〕VECD由xs,ys,△x≥这三位触发器构成,意义如下xs当前向量处Ⅰ,Ⅳ象限,则xs=0;
当前向量处Ⅱ,Ⅲ象限,则xs=1。
ys当前向量处Ⅲ,Ⅳ象限,则ys=0;
当前向量处Ⅰ,Ⅱ象限,则ys=1。
△x≥若△x≥△y,则此位为1;否则为0。(注在EP0095536A1中把当前向量称为第二向量)(5)上一向量状态寄存器VECD*(3位)〔8-5〕VECD*由x*s,y*s,△x≥*这三位触发器构成,意义如下x*s上一向量处Ⅰ,Ⅳ象限,则x*s=0;
上一向量处Ⅱ,Ⅲ象限,则x*s=1。
y*s上一向量处Ⅲ,Ⅳ象限,则y*s=0;
上一向量处Ⅰ,Ⅱ象限,则y*s=1。
△x≥*若上一向量的△x≥△y,则此位为1;否则为0。
(注在EP0095536A1中把上一向量称为第一向量)(6)N触发器(1位)〔8-6〕
记录Am29116输出16位的最高位,即符号位。
(7)GS触发器(1位)〔8-7〕记录上拍N触发器的状态。
(8)GS*触发器(1位)〔8-8〕记录GS的上一状态。
(9)x,y,Len的计数和输入控制电路〔8-9〕,〔8-10〕,〔8-11〕。
现在先叙述对一个向量执行步骤(b)之前的准备工作,这些工作均由微程序实现。
①把Am29116蕊片内形成的当前向量三位状态送VECD(假定上一向量的状态已在VECD*中)。为此有专门的操作Am29116输出的最低三位→VECD②把当前向量的变倍后的起点x坐标、起点y坐标分别送x,y计数器,也即置x,y的初值。为此有专门的操作Am29116输出的低10位→x计数器Am29116输出的低10位→y计数器。
③把当前向量的max(△x,△y)的补码送长度Len计数器。为此有专门的操作Am29116→Len计数器。
微指令的字长一般比较长,例如48位~64位,其中有一段称为WAOP,例如4位,可以表示16种操作。上述的Am29116符→NAm29116→VECD
Am29116→xAm29116→yAm29116→Len均属WAOP的操作,由微指令的专门段WAOP(4位)指示。
④步骤(b)所需的其余量将不再设专门的外加电路,而用Am29116(或Am2901A)蕊片内的内部寄存器暂存。例如可以用Am29116蕊片的A寄存器暂存Acc,Am29116蕊片内的R1寄存器暂存max(△x,△y)/2,Am29116蕊片内的R2寄存器暂存min(△x,△y),Am29116蕊片内的R3寄存器暂存min(△x,△y)-max(△x,△y)。这里R1,R2,R3为Am29116蕊片内32个内部寄存器之中的三个。
对一个向量执行步骤(b)之前,应按上述内容置好R1,R2,R3,并置A为min(△x,△y)(因为先置A为0,然后转换的第一步作A+min(△x,△y)→y,这等价于作min(△x,△y)→A)。
下面叙述步骤(b)中微处理器Am29116,微程序控制器Am2910与上述外加逻辑电路如何配合协调,进行平行处理。
步骤(b)每走一步(从当前阶梯点走到下一阶梯点)需要两拍,即执行两条微指令(每拍约为150~200ns)。这两条微指令组成下述循环体
step操作是WAOP(4位)所表示的16种操作之一,其定义如下①VECD→VECD*GS→GS*N→GS②Len+1③按照下表对x,y进行操作(由〔8-9〕,〔8-10〕完成)△x≥ GS 操作0 0 x±1,y±10 1 x不变,y±11 0 x±1,y±11 1 x±1,y不变这里x±1表示x+1或x-1,由xs决定
xs=0,则x+1;
xs=1,则x-1。
同样y±1表示y+1或y-1,由ys决定ys=0,则y+1;
ys=1,则y-1。
可以看出,由微指令的WAOP段所表示的step操作是一个高度平行的操作,一拍内x,y,len,Gs,G*s,VECD均可能改变。
微地址为p+1的那拍内Am29116的操作也是相当复杂的。此时N标志上拍时Acc(在A内)与max(△x,△y)/2(在R1)的比较结果。当A≥R1,N=0;当A<R1,N=1。根据步骤(b)①的规定,N=1时下拍仅作Acc+min(△x,△y)→Acc,N=0时则先作Acc-max(△x,△y)→Acc,下拍再作Acc+min(△x,△y)→Acc,也即比N=1情况要多做一拍,此时循环体内将出现三拍的情况。为了提高速度,保持步骤(b)时循环体内永远为两拍,我们在步骤(b)开始前的准备工作中先算出min(△x,△y)-max(△x,△y),并存入R3。这样得出上表p+1那拍所列出的Am29116操作。剩下的问题是如何由N触发器来控制Am29116内部操作选择寄存器R2还是R3。由于Am29116本身无这种选择功能,必须依靠专门的外加逻辑电路。注意到R2的“2”与R3的“3”仅最低位编码不同,此最低位也即Am29116的I0~15输入的最低位I0。我们在微指令中增加了一个专门位I0C。一般微指令中I0C永远为0,只有上面微地址为p+1的那条微指令I0C=1。微指令中还有16位,称为PLI0~15。其中PLI1~15直接作为Am29116的I1~15输入,但Am29116的I0输入则由下式产生
Am29116的I0=I0C·
N+
IOC
·PLI0。
这一表达式由外加的小规模集成电路实现,称为I0MUX〔14〕。
这样,当I0C=1,N=0时,Am29116的I0=1;
当I0e=1,N=1时,Am29116的I0=0;
当I0C=0时,用常规的PLI0作Am29116的I0。
依靠这一方法,N的值将影响微地址p+1那拍的Am29116内部寄存器的选择。
微地址为p+1的那拍上,Am2910按Len状态执行条件转移,使用的操作即Am2910蕊片内的CJP操作,检测的CC码源即Len的状态(记满或未记满)。Len记满(
END电位为低),表示一个向量已转换完。x、y计数器到达向量终点;Len未记满(
END电位为高)则应继续循环。
由于循环体仅两拍,对一个向量而言,步骤(b)所需的拍节数为max(△x,△y)×2,这里不包括转换前的准备工作。依靠了Am29116、Am2910与外加电路的高度平行工作和协调,才实现了这样的高速度。这种协调体现在①Am29116的运算结果可送入外加电路以影响外加电路下一拍的操作;
②外加电路的某些状态,例如I0C和N,可影响Am29116的内部运算;
③外加电路的某些状态,例如Len是否记满(用
END电位表示),可被Am2910所检测,以改变微程序流程。
5.加快复原步骤(b)②的措施根据EP0095536A1第20页的叙述,准备写入的两位标记是由上一向量所在象限(x*s,y*s),当前向量所在象限(xs,ys),上步y是否变(vy*)和本步y是否变(vy)这六位所决定的。EP0095536A1的第21页~第23页用表详细列出了所有组合时的准备写入的两位标记。下面我们把准备写入的两位标记记作ZX1,ZX0,这里ZX0是低位。
我们把最终两位标记记作XM1,XM0;WS存储器内原有的两位标记记作MC1,MC0。EP0095536A1的第24页用表列出了XM1~0是怎样由MC1~0和ZX1~0决定的。EP0095536A1的第25页建议用256×2PROM来产生XM1,XM0。因为我们希望把绝大部分外加逻辑电路集成到一、两片门阵列内,而目前的集成电路技术一般不允许门阵列内包含PROM或ROM。所以本发明没有采用PROM来产生XM1,XM0,而是用普通随机逻辑。下面详细叙述。
根据上面第4节的叙述,GS*=0,表示上步x、y都变;GS=0,表示本步x、y都变。在向量起点时,VECD*指示上一向量状态,VECD指示当前向量状态。在向量的中间点时,永远有VECD=VECD*,因为做第一步时的step操作将执行VECD→VECD*。这样我们把中间点上ZX1~0的形成看成节点上ZX1~0形成的一种特例,实现时不必区分节点还是中间点。
Vy=1表示y变;Vy=0表示本步y不变。
Vy*=1表示上步y变,V*y=0表示上步y不变。
很容易推出
Vy=
△X≥+
GSVy*=
△X≥*+
GS*令 A0=
Vy*·
VyA1=
Vy*·VyA2=Vy*·
VyA3=Vy*·Vy这里“+”表示逻辑“或”,“·”表示逻辑“与”。
则有ZX1=
xs*·Xs·A0+(
xs*·ys+
xs*·ys*·
xs+
ys*·
xS·ys)·A1+(ys*·
xs+
xs*·ys*·
ys+
xs*·
xs·ys)·A2+(
xs*·ys*+
xS·ys+ys*·
xs+
xs*·ys)·A2ZX0=
xs*·
xs·A0+(
xs*·
yS+
xs*·
ys*·
xS+ys*·
xs·
yS)·A1+(
yS*·
xS+
xs*·
ys*·ys+
xs*·
xs·
ys)·A2+(
xs·
yS+
xs*·
ys*+
ys*·
xS+
xs*·
ys)·A3上面ZX1,ZX0的布尔表达式与EP0095536A1第21~23页的表完全等价。
根据EP0095536A1第24页的表,可以推出
注意两位标记的形式如下00表示V标记,01表示B标记,10表示E标记,11表示I标记。
我们把根据上述表达式产生ZX1,ZX0的电路记作ZXG〔8-12〕。ZXG的输入是VECD*(3位),VECD(3位),GS*(1位),GS(1位);ZXG的输出是ZX1,ZX0。
我们把根据上述表达式产生XM1,XM0的电路记作XMG〔9-9〕。XMG的输入是ZX1,ZX0,MC1,MC0;XMG的输出是XM1,XM0。
ZXG是图1WA〔8〕的一部分,XMG是图1WI〔9〕的一部分。
由ZXG和XMG产生的XM1,XM0应写入WS的有关单元中去。写入的WS地址由y和x计数器联合决定。y计数器为10位,最高位记作y9,最低位记作y0;x计数器的最高位为x9,最低位为x0。
y7y6y5y4y3y2y1y0x8x7x6x5x4x3x2这15位指示WS的单元地址。
WS每单元存四个标记点(即8位),x1x0用来指示一个单元中四个标记点中的哪一个。
y9y8在上述WS地址形成中未起作用,这两位用于控制大号字的分段生成。
在每个最邻近的阶梯点上,对WS的操作是先读后写。先读出8位,由x1x0选择所需的两位(依靠MCMUX〔9-8〕),作为MC1,MC0送XMG;XMG产生XM1,XM0再写入WS的同一单元的同一标记点上。
仔细检查上面第4节所述的步骤(b)对应的循环体的两拍,可以看出,第一拍(即微地址P)的结束时,WS的读出内容已稳定,因而在第一拍的结束时应把WS读出内容按x1,x0选出两位后锁入锁定器MC1,MC0〔9-7〕。第二拍的一开始或略延迟后就可以对WS发“写电位”
WE,同时很快就产生写入数据XM1,XM0;WS的“写电位”
WE将于第二拍结束前结束。
微指令中有专门段WIOP(例如4位),控制门阵列WI的16种操作。其中有一个操作GWE,用于上述用途,其意义如下WIOP段为GWE的那条微指令,在该微指令周期结束时,①把WS读出的8位内容,按x1x0选择两位后锁入锁存器MC1,MC0。②发出WS的“写电位”
WE,此电位应维持近一个微指令周期,以便把产生的XM1,XM0数据写入WS。
上面第4节所述的循环体的第一条微指令(微地址为P)的WIOP段应为GWE。
从上面的叙述可看出,外加逻辑电路本身的操作平行程度是很高的。WA〔8〕与WI〔9〕平行操作,WA和WI内的各个设备又是平行操作。
6.加快复原步骤(c)的措施EP0095536A1的第26页叙述了步骤(c)的算法,并于第27页建议用64×4PROM,在一拍内产生最终点阵的两位。由于PROM或ROM不便集成在门阵列内,本发明建议用普通的随机逻辑实现步骤(c)的操作。为了加快步骤(c),有下列外加逻辑电路,这些电路是图1WI〔9〕中的内容,可详见附图3。
(1)WS读出缓冲寄存器WSD(8位)〔9-1〕从WS读出的8位(即标记点阵的4个点)在WSD中缓冲。
(2)二中选一的选择器WSDMUX〔9-2〕控制选择WSD的高4位,还是低4位进行转换,因为一拍内只转换两个点。WSDMUX的输出记为WB3~0,这正是当前需要转换的4位。转换后的最终点阵的两个点记为FT1,FT0。
(3)层次计数器FL(2位)〔9-3〕,记为FL1,FL0层次计数器的意义和用途在EP0095536A1中已经叙述。
(4)步骤(c)的转换设备FI〔9-4〕FI的输入端有WB3~0,FL1~0;FI的输出端有FT1~0,以及层次计数器新的值,记为NFL1,NFL0。为避免用PROM,我们用下述随机逻辑实现FI。
令 CA=
WB·WB2+WB3·
WB,令 IFL0=FL0
CA,令 IFL1=FL1
(CA·(WB2·FL0+WB3·
FL0)),令 NCA=
WB1·WB0+WB1·
WB0,
NFL0=IFL0
NCANFL1=IFL1
(NCA·(WB0·IFL0+WB1·
IFL0))这一方法很容易推广到一拍内转换4个点,但FI的设备多一倍。
(5)移位寄存器FD(16位)〔9-5〕FI产生的FT1,FT0送入FD的最低两位,同时FD往高移两位。当FD缓冲满16个点时,应送入Am29116,并通过Am29116写入SS存储器的扫描缓冲区。这样FD应允许作为Am29116的数据输入,注意到前面第2节曾提到,SSD也可以作为Am29116的数据输入。因此微指令中有专门段DS(3位),控制最多可选择8个源之一作为Am29116的数据输入。图1的〔13〕即DS三一八译码器。
步骤(c)执行过程中,WS的地址不再由y,x计数器指示,而由15位的Le,计数器指示。为此需要设一个状态触发器F/G。当F/G=0,表示执行步骤(a)(b);当F/G=1,表示执行步骤(c)。在WA中有一个15位的二中选一的选择器〔8-13〕,实现下述选择F/G=0,选y7~0,x8~2作为WS地址;
F/G=1,选len14~0作为WS地址。
(6)WIOP译码器〔9-6〕译出16种操作,例如①GWE(第5节已解释)②FWE,意义如下WIOP段为FWE的微指令在该拍结束时把WS读出的8位打入WSD,并对WS发“写电位”
WE,此时永远写入8位全0;“写电位”
WE维持近一个周期。
③FDSHWSDMUX选WSD的高4位送FI,FI的输出FT1,FT0送FD最低两位,FD往高移两位。
④FDSLWSDMUX选WSD的低4位送FI,FI的输出FT1,FT0送FD最低两位,FD往高移两位。
⑤FWE且FDSH同时执行FWE和FDSH这两个操作。
⑥FWE且FDSL同时执行FWE和FDSL这两个操作。
下面叙述步骤(c)的流程。
由于SS字长为16位,因而一个循环应完成16个点的转换并存入SS的扫描缓冲区。我们允许一个汉字出现在版面的任何位置上,即允许汉字在版面的任意一个光点位置开始,这是为了出版物的美观。这样,一个汉字点阵的第一个点就不一定正好是SS一个单元(16位)的边界,也即汉字点阵的第一个点可能存入SS一个单元中的任一位上。到底从哪一位开始,由软件给出的信息决定。Am29116可根据软件提供的这一信息很快算出当前这一汉字的最终点阵应该存入的SS扫描缓冲区的单元地址,以及从哪一位(例如第i位)开始存放。在一个汉字的复原步骤(c)开始前,应作下述准备工作(1)Am29116把算出的SS起始地址存入内部寄存器R9,R10,这里R9,R10即SSA的副本。
(2)若把SS一个单元16位的最高位称为第15位,最低位称为第0位,根据算出的起始位i(i=0,1,…15),在Am29116内部寄存器R3中形成下述称为“逻辑尺”的量最低的i+1位为1,其余位为0。
(3)Am2910用LDCT指令把微地址Pi(i=0,1,…15)送入Am2910蕊片内的R/C寄存计数器。在微地址Pi(i=0,1,…15)位置上的微指令,我们在后面的Q-Q+20的微程序列表中已给出。这实际上共16条微指令,他们的Am2910操作,外加电路操作全同;只是Am29116操作中的移位数不同;循环移位的移位数随i变化,等于15-i。例如当i=15,意味着16点正好存入SS一个单元,不必移位。若i≠15,意味着Am29116应对暂存在R1内的转换好的16点进行移位,移出的部分暂存在R2内,将于下一个循环中再写入SS,未移出的部分应与上一循环留下的“尾巴”(即R2内容)“逻辑加”后再写回SS。
还需指出,由于汉字点阵可能开始于SS一个单元任一位,因而SS的一个单元中可能高位是一个汉字的最右部分点阵,而低位则是另一个汉字的最左部分点阵。也即一个单元中可能包含分属两个汉字的点阵。因而,当把16位最终点阵写入SS时,应与SS原内容(可能是另一汉字的点阵)“逻辑加”以后再写回SS。
(4)置Am29116内部寄存器R2为0。
一个汉字复原步骤(c)开始时,R2内没有任何“尾巴”,应置0。
(5)根据当前的汉字字号,把x方向的最大点数除以4送入x计数器。
例如,若当前字号为五号,x方向的最大点数为96,则应把24送入计数器。
复原步骤(c)执行过程中,Len不断加1,ECOM将对Len6~0与x6~0作全等比较,当全等时,
END为低,表示一个汉字的一线已转换完。
下面列出步骤(c)转换16个点的微程序流程。
微地址 Am29116 外加电路的操作 Am2910操作操作Q 全0输出 →Len 继续下条Q+1 FWE 继续下条Q+2 FDSH,Len+1 继续下条Q+3 FWE且FDSL 继续下条Q+4 FDSH,Len+1 继续下条Q+5 FWE且FDSL 继续下条Q+6 FDSH,Len+1 继续下条Q+7 FWE且FDSL 继续下条Q+8 FDSH 检测SSENQ+9 FDSL 继续下条Q+10 FD→29116 Len+1 JRP,转向R/C指示DLATCH 的微地址,即Pi
Pi DLATCH循环移 FWE 无条件转Q+1115-i位后送R1Q+11 R10+1→R10并 FDSH,Len+1, 继续下条输出 →SSALQ+12 R9+进位→R9FWE且FDSL, 继续下条并输出 →SSAU,startSQ+13 R3→A FDSH,Len+1 继续下条Q+14 A∧R1→A FWE且FDSL 继续下条Q+15 A∨R2→A且 FDSH,Len+1 检测SSENSSD→29116DLATCHQ+16 A∨DLATCH并 FWE且FDSL, 继续下条
低,转Q+20;否则继续下条Q+18 A∧R1→R1FDSL 继续下条Q+19 A→R2且 Len+1 JRP,转向R/CFD→29116 指示的微地址,DLATCH 即PiQ+20
微指令Q使Len为0,从标记点阵WS的第一单元开始转换。
微指令Q+1把16点的头4点(WS一个单元)读入WSD,并写回全0。
微指令Q+2转换第1,2点送FD,Len+1为读WS下一单元(4点)作准备。
微指令Q+3转换第3,4点送FD,并把WS一个单元读入WSD,并写回全0。
以此类推微指令Q+9结束时,已转换好16点,缓冲在FD中。
微指令Q+10把FD内容送Am29116的DLATCH(锁存器),该拍的Am2910则用JRP指令转向R/C指示的微地址,我们在准备工作(3)中已提到事先已把Pi送入Am2910内的R/C,因而Q+10的结束将转向Pi。
微指令Pi把Am29116DLATCH内容循环移(15-i)位后送R1,注意循环移位并未把原内容移掉;Am2910则无条件转向Q+11。
微指令Q+11,Q+12使R9,R10中的SS地址加1并置入SSA,然后启动SS读。
微指令Q+13,Q+14的结果是R1Λ逻辑尺→A,即把本循环应写入SS的那部分析出留在A中。
微指令Q+15作AVR2→A,即把本循环应写入SS的那部分和上循环留下的尾巴“逻辑加”,同一拍内还把SS原内容读入29116DLATCH。
微指令Q+16把应写入SS的16位与SS原内容(在29116DLATCH中)“逻辑加”后送入SSD,并启动SS写。
微指令Q+17,Q+18,Q+19把本循环的尾巴从R1中析出暂存在R2中,供下一循环用。
微指令Q+17时,Am29116检测
END若
END低,表示一个汉字的一线转换完,转向Q+20,脱出循环,准备转换下一线;若
END高,继续Q+18。
这样Pi和Q+11~Q+19这10条微指令是步骤(c)的循环体,最需要加速。从上面流程可看出Am29116每拍都有操作,丝毫没有空间。假如不增加ECOM电路,让Am29116内部操作来作”一线是否转换完”的判断,将使速度减慢。此时Am29116内将保留Len的副本,每次Len+1时,Am29116内Len的副本也必须加1,将使循环体拍节数增多。
由于一拍转换两个点,转换16点最少要8拍,上面设计尚未达到速度的极限。假如把SSA改成计数器(例如用SN74LS161),则循环体拍节数可减至8,但组件数增加。
若把WS字长加长到16位,FI改成一拍产生4个点,把Am29116所做的某些逻辑运算交给外加电路实现,还能提高速度;但同时必须提高SS的存取速度。
外加电路ECOM对提高步骤(c)的速度起了好作用。由于Len和ECOM最好集成在一个门阵列WA内,为减少WA的输出腿的个数。我们令
这一电路记作ENDG〔8-15〕,图2的〔8-15〕包括ECOM电路。
7.微指令的形式微指令有下面各段①29116I(16位),其中15~1位直接作为Am29116的对应输入;第0位(即最低位)的控制前面第4节已述。
②2910D(12位),直接作为Am2910的D输入。
③2910I(4位),直接作为Am2910的I输入。
④WAOP(4位),作为门阵列WA的四位操作码输入。
⑤WIOP(4位),作为门阵列WI的四位操作码输入。
⑥DS(3位),选择最多8个源之一,作为Am29116的数据输入。

CCEN(1位),直接作为Am2910的
CCEN输入。
⑧29116
OEY(1位),直接接Am29116的
OEY输入。
⑨startS(1位),启动SS。
⑩I0C(1位),用于控制Am29116I0的产生,第4节已述。
(11)CC(4位),用于选择CC码源和用于产生各种信号。
8.门阵列的设计门阵列设计时需要考虑的一个重要因素是引腿数,应尽量减少引腿数。本发明可以把绝大部分外加逻辑电路集成在两块门阵列内。
WA门阵列包括下述设备见附图2(1)x计数器〔8-1〕(2)y计数器〔8-2〕(3)Len计数器〔8-3〕(4)VECD〔8-4〕(5)VECD*〔8-5〕
(6)N触发器〔8-6〕(7)GS触发器〔8-7〕(8)GS*触发器〔8-8〕(9)x、y、Len的计数和输入控制。
分别记为xc〔8-9〕,yc〔8-10〕和LenC〔8-11〕。
(10)ZXG电路〔8-12〕(11)形成15位WS地址(记作WSA)的二中选一选择器〔8-13〕。
(12)WAOP译码器〔8-14〕(13)全等比较器ECOM和产生
END的ENDG电路〔8-15〕。
WA的输入腿有29116Y (16) 即Am29116输出的16位,括号内WAOP (4) 数字表示腿数F/G (1)clock (1)(图上略)WA的输出腿有WSA (15)x1,x0(2) 送给WI门阵列。
zx1,zx0(2) 送给WI门阵列。
N (1)END(1) 此电位送给ccs〔11〕。
WI门阵列包括下述设备见附图3(1)WSD〔9-1〕(2)锁定器MC1,MC0〔9-7〕
(3)MC0,MC1的四中选一选择器MCMUX〔9-8〕(4)二中选一选择器WSDMUX〔9-2〕(5)XMG电路〔9-9〕(6)FI电路〔9-4〕(7)FL〔9-3〕(8)FD〔9-5〕(9)产生WS“写电位”
WE的电路WEG〔9-10〕(10)WIOP译码器〔9-6〕WI的输入腿有x1,x0(2)zx1,zx0(2)WIOP (4)F/G (1)Clock (1) (图上略)DATA (8) 与WS的双向连线,既是输入,又是输出WI的输出腿有29116Y (16) 作为Am29116的数据输入(注意Am29116Y是双向线)WE(1) 发给WS的“写电位”。
本发明的基本思想是依靠微处理器和外加电路的配合显著提高汉字字形的复原速度。结果,步骤(b)的每个阶梯点的形成和写入两位标记只需两拍;步骤(c)转换16个点只需8~11拍。假如微指令周期时间<200ns,可望达到每秒复原300多个五号汉字。专门设计的门阵列使外加电路的器件数大大减少,批量生产后价格可望明显下降。廉价、可靠、高速的高分辨率汉字字形发生器将使精密照排系统、中等文字质量的激光印字系统能在一般印刷厂和电子化的办公室中大量推广。
1.图1为高分辨率汉字字形发生器框图。图2为门阵列WA逻辑框图。图3为门阵列WI逻辑框图。
2.图2和图3中→表示门阵列内部信号。→表示进入或送出门阵列的信号。
3.数据或地址线的位数,表示在该信号名称后面的括号内。例如SSD(16)。
权利要求
1.一种由微处理器、微程序控制器、存储器及中、小规模集成电路等做成的把轮廓折线形式的汉字字形压缩信息复原成分辨率为10-60线/毫米的字形发生设备,其特征在于该设备由下列各部份组成(1)单个主存储器SS[4],用于存放汉字字形和作为扫描缓冲用的信息;(2)单个标记点阵存储器WS[7],用于存放一个汉字的标记点阵;(3)16位的用户可编微程序的微处理器一片[1];(4)单个微程序控制器[2];(5)单个微程序存储器(包括微指令寄存器)[3];(6)下列外加逻辑电路a.坐标计数器X[8-1]、坐标计数器Y[8-2]及其计数和输入控制电路Xc[8-9]、Yc[8-10],用于记录与向量最邻近的那些阶梯点的X、Y坐标及控制运算加、减1或不变;b.Len长度计数器[8-3]及其计数和输入控制电路LenC[8-11]。用于存放当前向量长度max(△x,△y)的补码并进行加1运算;c.状态寄存器和触发器VECD[8-4]、VECD*[8-5]、GS[8-7]、GS*[8-8]、N[8-6],用于存取运算过程中各类向量、符号位、比较结果等的状态和信息;d.用随机逻辑实现的ZXG电路[8-12]及XMG电路[9-9];e.层次计数器FL[9-3]、移位寄存器FD[9-5]、WS的缓冲寄存器WSD[9-1]、锁定器MC1,MC0[9-7]、选择器WSA[8-13]、MCMUX[9-8]、WSDMUX[9-2];f.用随机逻辑实现的FI电路[9-4];g.全等比较器ECOM和ENDG电路[8-15]。
2.根据权利要求
1所述外加逻辑电路中的ZXG电路〔8-12〕和XMG电路〔9-9〕,其特征在于它们是用下述布尔表达式表示的电路实现的ZX1=
X*s·Xs·A0+(
X*s·Ys+
X*s·Y*s·Xs+
Y*s·
XS·Ys)·A1+(Y*s·Xs+X*s·Y*s·
Ys+
X*s·Xs·Ys)·A2+(X*s·Y*s+
XS·Ys+Y*s·Xs+
X*s·Ys)·A2ZX0=X*s·
Xs·A0+(X*s·
YS+X*s·
Y*s·
XS+Y*s·Xs·
YS)·A1+(
YS*·
XS+
X*s·
Y*s·Ys+X*s·
Xs·
Ys)·A2+(Xs·
YS+
X*s·
Y*s+
Y*s·
XS+X*s·
Ys)·A3这里的A0=
VY*·
VYA1=
VY*·VYA2=VY*·V
YA3=VY*·VY其中VY=
△X≥+
GSVY*=
△X*≥
+
GS*
3.根据权利要求
1所述外加逻辑电路中的FI.〔9-4〕,其特征在于它是由下述布尔表达式表示的电路实现的
NFL0=IFL0
NCANFL1=IFL1
(NCA·(WB0·IFL0+WB1·
IFL0))这里的NCA=
WB1·WB0+WB1·
WB0IFL0=FL0
CAIFL1=FL1
(CA·(WB2·FL0+WB3+
FL0))其中CA=
WB3·WB2+WB3·
WB2。
4.根据权利要求
1所述的外加电路,其特征在于可将其中的内容部分或全部集成在门阵列内。
5.根据权利要求
4所述的门阵列,其特征在于可将〔8-1〕、〔8-2〕、〔8-3〕、〔8-4〕、〔8-5〕、〔8-6〕、〔8-7〕、〔8-8〕、〔8-9〕、〔8-10〕、〔8-11〕、〔8-12〕、〔8-13〕、〔8-15〕配上译码器WAOP〔8-14〕集成在一块门阵列WA内;可将〔9-1〕、〔9-2〕、〔9-3〕、〔9-4〕、〔9-5〕、〔9-7〕、〔9-8〕、〔9-9〕配上译码器WIOP〔9-6〕以及WS“写电位”WE的电路WEG〔9-10〕集成在另一块门阵列WI内。
6.一种为实现将汉字字形压缩信息高速地复原成高分辨率汉字字形点阵中微处理器、微程序控制器和外加逻辑电路互相配合的方法,其特征在于(1)把向量转换成最邻近的阶梯点,并写入两位标记的转换步骤中进行如下平行操作a.每处理一个阶梯点只需两拍微指令,在其中的一拍上,微处理器执行Acc-max(△x,△y)/2,并把结果的符号位送触发器N〔8-6〕;在另一拍上,微处理器根据N的状态,执行Acc+min(△x,△y)→Acc 当N=1,或执行Acc+min(△x,△y)+max(△x,△y)→Acc 当N=0,同时外加电路执行Len+1,VECD→VECD*,GS→GS*,N→GS,且根据VECD和GS的状态决定X,Y计数器加1,减1或不变;b.在上述两拍内,同时由外加电路ZXG〔8-12〕及XMG〔9-9〕产生最终两位标记并按X,Y计数器所指示的地址写入标记点阵存储器WS〔7〕;c.同时,微程序控制器检测Len计数器〔8-3〕是否计满并作条件转移。(2)把标记点阵转换成最终点阵的操作中执行如下平行操作a.外加电路执行标记点阵存储器WS〔7〕的读写和缓冲,并由FI电路〔9-4〕一次产生最终点阵的两位或四位;b.微处理器读入外加电路产生的最终点阵,经过必要的移位和逻辑运算,并与主存储器SS〔4〕原来内容进行“逻辑或”后送回SS,微处理器还要计算并置好SSD〔6〕地址;c.微程序控制器则要检测SSEN以确定能否对SS启动,微程序控制器还要检测全等比较器〔8-15〕的电位以判断一个汉字的一线是否已转换完并作条件转移。
专利摘要
高分辨率汉字字形发生器是继EP0095536AI 专利提出的原理的基础上所作出的一个实现该原 理的设备。采用的是用户可编微程序的微处理器 与专用外部逻辑电路相配合的办法。这里专用外 部逻辑电路可以用中、小规模集成电路。但也可 以用专门设计的门阵列来实现。本发明给出了微 处理器与外部电路相配合的具体做法和操作流程。 特别是使用门阵列来实现外部电路。使所需器件 数大大减少,便于生产和维护,有利于降低成本, 提高性能价格比。
文档编号G06K15/10GK85100285SQ85100285
公开日1985年9月10日 申请日期1985年4月1日
发明者王选, 吕之敏, 向阳, 汤玉海 申请人:北京大学, 潍坊电子计算机公司导出引文BiBTeX, EndNote, RefMan
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1