pluto_hdl_adi/docs/projects/cn0363/index.rst

286 lines
9.6 KiB
ReStructuredText

.. _cn0363:
CN0363 HDL project
==================================================================================
Overview
----------------------------------------------------------------------------------
The :adi:`EVAL-CN0363-PMDZ <CN0363>` is a dual channel colorimeter featuring a
modulated light source transmitter, programmable gain transimpedance amplifiers
on each channel, and a very low noise, 24-bit sigma delta ADC. The output of the
ADC connects via a standard PMOD connector to a FPGA. The FPGA takes the sampled
data from the ADC and implements a synchronous detection algorithm. By using
modulated light and digital synchronous detection, rather than a constant (dc)
source, the system strongly rejects any noise sources at frequencies other than
the modulation frequency, providing excellent accuracy.
The dual channel circuit measures the ratio of light absorbed by the liquids in
the sample and reference containers at three different wavelengths. This forms
the basis of many chemical analysis and environmental monitoring instruments
used to measure concentrations and characterize materials through absorption
spectroscopy.
The :adi:`EVAL-CN0363-PMDZ <CN0363>` HDL reference design is based on the Analog
Devices base reference design for the ZED board. In addition to the base reference
design :adi:`EVAL-CN0363-PMDZ <CN0363>` HDL reference design implements function
blocks to communicate over a SPI bus with the :adi:`AD7175-2` Sigma-Delta ADC to
configure it and receive the raw ADC data as well a configure the :adi:`AD5201`
digital potentiometer. The data received from the ADC is passed to a processing
pipeline which performs a digital synchronous detector and finally write the data
to system memory using a DMA. The HDL reference design is also responsible for
generating the LED excitation signal. A simplified functional block diagram of
the system is given below.
Supported boards
-------------------------------------------------------------------------------
- :adi:`EVAL-CN0363-PMDZ <CN0363>`
Supported devices
-------------------------------------------------------------------------------
- :adi:`CN0363`
- :adi:`AD7175-2`
- :adi:`AD5201`
Supported carriers
---------------------------------------------------------------------------------
- :xilinx:`ZedBoard <products/boards-and-kits/1-8dyf-11.html>` on PMOD connector
Block design
-------------------------------------------------------------------------------
Block diagram
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The data path and clock domains are depicted in the below diagram:
.. image:: cn0363_hdl_block_diagram.svg
:width: 800
:align: center
:alt: CN0363_PMDZ block diagram
CPU/Memory interconnects addresses
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The addresses are dependent on the architecture of the FPGA, having an offset
added to the base address from HDL (see more at :ref:`architecture`).
======================== ===========
Instance Address
======================== ===========
axi_adc 0x43C0_0000
spi_cn0363_axi_regmap 0x44A0_0000
axi_dma 0x44A3_0000
======================== ===========
I2C connections
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:widths: 20 20 20 20 20
:header-rows: 1
* - I2C type
- I2C manager instance
- Alias
- Address
- I2C subordinate
* - PL
- iic_fmc
- axi_iic_fmc
- 0x4162_0000
- ---
* - PL
- iic_main
- axi_iic_main
- 0x4160_0000
- ---
SPI connections
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:widths: 25 25 25 25
:header-rows: 1
* - SPI type
- SPI manager instance
- SPI subordinate
- CS
* - PL
- axi_spi_engine
- cn0363
- 0
GPIOs
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The Software GPIO number is calculated as follows:
- Zynq-7000: if PS7 is used, then offset is 54
.. list-table::
:widths: 25 25 25 25
:header-rows: 2
* - GPIO signal
- Direction
- HDL GPIO EMIO
- Software GPIO
* -
- (from FPGA view)
-
- Zynq-7000
* - spi_sdi
- IN
- 34
- 88
* - gain1_o
- OUT
- 33
- 87
* - gain0_o
- OUT
- 32
- 86
Interrupts
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Below are the Programmable Logic interrupts used in this project.
=================== === ========== ===========
Instance name HDL Linux Zynq Actual Zynq
=================== === ========== ===========
axi_dma 13 57 89
spi 12 56 88
=================== === ========== ===========
Building the HDL project
-------------------------------------------------------------------------------
The design is built upon ADI's generic HDL reference design framework.
ADI does not distribute the bit/elf files of these projects so they
must be built from the sources available :git-hdl:`here </>`. To get
the source you must
`clone <https://git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository>`__
the HDL repository, and then build the project as follows:
**Linux/Cygwin/WSL**
.. code-block::
:linenos:
user@analog:~$ cd hdl/projects/cn0363/zed
user@analog:~/hdl/projects/cn0363/zed$ make
A more comprehensive build guide can be found in the :ref:`build_hdl` user guide.
Resources
-------------------------------------------------------------------------------
Systems related
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Here you can find the quick start guides available for these evaluation boards:
- :dokuwiki:`[Wiki] EVAL-CN0363-PMDZ user guide <resources/eval/user-guides/eval-cn0363-pmdz>`
- :dokuwiki:`[Wiki] EVAL-CN0363-PMDZ Zed quick start guide <resources/eval/user-guides/eval-cn0363-pmdz/quickstart/zynq>`
- :dokuwiki:`[Wiki] CN0363 Colorimeter Application user guide <resources/tools-software/linux-software/colorimeter>`
Hardware related
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Product datasheets:
- :adi:`CN0363`
- :adi:`AD7175-2`
- :adi:`AD5201`
- :adi:`AD8615`
- :adi:`ADG819`
- :adi:`ADA4528-1`
- :dokuwiki:`EVAL-CN0363-PMDZ Introduction <resources/eval/user-guides/eval-cn0363-pmdz/introduction>`
- :dokuwiki:`EVAL-CN0363-PMDZ Hardware <resources/eval/user-guides/eval-cn0363-pmdz/hardware>`
- :dokuwiki:`EVAL-CN0363-PMDZ Hardware Setup <resources/eval/user-guides/eval-cn0363-pmdz/prerequisites>`
HDL related
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- :git-hdl:`CN0363_PMDZ HDL project source code <projects/cn0363>`
- :dokuwiki:`[Wiki] CN0540 HDL project documentation <resources/eval/user-guides/eval-cn0363-pmdz/reference_hdl>`
.. list-table::
:widths: 30 35 35
:header-rows: 1
* - IP name
- Source code link
- Documentation link
* - AXI_DMAC
- :git-hdl:`library/axi_dmac <library/axi_dmac>`
- :ref:`here <axi_dmac>`
* - AXI_GENERIC_ADC
- :git-hdl:`library/axi_generic_adc <library/axi_generic_adc>`
- ---
* - AXI_HDMI_TX
- :git-hdl:`library/axi_hdmi_tx <library/axi_hdmi_tx>`
- :dokuwiki:`[Wiki] <resources/fpga/docs/axi_hdmi_tx>`
* - AXI_I2S_ADI
- :git-hdl:`library/axi_i2s_adi <library/axi_i2s_adi>`
- ---
* - AXI_SPDIF_TX
- :git-hdl:`library/axi_spdif_tx <library/axi_spdif_tx>`
- ---
* - AXI_SYSID
- :git-hdl:`library/axi_sysid <library/axi_sysid>`
- :dokuwiki:`[Wiki] <resources/fpga/docs/axi_sysid>`
* - CN0363_DMA_SEQUENCER
- :git-hdl:`library/cn0363/cn0363_dma_sequencer <library/cn0363/cn0363_dma_sequencer>`
- :dokuwiki:`[Wiki] <resources/fpga/peripherals/cn0363/sequencer?s[]=dma&s[]=sequencer>`
* - CN0363_PHASE_DATA_SYNC
- :git-hdl:`library/cn0363/cn0363_phase_data_sync <library/cn0363/cn0363_phase_data_sync>`
- :dokuwiki:`[Wiki] <resources/fpga/peripherals/cn0363/phase_data_sync>`
* - CORDIC_DEMOD
- :git-hdl:`library/cordic_demod <library/cordic_demod>`
- ---
* - AXI_SPI_ENGINE
- :git-hdl:`library/spi_engine/axi_spi_engine <library/spi_engine/axi_spi_engine>`
- :ref:`here <spi_engine axi>`
* - SPI_ENGINE_EXECUTION
- :git-hdl:`library/spi_engine/spi_engine_execution <library/spi_engine/spi_engine_execution>`
- :ref:`here <spi_engine execution>`
* - SPI_ENGINE_INTERCONNECT
- :git-hdl:`library/spi_engine/spi_engine_interconnect <library/spi_engine/spi_engine_interconnect>`
- :ref:`here <spi_engine interconnect>`
* - SPI_ENGINE_OFFLOAD
- :git-hdl:`library/spi_engine/spi_engine_offload`
- :ref:`here <spi_engine offload>`
* - SYSID_ROM
- :git-hdl:`library/sysid_rom <library/sysid_rom>`
- :dokuwiki:`[Wiki] <resources/fpga/docs/axi_sysid>`
* - UTIL_AXIS_RESIZE
- :git-hdl:`library/util_axis_resize`
- ---
* - UTIL_I2C-MIXER
- :git-hdl:`library/util_i2c_mixer <library/util_i2c_mixer>`
- ---
* - UTIL_SIGMA_DELTA_SPI
- :git-hdl:`library/util_sigma_delta_spi <library/util_sigma_delta_spi>`
- :dokuwiki:`[Wiki] <resources/fpga/peripherals/util_sigma_delta_spi>`
- :ref:`SPI Engine Framework documentation <spi_engine>`
Software related
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- :git-linux:`CN0363 Linux driver source code <drivers/iio/adc/ad_adc.c>`
- :dokuwiki:`CN0363 Linux Driver [Wiki] <resources/eval/user-guides/eval-cn0363-pmdz/software/linux/drivers>`
.. include:: ../common/more_information.rst
.. include:: ../common/support.rst