一种基于FPGA/CPLD的多通道数据缓存实现方法与流程

文档序号:11965463阅读:158来源:国知局
一种基于FPGA/CPLD的多通道数据缓存实现方法与流程
本发明属于电子设计自动化领域,涉及一种多通道数据缓存实现方法,具体涉及一种基于FPGA/CPLD的多通道数据缓存实现方法。

背景技术:
在计算机广泛应用的今天,数据采集的重要性是十分显著的,它是计算机与外部物理世界连接的桥梁,广泛应用于工业领域、汽车行业、交通运输、航空航天、电力能源及土木工程等领域。数据缓存是数据采集过程中的重要环节,尤其是高速采集领域,数据缓存技术直接限制了采样频率的上限,影响了采样质量。在高速数据缓存方面,现场可编程门阵列(FPGA)拥有普通单片机和数字信号处理器(DSP)无法比拟的优势,FPGA打破了顺序执行的模式,在每个时钟周期内完成更多的处理任务,超越了DSP的运算能力,FPGA的时钟频率高、内部时延小,全部控制逻辑都可由硬件完成,而且速度快,组成形式灵活,并可以集成外围控制、译码和接口电路。而且利用EDA工具进行设计、综合和验证,可加速设计过程,降低开发风险,缩短了开发周期,但现有的数据缓存的过程中,多通道数据存储时,各通道数据流的控制逻辑比较复杂,极易出现数据丢包现象,而且常常会出现存储空间的浪费。

技术实现要素:
本发明的目的在于克服上述现有技术的缺点,提供了一种基于FPGA/CPLD的多通道数据缓存实现方法,该方法充分利用RAM存储空间,并且利用数字电路本身特性,通过合理设计计数器,大大简化了控制逻辑时序的编程,数据存储可靠性大大提高。为达到上述目的,本发明所述的基于FPGA/CPLD的多通道数据缓存实现方法包括以下步骤:1)判断RAM中每个存储单元的字节数RN的大小,当RAM中每个存储单元的字节数RN大于1时,则将RAM中的每个存储单元平均划分为RN个单元,当RAM中每个存储单元的字节数RN等于1时,则不进行处理;2)在RAM中为每个通道划分出独立的缓存区,再根据每个通道数据的字节数BN及采样频率确定各缓存区的字节数CS,其中,CS≥BN,然后对通道进行编码,其中,通道的编码按缓存区从低字节到高字节的方向以及从低地址到高地址的方向逐个增加,设通道的个数为CN,则有CN*CS≤RN*2^AN,其中,AN为RAM地址的位数;3)单片机通过0x8010操作端口将初始目标地址的低8位写入CPLD/FPGA地址缓存器的ADDR_BUF[7..0]中,并通过0x8011操作端口将将初始目标地址的高8位写入CPLD/FPGA地址缓存器的ADDR_BUF[15..8]中,再将CPLD/FPGA地址缓存器中ADDR_BUF内的初始目标地址通过0x8012操作端口写入RAM地址寄存器的DMAwrAddr及MCUrdAddr中;4)单片机通过0x8020操作端口启动采样脉冲,锁存各通道当前的通道数据,并启动DMA,然后启动计数器DMAcnt,计数器DMAcnt由高位AddrH及低位AddrL拼接而成;5)在DMAcnt信号的驱动下,计数器DMAcnt中低位AddrL记一次数对应相邻RN个通道的缓存区地址加1,再以计数器DMAcnt作为多通道选择器的控制位,将通过多通道选择器的控制位选出的对应通道数据放置到数据线上,然后在写信息号的操作下,将通道数据写入到对应通道的缓存区内,当计数器DMAcnt中的低位AddrL计数溢出时,则表示相邻RN个通道数据成功存入对应通道的缓存区内,当计数器DMAcnt的低位AddrL计数溢出时,则会自动向计数器DMAcnt的高位AddrH加1,此时当计数器DMAcnt的高位AddrH的数据地址为高位,则将地址自动指向下一个相邻RN个通道,同时计数器DMAcnt的低位AddrL重新计数,并开始下一个相邻RN个通道数据的写入,从而将所有通道数据存入对应缓存区中;6)当所有通道数据存入到对应缓存区后,计数器DMAcnt的高位AddrH产生溢出,并产生脉冲信号,表示CN个通道一次采样数据存入完成,然后给RAM地址寄存器中DMAwrAddr的地址中间部分AddrM加1,避免新采样数据覆盖上次采样数据,当RAM地址寄存器中DMAwrAddr的地址中间部分AddrM溢出后,给各通道地址重新赋予初始地址,进而实现循环数据缓存。步骤3)中将CPLD/FPGA地址缓存器中ADDR_BUF内的初始目标地址通过0x8012操作端口写入RAM地址寄存器的DMAwrAddr及MCUrdAddr的具体操作为:当0x8012端口写入数据的第0位为1,即bit0=1时,将CPLD/FPGA地址缓存器中ADDR_BUF内的初始目标地址写入到RAM地址寄存器的MCUrdAddr中,当0x8012端口写入数据的第3位为1,即bit3=1时,CPLD/FPGA地址缓存器中ADDR_BUF内的初始目标地址写入到RAM地址寄存器的DMAwrAddr中。RAM地址寄存器的DMAwrAddr由地址高位AddrH、地址中间部分AddrM及地址低位AddrL三部分拼接而成,其中,地址高位AddrH的位数等于log2(CN/RN),地址中间部分AddrM的位数等于log2(CS)减去地址低位AddrL的位数,地址低位AddrL的位数等于log2(BN)。本发明具有以下有益效果:本发明所述的基于FPGA/CPLD的多通道数据缓存实现方法实现多通道数据缓存的过程中,单片机的读地址及DMA写地址各自独立操作,在DMAcnt信号驱动下,RAM读地址和写地址分时占用数据线,读操作和写操作互不干扰;本发明中通过分析通道地址与通道数据间的对应关系,巧妙的设计了计数器DMAcnt,十分方便的将通道地址与通道数据在逻辑时序上对应起来,大大简化了编程难度,适用于多通道的数据存储。附图说明图1为本发明中实施例一的设计原理图;图2为本发明中实施例一中RAM的原理图;图3为本发明中实施例一中写入初始目标地址过程中的波形图;图4为本发明中实施例一中计数器DMAcnt计数时从0到2的过程中的仿真波形图;图5为本发明中实施例一中计数器DMAcnt计数时从3到5的过程中的仿真波形图;图6为本发明中实施例一中计数器DMAcnt计数时从6到7的过程中的仿真波形图;图7为本发明中实施例一中计数器DMAcnt计数时从8到10的过程中的仿真波形图;图8为本发明中实施例一中计数器DMAcnt计数时从11到13的过程中的仿真波形图;图9为本发明中实施例一中计数器DMAcnt计数时从14到15的过程中的仿真波形图。具体实施方式下面结合附图对本发明做进一步详细描述:本发明所述的基于FPGA/CPLD的多通道数据缓存实现方法包括以下步骤:1)判断RAM中每个存储单元的字节数RN的大小,当RAM中每个存储单元的字节数RN大于1时,则将RAM中的每个存储单元平均划分为RN个单元,当RAM中每个存储单元的字节数RN等于1时,则不进行处理;2)在RAM中为每个通道划分出独立的缓存区,再根据每个通道数据的字节数BN及采样频率确定各缓存区的字节数CS,其中,CS≥BN,然后对通道进行编码,其中,通道的编码按缓存区从低字节到高字节的方向以及从低地址到高地址的方向逐个增加,设通道的个数为CN,则有CN*CS≤RN*2^AN,其中,AN为RAM地址的位数;3)单片机通过0x8010操作端口将初始目标地址的低8位写入CPLD/FPGA地址缓存器的ADDR_BUF[7..0]中,并通过0x8011操作端口将将初始目标地址的高8位写入CPLD/FPGA地址缓存器的ADDR_BUF[15..8]中,再将CPLD/FPGA地址缓存器中ADDR_BUF内的初始目标地址通过0x8012操作端口写入RAM地址寄存器的DMAwrAddr及MCUrdAddr中;4)单片机通过0x8020操作端口启动采样脉冲,锁存各通道当前的通道数据,并启动DMA,然后启动计数器DMAcnt,计数器DMAcnt由高位AddrH及低位AddrL拼接而成;5)在DMAcnt信号的驱动下,计数器DMAcnt中低位AddrL记一次数对应相邻RN个通道的缓存区地址加1,再以计数器DMAcnt作为多通道选择器的控制位,将通过多通道选择器的控制位选出的对应通道数据放置到数据线上,然后在写信息号的操作下,将通道数据写入到对应通道的缓存区内,当计数器DMAcnt中的低位AddrL计数溢出时,则表示相邻RN个通道数据成功存入对应通道的缓存区内,当计数器DMAcnt的低位AddrL计数溢出时,则会自动向计数器DMAcnt的高位AddrH加1,此时当计数器DMAcnt的高位AddrH的数据地址为高位,则将地址自动指向下一个相邻RN个通道,同时计数器DMAcnt的低位AddrL重新计数,并开始下一个相邻RN个通道数据的写入,从而将所有通道数据存入对应缓存区中;6)当所有通道数据存入到对应缓存区后,计数器DMAcnt的高位AddrH产生溢出,并产生脉冲信号,表示CN个通道一次采样数据存入完成,然后给RAM地址寄存器中DMAwrAddr的地址中间部分AddrM加1,避免新采样数据覆盖上次采样数据,当RAM地址寄存器中DMAwrAddr的地址中间部分AddrM溢出后,给各通道地址重新赋予初始地址,进而实现循环数据缓存。步骤3)中将CPLD/FPGA地址缓存器中ADDR_BUF内的初始目标地址通过0x8012操作端口写入RAM地址寄存器的DMAwrAddr及MCUrdAddr的具体操作为:当0x8012端口写入数据的第0位为1,即bit0=1时,将CPLD/FPGA地址缓存器中ADDR_BUF内的初始目标地址写入到RAM地址寄存器的MCUrdAddr中,当0x8012端口写入数据的第3位为1,即bit3=1时,CPLD/FPGA地址缓存器中ADDR_BUF内的初始目标地址写入到RAM地址寄存器的DMAwrAddr中。RAM地址寄存器的DMAwrAddr由地址高位AddrH、地址中间部分AddrM及地址低位AddrL三部分拼接而成,其中,地址高位AddrH的位数等于log2(CN/RN),地址中间部分AddrM的位数等于log2(CS)减去地址低位AddrL的位数,地址低位AddrL的位数等于log2(BN)。实施例一参考图1、图2、图3、图4、图5、图6、图7、图8及图9,RAM为512x16bit,即AN等于19,RN等于2,通道数CN等8,每通道采集数据为32位,即BN等于4,RAM中每个通道划分区域大小CS为64K字节,具体实现包括以下步骤:1)划分RAM,RAM中的每个存储单元为2个字节,故将RAM每个存储单元划分为2个单字节单元;2)在RAM中为每个通道划分出独立的缓存区,每块缓存区的字节数划分成64Kbits,其中,缓存区占用RAM一半空间,故将RAM最高位地址在FPGA里面设为0,即A18等于0;3)单片机将初始目标地址的低8位写入CPLD/FPGA地址缓存器的ADDR_BUF[7..0],操作端口为0x8010,操作数为0x00,并将初始目标地址的高8位写入CPLD/FPGA地址缓存器的ADDR_BUF[15..8],操作端口为0x8011,操作数为0x00,将CPLD/FPGA地址缓存器ADDR_BUF中地址写入RAM地址寄存器DMAwrAddr及MCUrdAddr,操作端口为0x8012,操作数据为0x09(bit3=1、bit0=1),ADDR_BUF的内容同时写入单片机地址操作寄存器MCUrdAddr及DMA地址寄存器DMAwrAddr,其中,DMA地址寄存器DMAwrAddr共18位,最高位定位0,RAM地址寄存器的DMAwrAddr由地址高位AddrH、地址中间部分AddrM及地址低位AddrL三部分拼接而成,地址高位AddrH的位数等于2,地址中间部分AddrM的位数等于14,地址低位AddrL的位数等于2;4)单片机启动采样脉冲,操作端口为0x8020,锁存各通道当前数据并启动DMA,随后启动计数器DMAcnt,计数器DMAcnt由低位AddrH和高位AddrL两部分拼接而成,位数为4;5)在DMAcnt信号驱动下,计数器DMAcnt的低位AddrL计数对应相邻2个通道的缓存区地址的按字节逐个增加,计数器DMAcnt为0x00时,地址对应0x00000,DMAcnt为0x03时,地址对应0x00003,此时以计数器DMAcnt作为多通道选择器的控制位选出对应通道编码,并将选出的通道编码放在数据线上,计数器DMAcnt为0x00时,对应数据为0x1212,DMAcnt为0x03时,对应数据为0x7878,在写信号作用下,数据被写入对应通道的缓存区,即通道0和通道1的0x00000被写入0x12,通道0和通道1的0x00003被写入0x78;6)当DMAcnt低位AddrL计数溢出后,表示相邻2个通道数据成功存入对应通道的缓存区,计数器DMAcnt高位AddrL计数溢出会自动向MAcnt高位AddrH加1,如之前地址为0x00000,现在则变为0x10000,即实现了地址自动指向下一个2个相邻通道,此时计数器DMAcnt的低位AddrL继续开始计数,可实现新2个相邻通道数据写入,如此可以将所有通道数据存入对应缓存区;7)所有通道数据存入对应缓存区后,计数器DMAcnt的高位AddrH会产生溢出,产生一个脉冲信号intY[0],表示8个通道数据全部存入完成,此时将RAM地址寄存器中DMAwrAddr的地址中间部分AddrM加1,即第二次采集缓存地址从0x00004开始,以免新采样数据覆盖上次采样数据;8)RAM地址寄存器中DMAwrAddr的地址中间部分AddrM溢出后,各通道地址重新赋予初始地址,如此循环可实现数据持续存储。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1