首页> 中国专利> 一种基于FPGA/CPLD的多通道数据缓存实现方法

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

摘要

本发明公开了一种基于FPGA/CPLD的多通道数据缓存实现方法,包括以下步骤:1)划分RAM;2)在RAM中为每个通道划分出独立的缓存区域,然后对通道进行编码;3)用CPLD/FPGA编写DMA,由单片机(MCU)指定RAM的初始地址,即缓存的初始地址,4)单片机启动采样脉冲,操作端口为0x8020,锁存各通道当前数据并启动DMA,随后启动计数器DMAcnt,计数器DMAcnt由低位AddrH和高位AddrL两部分拼接而成,位数等于log

著录项

  • 公开/公告号CN104021091A

    专利类型发明专利

  • 公开/公告日2014-09-03

    原文格式PDF

  • 申请/专利权人 西安交通大学;

    申请/专利号CN201410225643.6

  • 申请日2014-05-26

  • 分类号G06F12/08;G06F13/12;

  • 代理机构西安通大专利代理有限责任公司;

  • 代理人陆万寿

  • 地址 710049 陕西省西安市咸宁路28号

  • 入库时间 2023-12-17 01:34:31

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-04-26

    授权

    授权

  • 2014-10-08

    实质审查的生效 IPC(主分类):G06F12/08 申请日:20140526

    实质审查的生效

  • 2014-09-03

    公开

    公开

说明书

技术领域

本发明属于电子设计自动化领域,涉及一种多通道数据缓存实现方 法,具体涉及一种基于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溢出后, 各通道地址重新赋予初始地址,如此循环可实现数据持续存储。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号