打标时,需要主处理器ARM 将大量的打标数据发送给FPGA,为了减少ARM向FPGA发送数据操作的时间,采用DMA方式进行数据传输。设计中ARM通过地址自加的 DMA传输方式向FPGA中写入数据,由于只对2位地址ADDR译码而高位地址不参加译码,因此地址自增只产生4个使能信号,实际上就是循环向3个FIFO缓冲区写入数据。
设计中FIFO存储模块使用宏功能模块实现,生成的FIFO模块。3个FIFO模块的容量都是16 bits×1024 words。输出信号almost_full在数据总数达到514时变为高电平,输出信号 almost_empty在数据总数低于512时变为高电平。
振镜位置数据转换模块就是要完成将振镜位置数据串行输出给数模转换器AD1866,因此需要按照AD1866的时序来编写串行输出子模块DA_SERIAL的程序。AD18666的工作时序图。CLK是串行时钟信号,DL、DR是两路数模转换的数据输入信号,LL、LR是两路数模转换的锁存使能和启动转换命令输入信号。AD1866在时钟信号CLK的上升沿读取数据,因此FPGA在时钟信号CLK的下降沿将数据输出到数据总线上,以保证数据稳定后再读取数据。
AD1866读取数据后,内部的移位寄存器从低位向高位进行移位,因此要将数据从最高位MSB到最低位LSB依次串行输出。在最低位数据输出之后的第一个时钟的下降沿,需要LL、LR也输出一个下降沿作为数据锁存使能和启动数模转换的信号。