关于多路同步串口的FPGA传输实现
扫描二维码
随时随地手机看文章
随着集成电路技术的发展,FPGA和DSP以及ARM以其体积小、速度快、功耗低、设计灵活、利于系统集成、扩展升级等优点,被广泛地应用于高速数字信号传输及数据处理,以DSP+FPGA+ARM的架构组成满足实时性要求的高速数字处理系统已成为一种趋势,本文主要研究FPGA在高速多路数据传输中的应用。
系统结构
在DSP多路串行数据同时向ARM发送的系统中,因为数据通道有并行要求,应用FPGA硬件并行的特点,由FPGA并行接收多路数据,经过缓冲后再发送至ARM进行数据的高级处理的方案,系统结构图如图1所示。
图1 系统结构图
FPGA处理模块实现
DSP的串口传输方式为同步串口,每组DSP串口有4个端口,分别为:clk , frame. , data_a,data_b[3]。数据端口有两个,本例中只使能data_a,以下统一称为data。
DSP同步串口传输时序如图2所示,当frame为1时,串行数据有效,当frame为0时,一帧数据传输结束。本例中DSP传输的一帧数据为32bit。
图2 DSP同步串口传输时序图
FPGA内部采用异步FIFO解决DSP时钟频率和FPGA时钟频率不匹配的问题,写时钟由DSP输出的同步时钟信号提供,时钟频率为60MHz;读时钟由FPGA的锁相环PLL时钟提供,PLL输出时钟频率为100MHz。
接收模块
由于DSP的8个同步串口同时写入,FPGA数据接收模块一共有8个,每个模块接收到的数据都存放在一个特定的FIFO中,将其称之为R_FIFO。
DSP输出信号为frame,clk, data,FPGA以DSP同步串口的输出时钟clk作为采集数据的时钟。系统上电结束后,FPGA等待ARM发送接收允许指令,接收允许后,FPGA就可以开始接收数据。
当frame信号为高,FPGA即开始接收从DSP发送的串行数据,在每个dsp_clk的上升沿读取一个bit的数据,之后将数据转入移位寄存器中。FPGA引入一个模块,时刻监测frame的下降沿,当frame下降时,即表示一个字的数据发送完毕,移位寄存器的数据放入R_FIFO的数据输入口,将R_FIFO的写使能置高,向R_FIFO发出写入请求,写入此时的数据至R_FIFO中,依次循环。当R_FIFO中的数据个数不为0时,即向FPGA的发送模块发送请求。
发送模块
接收模块接收到DSP同步串口数据后,即通过reg与answer信号与FPGA数据发送模块之间进行数据传输,如图3所示。
图3 FPGA接收及发送模块
当接收模块有请求时,发送模块即将接收模块采集到的数据写入发送模块的缓存FIFO中,将其称之为S_FIFO。每轮从R_FIFO中传输的8个数据均依次存入S_FIFO中。
因为DSP的8个同步串口均同时工作,可以认为当有一个输入模块的数据接收完毕时, 8个端口的数据均应该接收完毕,保险起见,可以延时若干时钟周期后开始接收数据。从端口0至端口7为一轮,若此时有端口没有数据,即可认为此端口暂无数据输出,用数据0替代,发送模块继续接收下一个端口的数据。用状态机来实现此功能,如图4所示。
图4 S_FIFO写操作的状态机图
来源:马雅历0次