首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

DSP与数据转换器协同工作所必须考虑的10大因素

DSP与数据转换器协同工作所必须考虑的10大因素

关键字:DSP   数据转换器   接口  
  假设您接到一项工作任务,设计一套由 DSP 与DAC与ADC等模拟器件组成的信号处理系统。如果您考虑到几个重要因素,工作就会非常简单。下面就来谈谈设计工作中应该考虑的这几个因素。

  详细了解应用类型

第一步需要了解应用类型。对于控制型应用,既需要应对突发的大量数据处理情形,也要考虑间歇的闲置状态;而对于音频应用,则需要处理连续数据流的能力。了解应用的具体需求将有助于选择适当的接口和正确的数据读取方法。

  评估系统速率

第二步需要了解数据采样的速率。举例来说,音频系统可能是一部 CD 播放机,采样率为 96 kHz,也可能是电话语音系统,采样率仅为 8 kHz。当然,也可能是其他系统,如 ADSL 质量测量应用,采样速率高达 10 MSPS,或者是称重应用,每秒只要 16 次采样就足够了,但要求具备较高的分辨率(如 24 位)。了解此方面信息,将有助于开展下一步工作,即选择正确的 DSP 接口。

  选择正确的 DSP 接口

了解了应用及速率要求后,就对采用哪种 DSP 接口有了一定的认识。大多数音频设备均使用特定类型的串行接口,不过高速应用则要求并行接口。当采样速率为 10 MSPS、分辨率
为 12 位时,如果采用串行接口,其端口的速率要达到 120 MHz 才能从转换器向 DSP 发送数据。这一要求大大超过了大多数50 MHz 串行端口的处理能力。若使用并行接口,则总线上信号交换的频率为 10 MHz,速率显著降低,因此处理起来非常简单。

在选择接口时,还要考虑的另一问题就是,并行总线能否满足所需的数据速率要求,或者说并行总线芯片在满足程序与系数要求后是否已经达到了满负荷。如果是的话,不妨考虑在 DSP 与转换器之间插入 FIFO。

  确定握手模式

一旦选择了 DSP 接口,下一步就要考虑转换器与 DSP 之间的握手模式 (handshake mode)。大多数转换器在发出新的数据字之前都会给出某种类型的转换结束 (EOC) 信号。处理器使用上述信号的方式有两种:一是轮询 (poll);二是用其作为中断。

使用 EOC 信号作为中断具有一定优势,因为 CPU 不会被轮询标记占用,因此在获得数据前不会打断 CPU 的正常工作。不过,如果转换器等待处理特定的协议来读取数据,比如转换器发出转换结束信号后又需要读取命令来检索数据,每个读取命令都会触发新的中断,那么就会造成过多的开销,得不偿失。在这种情况下,轮询的方法就具有明显的优势了。

如果中断时延非常重要的话,那么使用轮询方式就更具优势。轮询可确保信号响应速度更快,这比进入中断服务例程要快得多。如果数据检索有短暂时隙 (narrow timeslot),那么采用轮询方式也是有利的。

  确定传输模式

下一步就是实际收集数据的工作了。收集数据有两种方法,各有千秋。第一种方法是采用 DSP 的 DMA(直接存储器存取)控制器,可使传输与转换器的转换结束标记同步,并使 CPU 不用承担传输工作,因为数据阵列的填充是在后台完成的,传输完成后再通知 CPU。不过,这种方法只有在进行直接传输的情况下才有效。如果数据转换器在检索数据时需要某些复杂的机制,那么 DMA 就不太有效了。

在这种情况下,应让 CPU 参与传输工作。尽管服从特殊的协议相当简单,但必须使用大量的 CPU资源来收集数据。如果中断率非常高,那么 CPU 可能很难有时间再去执行数据收集之后的算法了。

  是否采用数据猝发

假设数据转换器连接至 DSP 的并行总线,该并行总线在存储器存取(读取正在执行的数据)和 I/O 存取(读取采样)之间需要几个周期的转换,而且数据转换速率非常高,因此,转换常常是必需的,几乎每次采样读取都要进行转换。

如果一步就能读取多个数据字,且不用每次都进行数据总线交换,肯定是非常有价值的。在这种情况下,不妨考虑在数据转换器与 DSP 之间采用 FIFO。一旦 FIFO 达到一定的水平即中断 DSP,达到一定数量的数据字一步完成传输,这就大大降低了总线转换的开销。

  针对变量选择正确的数据类型

数据转换器针对所用的数据采用不同的格式。有的使用标准二进制(即无符号二进制)数据类型,有的则采用带符号的二进制数据类型,这就是问题的复杂所在。如果有一个 12 位数据转换器,那么在带符号二进制数据情况下,如何使用将是一个问题。符号位占据最重要的位置,即第“11”位(这里的起始位是第“0”位)。如果将此数据字赋予“C”变量,宽度为“16”位,那么假定“C”符号位为第“15”位。如果从转换器读取的数字为负,那么 DSP 就不能识别其为负值,因为符号位的位置错误。如何解决这一问题呢?第一种方法是在读取数据时进行数据位移。不过,这只有在 CPU 读取数据时才有可能,因为 DMA 控制器不可能在传输时进行数据位移。另一种方法是在数据块完全传输后在环路中将数据位移至正确的位置。不过这必须使用 CPU,并要求额外的 MIPS。
返回列表