双网传真机的编译码电路设计与实现
扫描二维码
随时随地手机看文章
摘要:对双网数字传真机硬件系统中的编码和译码电路进行设计,并采用FPGA芯片进行系统实现和验证。其中的编译码电路分别采用两级编码和快速译码的思路,利用硬件描述语言设计和仿真,简化了逻辑电路的实现。验证测试表明,该电路增强了系统的稳定性和可靠性,提高了编译码效率,缩短了开发周期。
关键词:编译码电路;FPGA;码表;双网传真机
0 引言
传真通信规程是将要扫描的电平信号值进行A/D转换,再经过图像二值化处理,表示成连续交替黑白点的数据序列(I/O序列),再对该数据序列进行编码后,调制发送;接收端对收到的编码数据信号解调后进行译码,最后由热敏头打印输出。
在传真通信中,对传真图像数据进行编码和译码是传真通信的关键技术。改进的Huffman码(MHC)是ITU—T.4向各国推荐的一维标准码,主要应用于三类传真机上。MHC码是一种常用的变长码,其信源的消息与码字之间的关系是一对一的,是信息保持型的压缩方法。双网传真系统完成与Internet和PSTN网络的传真通信,采用嵌入式系统的设计思路划分软硬件。其中,传真协议采用软件实现,传真编译码和外围设备控制器采用硬件实现,以降低设计复杂度,提高传真效率。
1 传真机硬件系统模型
硬件电路模块应包括:CIS扫描电路模块(A/D转换)、编码电路模块(图像二值化处理)、译码电路模块、打印电路模块、步进电机驱动电路模块及时钟电路模块。并以NiosⅡ软核处理器、CIS扫描器件、步进电机、TPH打印器件为硬件平台,通过FPGA实现硬件电路模块。上层软件通过读写寄存器来控制外围设备和编译码电路,完成编码数据的读取和译码数据的写入。图1给出了硬件系统功能模块划分逻辑图。
其中,时钟电路用来产生扫描、打印及步进电机所需的时序信号;由时钟电路产生的CIS时钟周期为2.6μs,打印时钟周期为4.96μs,步进电机时钟周期为10 ms。数据地址读写总线接口与NiosⅡ处理器直接交互各种控制命令及读写数据,产生外围设备的工作使能信号,通过地址选通信号,完成各个模块与NiosⅡ处理器之间数据的交互。
2 外围设备控制单元
外围设备的控制主要是通过对CIS扫描器件、TPH打印器件和步进电机发出相应的控制时序信号完成扫描、打印和步进电机的驱动等功能。该部分采用硬件实现可以产生超过定时中断周期的更小周期的时序信号和时序要求精确的驱动信号,同时可以通过配置控制寄存器,对扫描和打印的功能进行选择,上层软件通过状态寄存器来判断电路的工作状态。表1和表2给出了寄存器的详细描述。
2.1 CIS扫描及A/D转换
设计采用的CIS器件具有最高1.7 MHz的扫描时钟,且有效扫描宽度为216 mm(A4纸的宽度),每行有1728个扫描点。FPGA片内的数字逻辑产生驱动信号CIS_si和CIS_clk,并将模拟信号接入A/D转换器的模拟输入端口,由FPGA片内数字逻辑实时对A/D转换器的输出进行采集。图2给出了CIS接口时序。其中,CIS_si为行启动信号,每行有1728个扫描点,每隔10ms启动一次CIS_si。由于扫描最快能达到1.8ms/line,而打印最快只能达到10 ms/line,所以扫描完成后且预留出步进电机工作的时间,这样就能满足该系统的要求。CIS_clk为2.6μs的扫描时钟,占空比为0.254。ADC_clk为AD采样时钟,周期与CIS_clk相同,占空比为0.046。
A/D转换的原理是通过CIS扫描器件把原稿的光信号转化为电信号,将CIS扫描器件获得的模拟电信号通过A/D转换器件转化为8 b的数字信号在ADC_clk的下降沿送入扫描数据缓冲区。[!--empirenews.page--]
2.2 步进电机控制
在传真机硬件系统中,步进电机的主要作用是根据当前工作状态,驱动扫描或打印夹纸的滚轴。步进电机的时钟周期为10 ms,满足系统要求。扫描时步进电机反转,打印时正转。通过控制寄存器,可以实现标准和精细两种扫描模式。
2.3 打印器件
设计所用的热敏打印器件系统采用SHECHA216-UH,其接口时序如图3所示(data表示数据在锁存信号有效后输出)。其中,heater_clk为打印头时钟,1 MHz,50 %占空比;heater_latch_n为打印头锁存信号,低电平有效,每隔10ms锁存一次;heater_trobe[3:0]为打印头加热段选信号,在10 ms内,这四个信号依次低有效一次。
3 编码电路单元设计
对一个二值传真信源来说,一副传真图像是由扫描线上的像素组成的,而每一扫描线又总是由一些连续的黑像素和白像素组成,连续发生的黑像素为连‘1’,白像素为连‘0’,也称之为黑游程和白游程。连‘1’的个数称为黑游程长度,连‘0’的个数称为自游程长度。黑白游程总是交替出现的。游程长度就等于一条扫描线上的像素总数,A4幅面一般为1 728。本项目使用的图像二值化方法是固定阈值法,即将A/D转化后的8 b数据和阈值做比较,得到‘0’或‘1’(白点或黑点)。当总线地址为01H时,读取32位编码寄存器。
无失真的信源编码方式中,使用最多的是变长码,其中最优的编码是Huffman码,改进的Huffman码(MHC)是三类传真机信源编码的标准。MHC所做的主要改进是将码字分为终止码和形成码,能够用较短的编码来表示较长的连续黑点或自点。0~63的游程长度用终止码表示,64整数倍的游程长度由形成码表示,任意游程长度大于63的码字表示为“形成码+终止码”。例如,当白游程长度为131 b(128+3)时,编码表示为‘100101000’,即,白游程长度128 b的形成码‘10010’加上白游程长度为3 b的终止码‘1000’。行同步码EOL的格式为‘0000000000 01’。WRLC为白游程长度编码,BRLC为黑游程长度编码。每一行的第一个游程长度编码为白码字,黑白游程长度码字连续交替。收到连续的六个EOL后表示该页结束。根据T.4的表述,一页编码后的传真数据格式如表3所示。
在构建码表时,构建四个不同的码表单元,即黑、白游程形成码码元单元和黑、白游程终止码码元单元。同时需要存储黑白游程编码码元的长度信息。终止码码表的地址是按游程长度编写的,即0~63,而形成码的码表地址共有27个。这样存储可以通过黑白计数值直接找到地址,码表所存储的信息为17位,表4给出了MHC码表的输出说明。
例如,编码得到的码元信息是‘0111’,这是白游程2所代表的码元,则码元的有效长度为‘0100’(4位),码元信息为‘011100000000 0’(13位)。在码元黑白属性发生改变时,如果当前游程的计数长度小于64,则取计数长度的低6位为地址,查找对应码表(终止码表)中的17位数据;如果游程长度大于或等于64,则取计数长度的高5位为地址,查找对应码表(形成码表)中的17位数据。NiosⅡ处理器进行数据交换,采用32位寄存器接口。每次查找完MHC码表后,采用二级编码电路对一级编码电路得到的信息再进行一次编码,将17位编码数据转换成32位编码数据。图4给出了编码状态转移图。[!--empirenews.page--]
4 译码电路单元设计
对于MHC码而言,首先它是一个变长码,发送端在编码时把游程长度所对应的码元数据不留间隙的存入发送缓冲区中,经过调制载波后发送出去。接收端解调出来的数据,即编码数据,译码时从该数据序列中分离出码字,由码字去找出所对应的游程长度,输出到打印缓冲区,就完成了译码过程。要提高译码速度,可以采用多步合一的方法,减少查找码表的次数,也就是一次输入多个码元。根据码表的特点,对白译码而言,第一次可直接输入4个码元,对于黑译码,第一次可输入2个码元,随后每次可输入2个码元或1个码元。
译码时,通过Avalon总线接口将编码数据写入一个32×256 b的缓冲区;译码完成后,将数据送到打印缓冲区,由信号控制模块控制打印缓冲区的复位、读时钟、读请求和打印头时钟信号,打印缓冲区的大小为1×2 048 b。当写入个数记到1 728时,就会进行读操作。如果出现误码,写入个数超过1 728时,FIFO清零,此时不进行读操作,而是将误码的那行数据丢弃,并加入一行白点(1 728个‘0’)。传真译码电路如图5所示。
在译码电路中,检测到EOL后,将对译码缓冲区的数据交替地进行白译码、黑译码、白译码操作。其中译码码表的地址和数据宽度均为8 b。译码时,接收4 b数据(白码元),通过形成的8 b地址来查找码表并返回一个8 b数据Ram_Data,并根据此数据低2位的值来进行下一步操作。当Ram_Data低2位为‘01’时,输出数据高6位的值,此时终止码使能有效;当Ram_Data低2位为‘11’时,输出数据高6位的值,此时形成码使能有效;当Ram_Data低2位为‘00’时,表示接收1 b数据和Ram_Data相加形成新地址;当Ram_Data低2位为‘10’时,表示接收2 b数据和Ram_Data相加形成新地址;继续查找码表,重复操作,直到译出码元或出错为止。查找黑白码表不同的是:对于白译码而言,由于最短码字长度为4,所以第一次可直接查找4 b码元,随之可查找2 b或1 b码元;而对于黑译码而言,由于最短的码字长度为2,所以第一次查找2 b码元,随之可查找2 b或1 b码元;输出的6 b数据为连续黑点或连续白点的个数。将译码后的数据存入1×2 048 b的打印缓冲区,当存储数据满一行时,输出到打印头打印,待清空后再进行下一行的译码。扫描到打印一行的时间要求是10 ms,所以译码完成后进行等待,直到数据锁存后再进行下一行的译码。译码状态转移图如图6所示。
5 仿真验证与系统测试
采用基于码表遍历的验证策略,对电路进行仿真验证,并查看输出波形图,结果均与设计要求一致。仿真部分波形图如图7所示。
其中,fifo_data为编码数据;dot_cont为译出的总点数;white_black_flag为黑白标志位,‘1’表示黑,‘0’表示白。
该电路通过QuartusⅡ环境下的SOPC配置CPU核,在Altera公司的FPGA开发板上进行下载,并在NiosⅡ开发环境中使用软件测试该电路,通过寄存器驱动电路工作,经过扫描,CPU核向电路写入编码数据,待输出标识位有效后,再读出译码后数据,通过传真机打印出来。综合结果表明电路可以工作在100 MHz时钟频率下。
将传真标准样张编码数据送给译码模块完成对译码电路的测试,打印出的图像满足测试标准。然后将标准样张原稿经过扫描编码,送给译码打印,输出打印结果与原稿比对。通过反复调试,软硬件运行稳定,达到系统功能指标。
6 结语
本文采用两级编码和快速译码的设计思路,在FPGA芯片上实现了编译码电路和外设控制器。上层软件通过寄存器接口完成对硬件系统的控制,经过仿真验证与测试,电路对传真数据正确编译码,与软件系统相配合为高性能的双网传真机提供了可靠的技术基础。