标签 ARM 下的文章

概要

在本项目中,为了降低数字信号处理过程中的主控制器成本,我们不得不使用MCU(微控制器)来替代传统的FPGA与DSP。然而对于MCU而言,实时的数字信号处理是一项非常艰巨的任务。因为每执行一次运算都要重复取指、译码、执行等操作,这些操作累加起来将会消耗非常多的时间。但是只要思想不滑坡,方法总比困难多!

举一个最简单的例子,在STM32F103C8T6上,使用定时器来触发进入中断的最小间隔为3us(HAL库)。这就意味着如果需要在这样的中断里面更新DAC的数值,它的最大采样率就仅为333Ksps,远小于手册标称1Msps。但是好在STM32为我们提供了非常多方便的外设可供调用。在上面的例子中,我们可以使用DMA+DAC的架构从数组中直接更新DAC的取值,实测采样率一直到4Msps都可以提供较好的波形。

借助DMA我们实现了传统MCU架构中无法实现的高速信号搬移(外设->内存、内存->外设、内存->内存),但是信号的实时处理仍然是一个很头疼的问题。然而这个问题已经由ARM的工程师解决了,他们在CMSIS-DSP包中提供了非常多的快速的数学运算方法,包括基本数学运算、矩阵运算、滤波、DSP、统计运算等等。直接使用这些最聪明的工程师的成果,会帮助你实现最快的运算速度与最好的兼容性(所有的ARM类型处理器都可使用)。

在本文中,我们将会介绍一个产生信号并采集滤波的例子:

  • 调制波输出:使用STM32内置的DAC输出一个50Hz、100Hz与1KHz等幅度叠加的调制信号,使用DMA更新数据,采样率为100Ksps。
  • 调制波采集:使用内置ADC1对上述产生的数据通过DMA进行乒乓操作采集处理,并将其通过串口发送到电脑分析,采样率为5Ksps。
  • 降采样:数据采集完成后,对其进行5倍的降采样,使其采样率变为1Ksps。
  • FIR滤波:再对上述降采样的信号进行一次FIR滤波,滤除200Hz的信号,仅保留50Hz的信号。
  • FFT分析:在STM32上运行一个实时的FFT运算,离线分析降采样后的数据在频域表现如何。

- 阅读剩余部分 -

综述

本文将介绍如何将DesignStart Eval的示例SoC移植到FPGA上,该SoC使用M0内核。在开始之前,简明阐述本文实现思路,移植可分为两部分:硬件与软件。

  • 硬件移植:Verilog代码的移植、综合、布局布线与调试;在DesignStart Eval的包文件中,...\systems\cortex_m0_mcu\verilog文件夹下实现的有一参考示例,复制所需文件即可。
  • 软件移植:基于CMSIS与参考代码制作自己的库函数,寄存器的配置均需要与RTL中配置的保持一致。

移植该项目时,参考了许多官方文档与第三方书籍,其中最有价值的列举如下:

  • DUI0926B_cortex_m0_designstart_eval_guide.pdf,该手册介绍了示例SoC的结构与细节,用于硬件搭建。
  • DDI0479C_cortex_m_system_design_kit_r1p0_trm.pdf,该手册介绍了CMSDK系统模块,在后期构建库函数时颇有用处。
  • AMBA总线规范中文版V2.0.pdf,介绍了AMBA规范下各个接口的协议。
  • ARM Cortex-M0全可编程SoC原理及实现.pdf,总体上描述了M0的技术细节。

- 阅读剩余部分 -