完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
SRAM控制器
SRAM_CTRL模块是SCC设计的核心,它需解决的关键问题是:如何糅合不同速率的5路数据,并确保在不与MCU读操作产生冲突的情况下写入SRAM。 首先简要介绍一下ZBT-SRAM。它具有同步接口,数据、地址和控制信号严格按照时钟同步操作。ZBT是零总线延时的含义,它与一般的总线接口不同,写操作的数据要在地址和控制信号的下一个时钟周期给出,这样,当读写操作交替产生时,就不会出现无效的时钟周期,从而提高了读写速度。对于FPGA设计来说,这种接口的优点不仅在于速度的提高,而且大大简化了传统异步I/O接口的逻辑复杂度,尤其在本文需要复杂读写操作的SRAM扩展设计中,更是提供了很大的方便。 |
|
相关推荐
5个回答
|
|
在设计读写SRAM时序之前,应对各通道数据在SRAM中的存储格式进行定义。读写数据必须按同一格式进行,才能确保MCU正确解释获得的数据。格式定义需要注意两个问题。①数据拼接。因为ADC的数据宽度一般与SRAM的数据宽度不等,如本例12位的通道,每行有6位空间浪费。一个可行的办法是,在单个通道内把先后采样到的数据拼接起来,如可以用2行18位的SRAM空间存储3个12位的ADC数据,MCU读取后再进行分拆。这种做法稍微增加了SRAM_CTRL的设计难度,同时也需牺牲MCU的解码时间,应根据实际资源进行权衡取舍。本例为简明起见,约定每行只存一个ADC数据,低位对齐,高位补零。②数据分区。同时存储不相关的多路数据,设计时应根据实际通道数和每个通道的数据量,将SRAM分区,SRAM_CTRL内部应定义一些寄存器,用以记录各分区的首尾地址。为拓展适用范围,应允许上位机设置这些地址寄存器。本例为简明起见,约定把SRAM分为5个相等空间的数据区。
|
|
|
|
本文糅合多路数据的方法主要是基于时分复用的思路。本例中,考虑最坏的情况,总共有6个设备可能并发访问SRAM,其中5个是AD_CTRLx的写操作,速率分别为:CH0~CH2为1MHz,CH3为10MHz,CH4为20MHz;还有一个设备是MCU的读操作,最高为40MHz。把这6个设备的速率相加为73MHz,可选择SRAM的时钟为80MHz。基于时分复用的思路,让SRAM_CTRL在80MHz的频率下采用轮询的方式访问6个设备的读写标记。拟把一个循环分为24个时隙,CH0~CH2各占用1个时隙,CH3占用3个时隙,CH4占用6个时隙,MCU读操作(简称RD)占用12个时隙。如此便能保证各个设备都以最高速率进行访问。具体时隙划分如图2所示。
应注意每个设备的时隙必须均匀分布,以保证各设备得到匀速的查询,不至于漏掉数据。因此,时隙总数一定是设备数目的整数倍。 时隙划分图是SRAM_CTRL状态机设计的根据和基础。我们按照一个时隙对应一个状态的原则进行状态分配,前面增加初始化状态,最后增加结束状态,以完成准备和收尾工作。状态机示意图如图3所示,其中, ready是预备工作状态,quit是收尾工作状态,状态rd_0~b对应12个RD时隙,状态ch4_0~5对应6个CH4时隙,状态ch3_0~2对应3个CH3时隙,状态ch2、ch1、ch0分别对应1个CH2、CH1、CH0时隙。状态机主要由一个读写循环构成,在复位后,处于空闲状态idle。循环的进入或退出由MCU控制,需在24个读写状态中任意挑选一个进入循环状态,一个退出循环状态。也可定义任何一个读写状态都允许退出循环,这样可避免由于延时而产生误操作。本例定义由rd_0状态进入循环,从ch0状态退出循环。 对于同一个存储空间,同时进行读写必然会产生两种冲突,除了上文解决的时序冲突,还有地址冲突,即读写不能发生在同一个地址,另外还有写满和读空的问题。本文通过在SRAM_CTRL内构造一个循环队列来解决这个问题。在每个数据区内定义两个地址指针,一个指向当前写地址,一个指向当前读地址,再定义一个满标记和一个空标记。读写一个数据后指针自动加1;当写指针加1等于读指针时,输出满标记,余下的写操作将不受影响;同理,当读指针加1等于写指针时,输出空标记,余下的读操作将不受影响。其中细节均按照循环队列的规范设计就可以了,限于篇幅,不再赘述。 |
|
|
|
设计实例及建议
本方案已经在一种测量粒子的产品上实现并投入使用。实际情况如上文所述,共5个通道,采样率分别是1MHz/1MHz/1MHz/10MHz/20MHz ,采样精度有12位和10位,均扩展为16位存储和读取,MCU的总线速率是40MHz。这种情况如果用MCU来控制采样,是根本无法实现的,不过即使是把采样任务分离出去,如果存储任务没有剥离,仍然存在问题。原先的方案是使用一个FIFO来缓冲数据,当FIFO半满时申请中断。结果MCU被频繁地中断,而且读取数据后还需区分是属于哪一通道,然后再分别存到相应的内存块中,从而没有时间顾及人机接口,使得操作界面非常迟钝,严重影响使用。实际上,人机接口的特点是处理时间很短,但要求响应迅速。改进为本方案后,MCU的负担大大减轻,其主要时间用以处理人机接口、液晶显示和网络通信等工作,根据闲忙情况突发式地批量读取数据,对于数据量少的通道,可等到采样结束后再行读取。从而很好地解决了原来的问题。 |
|
|
|
下面给出在具体设计时积累的一些经验和建议,以供参考。
1.当前FPGA设计通常是采用同步时序逻辑,故易于扩展同步接口。建议选择有同步接口的ADC,RAM应选择ZBT-SRAM。目前,ZBT-SRAM的最大容量已达到72Mb,基本能胜任超大数据量的应用。选型时注意ZBT是属于IDT公司的商标,在Cypress被称为NoBL,ISSI称其为NO WAIT,其实际含义是一样的,相应的芯片封装和接口也都完全兼容。 2.对于读写操作不需要同步进行的系统,建议去掉读时隙,另外单独设计一个读循环,这样可大幅降低状态机的速度,从而降低功耗,也减少辐射。 3.通常对ADC得到的数据需要进行一些处理,可根据需要方便地在AD_CTRLx和SRAM_CTRL之间插入数据处理模块(DSP),以减少MCU的计算负担。 4.MCU_IF模块是为MCU与ZBT-SRAM的粘合逻辑,应根据具体MCU的总线结构和时序要求进行设计。更具模块化的设计方法是,把MCU_IF改为连接一种标准总线的控制器,如LPC、SPI等,这样更增加了独立性和灵活性,成为一个通用的信号采集模块。 |
|
|
|
结语
采用FPGA实现的信号采集控制器具有适应能力强、便于调整和易于扩展的优点,其缺点是成本较高、设计工作量和难度较大。本文提出的方案适用于高端的复杂测量系统,是从根本上解决实时性问题的一种方法。不过,对于简单的测量系统,采用基于单片机的方案可能是更好的选择。 |
|
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 10:12 , Processed in 0.659193 second(s), Total 88, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号