Commit b38445ea authored by Yuval Peress's avatar Yuval Peress Committed by Carles Cufi
Browse files

math: Introduce a DSP basicmath subsystem with a cmsis backend

Introduce an API mirroring the CMSIS-DSP's basicmath. If CMSIS_DSP is
enabled, then it will by default be used as a backend. Developers may
opt into a custom backend by setting CONFIG_DSP_BACKEND_CMSIS=n. If
done, the application must provide `zdsp_backend/dsp.h` and optionally
implement the functions in its own .c files.

Signed-off-by: default avatarYuval Peress <peress@google.com>
parent 04339659
Loading
Loading
Loading
Loading
+1 −0
Changes for CODEOWNERS: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -756,6 +756,7 @@ scripts/build/gen_image_info.py @tejlmand
/subsys/debug/gdbstub.c                   @ceolin
/subsys/dfu/                              @de-nordic @nordicjm
/subsys/disk/                             @jfischer-no
/subsys/dsp/                              @yperess
/subsys/tracing/                          @nashif
/subsys/debug/asan_hacks.c                @aescolar @daor-oti
/subsys/demand_paging/                    @dcpleung @nashif
+11 −1
Changes for MAINTAINERS.yml: 11 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -324,6 +324,17 @@ CMSIS API layer:
    - "area: CMSIS API Layer"
    - "area: Portability"

DSP subsystem:
  status: maintained
  maintainers:
    - stephanosio
    - yperess
  files:
    - subsys/dsp/
    - tests/subsys/dsp/
  labels:
    - "area: DSP"

CMSIS-DSP integration:
  status: maintained
  maintainers:
@@ -334,7 +345,6 @@ CMSIS-DSP integration:
    - modules/Kconfig.cmsis_dsp
    - tests/benchmarks/cmsis_dsp/
    - tests/lib/cmsis_dsp/
    - tests/subsys/dsp/
  labels:
    - "area: CMSIS-DSP"

+4 −0
Changes for doc/develop/api/overview.rst: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -316,3 +316,7 @@ between major releases are available in the :ref:`zephyr_release_notes`.
   * - :ref:`watchdog_api`
     - Stable
     - 1.0

   * - :ref:`zdsp_api`
     - Experimental
     - 3.3
+61 −0
Changes for doc/services/dsp/index.rst: 61 added lines, 0 removed lines.
Original line number Diff line number Diff line
.. _zdsp_api:

Digital Signal Processing (DSP)
###############################

.. contents::
    :local:
    :depth: 2

The DSP API provides an architecture agnostic way for signal processing.
Currently, the API will work on any architecture but will likely not be
optimized. The status of the various architectures can be found below:

+--------------+-------------+
| Architecture | Status      |
+--------------+-------------+
| ARC          | Unoptimized |
| ARM          | Optimized   |
| ARM64        | Optimized   |
| MIPS         | Unoptimized |
| NIOS2        | Unoptimized |
| POSIX        | Unoptimized |
| RISCV        | Unoptimized |
| RISCV64      | Unoptimized |
| SPARC        | Unoptimized |
| X86          | Unoptimized |
| XTENSA       | Unoptimized |
+--------------+-------------+

Using zDSP
**********

zDSP provides various backend options which are selected automatically for the
application. By default, including the CMSIS module will enable all
architectures to use the zDSP APIs. This can be done by setting::

	CONFIG_CMSIS_DSP=y

If your application requires some additional customization, it's possible to
enable :kconfig:option:`CONFIG_DSP_BACKEND_CUSTOM` which means that the
application is responsible for providing the implementation of the zDSP
library.

Optimizing for your architecture
********************************

If your architecture is showing as ``Unoptimized``, it's possible to add a new
zDSP backend to better support it. To do that, a new Kconfig option should be
added to `subsys/dsp/Kconfig`_ along with the required dependencies and the
``default`` set for ``DSP_BACKEND`` Kconfig choice.

Next, the implementation should be added at ``subsys/dsp/<backend>/`` and
linked in at `subsys/dsp/CMakeLists.txt`_.

API Reference
*************

.. doxygengroup:: math_dsp

.. _subsys/dsp/Kconfig: https://github.com/zephyrproject-rtos/zephyr/blob/main/subsys/dsp/Kconfig
.. _subsys/dsp/CMakeLists.txt: https://github.com/zephyrproject-rtos/zephyr/blob/main/subsys/dsp/CMakeLists.txt
+1 −0
Changes for doc/services/index.rst: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ OS Services
   crypto/index
   debugging/index.rst
   device_mgmt/index
   dsp/index.rst
   file_system/index.rst
   formatted_output.rst
   ipc/index.rst
Loading