(1)最前一级是三个数据锁存子模块DA_REG,分别用来锁存X、Y轴振镜位置数据和停留时间数据。由于ARM向FPGA 发送数据的操作没有实现ARM和FPGA的时钟同步,ARM发送数据和FPGA实现FIFO存储数据使用的都是各自的时钟,因此可能会出现数据还没有存入FIFO 就消失了,或者重复存入数据的现象。为此,通过增加DA_REG子模块来实现数据的锁存并产生将数据存入FIFO的写使能有效信号,当ARM向FPGA发送X轴、Y轴位置数据或者位置停留时间数据时,DA_REG子模块会立即将数据锁存住,并产生相应FIFO的写使能有效信号,当数据存入FIFO后,再将写使能信号wrreq变为无效。需要注意的是FIFO存储数据时钟的周期要小于ARM写信号nWE的有效时间,当ARM 的写信号nWE有效时,使用FIFO的存储数据时钟对nWE进行微分,wrreq输出一个时钟周期的高电平有效信号来存储数据,这样就实现了ARM与FPGA异步地传输并向FIFO中存储数据的功能。
(2)第二级的子模块是3个16 bits× 1024 words的FIFO存储模块,分别用来存储X、Y轴振镜位置数据和停留时间定时数据。FIFO存储数据的写使能信号wrreq由DA_REG子模块产生,读出数据的读使能信号rdreq由启动打标信号和后一级的定时子模块共同产生,当启动打标信号有效,会使rdreq有效,然后3个FIFO输出第一组数据;之后,当定时子模块DA_TIMER的定时时间到会再次使rdreq有效,输出下一组数据,依次下去直到打标数据全部输出完毕。
(3)第三级包括定时子模块 DA_TIMER、启动打标子模块DA_DIFF、控制激光器开关的子模块 DA_ENPWM、半空中断的门限子模块THRESHOLD和一些附加逻辑。其中,DA_ENPWM子模块产生控制激光器开关的信号PWMSWITCH,当启动打标后PWMSWITCH有效(高电平),当FIFO中没有数据了,即打标结束后PWMsWITCH变为无效(低电平);用THRESHOLD子模块来产生半空中断信号DA_mid_int,当FIFO中的数据个数大于等于514时,DA_mid_int为低电平,当FIFO中数据个数小于512时,DA_mid_int为高电平,ARM将DA_mid_int 的上升沿作为最终半空中断信号有效,门限子模块的作用是防止因为存储数据和读取数据过程中在短时间内重复产生半空中断信号。半空中断信号有效,ARM 会再次发送FIFO容量一半的打标数据;空中断信号有效作为通知ARM打标结束的信号。
(4)最后一级包括X、¥轴振镜位置数据锁存子模块 DA_FEEDBACK和将位置数据串行输出的子模块DA_SERIAL。在打标过程中,控制器可以通过读取X、Y轴振镜位置数据锁存子模块中的位置数据来确定X、Y轴振镜所处的位置;DA_SERIAL子模块功能是将X、Y轴振镜的位置数据串行地输出给数模转换器,并产生所需的时钟信号和控制DA转换器启动转换的信号。