DSP读写基于FPGA的FIFO王忠亮2007-12-282008-1-3修改在FPGA内部嵌入两个FIFO,一个供外部DSP写,另一个供外部DSP读。DSP还可以读两个FIFO的读空、写满状态。DSP往FIFO每写一个数据前,先要确认该被写FIFO是否被写满,如果未被写满,则能往FIFO里面写数据,否则不可以写;DSP从FIFO每读一个数据前,也首先要确认该FIFO是否被读空,如果未被读空,则可以从FIFO里面读取数据,否则不能读取。DSP提供以下信号:片选CS、读使能ARE、写使能AWE、地址Addr(位宽:2bits)、写数据WData(位宽:16bits)和读数据RData(位宽:16bits)。DSP写FIFO时序:AddressWriteData片选CS(低电平有效)地址Addr[1:0]写数据WData[15:0]写使能AWE(低电平有效)读使能ARE(高电平)DSP读FIFO时序:AddressReadData片选CS(低电平有效)地址Addr[1:0]读数据RData[15:0]写使能AWE(高电平)读使能ARE(低电平有效)开始准备数据数据准备好根据以上需求和DSP读写FIFO时序,FPGA设计如下:Addr[1..0]WERen_inRclk_inDATAin[15..0]Wen_inWclk_inCSREDataout[15..0]TO_DSP[15..0]FPGA_DSP_PortLink_BiBusinstFPGA设计模块与DSP互连情况:Addr[1..0]------------------------------------------DSP的地址总线EA[3:2]WE--------------------------------------------------DSP的写使能AWECS---------------------------------------------------DSP的片选信号CExRE---------------------------------------------------DSP的读使能ARETO_DSP[15..0]-----------------------------DSP的数据总线ED[15:0]时序设计:(1)DSP写FPGA中的FIFO流程图:空闲DSP读被写FIFO的状态地址线送地址:“11”被写FIFO是否已被写满?即TO_DSP[1]=1?DSP写给被写FIFO一个16位的数据是否继续写?启动写FIFO工作是否是否DSP写FIFO流程图①DSP先读取被写FIFO的状态,如果被写满,则DSP不能写该FIFO,在第①步循环;如果FIFO的状态字显示没有被写满或已经被读空,则执行第②步;DSP和FPGA连线信号时序:11状态字片选CS地址Addr[1:0]读数据RData[15:0]写使能AWE(高电平)读使能ARE开始准备数据数据准备好DSP在数据准备好时刻读取状态字,如果状态字第二位RData[1]=’1’,表示FIFO被DSP写满,否则未被DSP写满;如果状态字第一位RData[0]=’1’,表示FIFO已被FPGA内部其他模块读空,否则未被读空。②DSP写FIFODSP和FPGA连线信号时序:00WriteData片选CS地址Addr[1:0]写数据WData[15:0]写使能AWE读使能ARE(高电平)然后再回到第①步,依次循环。(2)DSP读FPGA中的FIFO流程图:空闲DSP读被读FIFO的状态地址线送地址:“01”被读FIFO是否已被读空?即TO_DSP[0]=1?DSP从被读FIFO读一个16位的数据是否继续读?启动读FIFO工作是否是否①DSP先读取被读FIFO的状态,如果被读空,则DSP不能读该FIFO,在第①步循环;如果FIFO的读空状态显示没有被读空,则执行第②步;DSP和FPGA连线信号时序:01状态字片选CS地址Addr[1:0]读数据RData[15:0]写使能AWE(高电平)读使能ARE开始准备数据数据准备好DSP在数据准备好时刻读取状态字,如果状态字第一位RData[0]=’1’,表示FIFO被读空,否则未被读空。②DSP读FIFODSP和FPGA连线信号时序:10ReadData片选CS地址Addr[1:0]读数据RData[15:0]写使能AWE读使能ARE开始准备数据数据准备好然后再回到第①步,依次循环。仿真波形:(1)DSP写FPGA中的FIFO①①①①①②②②FPGA内部读使能FPGA内部读时钟说明:第①步:DSP在给FIFO写一个数据前,先读取该FIFO状态,如图最左边的第①步所示,读到的状态字的第二位DATA_ToDSP[1]=0,表示FIFO未被写满,进行第②步;若读到的DATA_ToDSP[1]=1,表示FIFO被写满,不能再往FIFO里写数了,DSP一直读状态字,直到如图的最后一个第①步,此时读到的状态字的第一位DATA_ToDSP[0]=1,表示FIFO被FPGA内部模块读空,然后DSP又可以对该FIFO进行写。总之,DSP可以写FIFO的条件是:FIFO为被读空或未被写满状态,即DATA_ToDSP[0]=1或DATA_ToDSP[1]=0。第②步:DSP给FIFO写数据67,然后再回到第①步,依次循环。(2)DSP读FPGA中的FIFOFPGA内部写使能FPGA内部写时钟①②①①②①②①说明:第①步:DSP从FIFO读一个数据前,先读取该FIFO状态,如图最左边的第①步所示,读到的状态字的第一位DATA_ToDSP[0]=1,表示FIFO被读空,则此时还不能从FIFO里读数,DSP一直读状态字,直到如图的第二个第①步,此时读到的状态字的第一位DATA_ToDSP[0]=0,表示FIFO未被读空,然后DSP就可以读取FIFO,即进行第②步;第②步:DSP从FIFO读数据8,然后再回到第①步,依次循环。总之,DSP可以读FIFO的条件是:FIFO为未被读空状态,即DATA_ToDSP[0]=0。