AD9238双通道波形显示实验
==========================

**实验Vivado工程为“ad9238_hdmi_test”。**

硬件介绍
--------

两通道AD模块说明
~~~~~~~~~~~~~~~~

黑金高速AD模块AN9238为2路65MSPS，
12位的模拟信号转数字信号模块。模块的AD转换采用了ADI公司的AD9238芯片，
AD9238芯片支持2路AD输入转换，所以1片AD9238芯片一共支持2路的AD输入转换。模拟信号输入支持单端模拟信号输入，输入电压范围为-5V~+5V，接口为SMA插座。

模块有一个标准2.54mm间距的40针的排母，用于连接FPGA开发板，AN9238模块实物照片如下：

.. image:: images/23_media/image1.png
      
AN9238模块实物图

**参数说明**

以下为AN9238 高速AD模块的详细参数:

-  AD转换芯片：1片AD9238

-  AD转换通道：2路;

-  AD采样速率： 65MSPS；

-  AD采样数据位数： 12位；

-  数字接口电平标准：+3.3V的CMOS电平

-  AD模拟信号输入范围：-5V~+5V；

-  模拟信号输入接口：SMA接口；

-  测量精度：10mV左右；

-  工作温度：-40°~85°；

模块功能说明
~~~~~~~~~~~~

AN9238模块的原理设计框图如下：

.. image:: images/23_media/image2.png

关于AD9238的电路具体参考设计请参考AD9238的芯片手册。

1) 单端输入及运放电路

单端输入AD1和AD2通过J5或者J6两个SMA头输入，单端输入的电压为-5V~+5V。

板上通过运放AD8065芯片和分压电阻把-5V~+5V输入的电压缩小成-1V~+1V。如果用户想输入更宽范围的电压输入只要修改前端的分压电阻的阻值。

.. image:: images/23_media/image3.png
      
下表为模拟输入信号和AD8065运放输出后的电压对照表：

+--------------------------------+-------------------------------------+
| **AD模拟输入值**               | **AD8065运放输出**                  |
+================================+=====================================+
| -5V                            | -1V                                 |
+--------------------------------+-------------------------------------+
| 0V                             | 0V                                  |
+--------------------------------+-------------------------------------+
| +5V                            | +1V                                 |
+--------------------------------+-------------------------------------+

2) 单端转差分及AD转换

-1V~+1V的输入电压通过AD8138芯片转换成差分信号（VIN+ − VIN−），
差分信号的共模电平由AD的CML管脚决定。

.. image:: images/23_media/image4.png
      
下表为模拟输入信号到AD8138差分输出后的电压对照表：

+----------------+------------------------+----------------------------+
| **             | **AD8065运放输出**     | **AD813                    |
| AD模拟输入值** |                        | 8差分输出**\ （VIN+−VIN−） |
+================+========================+============================+
| -5V            | -1V                    | -1V                        |
+----------------+------------------------+----------------------------+
| 0V             | 0V                     | 0V                         |
+----------------+------------------------+----------------------------+
| +5V            | +1V                    | :sub:`+`\ 1V               |
+----------------+------------------------+----------------------------+

3) AD9238转换

默认AD是配置成offset binary的，AD转换的值如下图所示：

.. image:: images/23_media/image5.png
      
在模块电路设计中，AD9238的VREF的值为1V，这样最终的模拟信号输入和AD转换的数据如下：

+------------+-------------------+--------------------+---------------+
| **AD模     | **AD8055运放**    | **AD8138差分输出** | **AD9         |
| 拟输入值** |                   |                    | 238数字输出** |
|            | **输出**          | （VIN+−VIN−）      |               |
+============+===================+====================+===============+
| -5V        | -1V               | -1V                | 000000000000  |
+------------+-------------------+--------------------+---------------+
| 0V         | 0V                | 0V                 | 100000000000  |
+------------+-------------------+--------------------+---------------+
| +5V        | +1V               | +1V                | 11111111111   |
+------------+-------------------+--------------------+---------------+

从表中我们可以看出，-5V输入的时候，AD9238转换的数字值最小，+5V输入的时候，AD9238转换的数字值最大。

4) AD9238数字输出时序

AD9238双通道AD的数字输出为+3.3V的CMOS输出模式，2路通道(A和B）独立的数据和时钟。AD数据在时钟的上降沿转换数据，FPGA端可用AD时钟的采样AD数据。

.. image:: images/23_media/image6.png
      
程序设计
--------

本实验显示部分是基于前面的HDMI显示彩条的实验，在彩条上叠加网格线和波形,
整个项目的框图如下图所示：

.. image:: images/23_media/image7.png

ad9238_sample模块主要完成AN9238的单路数据转换。最后的数据只取高8位的数据，数据宽度转换到8bit（为了跟其它8位的AD模块程序兼容）。另外每次采集1280个数据，然后等待一段时间再继续采集下面的1280个数据。

+---------------+------+-------+--------------------------------------+
| 信号名称      | 方向 | 宽度  | 说明                                 |
|               |      | (bit) |                                      |
+===============+======+=======+======================================+
| adc_clk       | in   | 1     | adc系统时钟                          |
+---------------+------+-------+--------------------------------------+
| rst           | in   | 1     | 异步复位，高复位                     |
+---------------+------+-------+--------------------------------------+
| adc_data      | in   | 12    | ADC数据输入                          |
+---------------+------+-------+--------------------------------------+
| adc_buf_wr    | out  | 1     | ADC数据写使能                        |
+---------------+------+-------+--------------------------------------+
| adc_buf_addr  | out  | 12    | ADC数据写地址                        |
+---------------+------+-------+--------------------------------------+
| adc_buf_data  | out  | 8     | 无符号8位ADC数据                     |
+---------------+------+-------+--------------------------------------+

ad7606_sample模块端口

grid_display模块主要完成视频图像的网格线叠加，本实验将彩条视频输入，然后叠加一个网格后输出，
这一块网格区域提供给后面的波形显示模块使用，这个网格区域是位于显示器水平方向（从左到右）从9到1018，垂直方向（从上到下）从9到308的视频显示位置。

.. image:: images/23_media/image8.png
      
+-------------+------+-------+----------------------------------------+
| 信号名称    | 方向 | 宽度  | 说明                                   |
|             |      | (bit) |                                        |
+=============+======+=======+========================================+
| pclk        | in   | 1     | 像素时钟                               |
+-------------+------+-------+----------------------------------------+
| rst_n       | in   | 1     | 异步复位，低电平复位                   |
+-------------+------+-------+----------------------------------------+
| i_hs        | in   | 1     | 视频行同步输入                         |
+-------------+------+-------+----------------------------------------+
| i_vs        | in   | 1     | 视频场同步输入                         |
+-------------+------+-------+----------------------------------------+
| i_de        | in   | 1     | 视频数据有效输入                       |
+-------------+------+-------+----------------------------------------+
| i_data      | in   | 24    | 视频数据输入                           |
+-------------+------+-------+----------------------------------------+
| o_hs        | out  | 1     | 带网格视频行同步输出                   |
+-------------+------+-------+----------------------------------------+
| o_vs        | out  | 1     | 带网格视频场同步输出                   |
+-------------+------+-------+----------------------------------------+
| o_de        | out  | 1     | 带网格视频数据有效输出                 |
+-------------+------+-------+----------------------------------------+
| o_data      | out  | 24    | 带网格视频数据输出                     |
+-------------+------+-------+----------------------------------------+

grid_display模块端口

wav_display显示模块主要是完成波形数据的叠加显示，模块内含有一个双口ram，写端口是由ADC采集模块写入，读端口是显示模块。在网格显示区域有效的时候，每行显示都会读取RAM中存储的AD数据值，跟Y坐标比较来判断显示波形或者不显示。

.. image:: images/23_media/image9.png
      
+--------------+------+-------+---------------------------------------+
| 信号名称     | 方向 | 宽度  | 说明                                  |
|              |      | (bit) |                                       |
+==============+======+=======+=======================================+
| pclk         | in   | 1     | 像素时钟                              |
+--------------+------+-------+---------------------------------------+
| rst_n        | in   | 1     | 异步复位，低电平复位                  |
+--------------+------+-------+---------------------------------------+
| wave_color   | in   | 24    | 波形颜色，rgb                         |
+--------------+------+-------+---------------------------------------+
| adc_clk      | in   | 1     | adc模块时钟                           |
+--------------+------+-------+---------------------------------------+
| adc_buf_wr   | in   | 1     | adc数据写使能                         |
+--------------+------+-------+---------------------------------------+
| adc_buf_addr | in   | 12    | adc数据写地址                         |
+--------------+------+-------+---------------------------------------+
| adc_buf_data | in   | 8     | adc数据，无符号数                     |
+--------------+------+-------+---------------------------------------+
| i_hs         | in   | 1     | 视频行同步输入                        |
+--------------+------+-------+---------------------------------------+
| i_vs         | in   | 1     | 视频场同步输入                        |
+--------------+------+-------+---------------------------------------+
| i_de         | in   | 1     | 视频数据有效输入                      |
+--------------+------+-------+---------------------------------------+
| i_data       | in   | 24    | 视频数据输入                          |
+--------------+------+-------+---------------------------------------+
| o_hs         | out  | 1     | 带网格视频行同步输出                  |
+--------------+------+-------+---------------------------------------+
| o_vs         | out  | 1     | 带网格视频场同步输出                  |
+--------------+------+-------+---------------------------------------+
| o_de         | out  | 1     | 带网格视频数据有效输出                |
+--------------+------+-------+---------------------------------------+
| o_data       | out  | 24    | 带网格视频数据输出                    |
+--------------+------+-------+---------------------------------------+

wav_display模块端口

RAM的配置如下：

.. image:: images/23_media/image10.png
      
.. image:: images/23_media/image11.png
      
.. image:: images/23_media/image12.png
      
timing_gen_xy模块为其它模块的子模块，完成视频图像的坐标生成，x坐标，从左到右增大，y坐标从上到下增大。

+-------------+------+-------+----------------------------------------+
| 信号名称    | 方向 | 宽度  | 说明                                   |
|             |      | (bit) |                                        |
+=============+======+=======+========================================+
| clk         | in   | 1     | 系统时钟                               |
+-------------+------+-------+----------------------------------------+
| rst_n       | in   | 1     | 异步复位，低电平复位                   |
+-------------+------+-------+----------------------------------------+
| i_hs        | in   | 1     | 视频行同步输入                         |
+-------------+------+-------+----------------------------------------+
| i_vs        | in   | 1     | 视频场同步输入                         |
+-------------+------+-------+----------------------------------------+
| i_de        | in   | 1     | 视频数据有效输入                       |
+-------------+------+-------+----------------------------------------+
| i_data      | in   | 24    | 视频数据输入                           |
+-------------+------+-------+----------------------------------------+
| o_hs        | out  | 1     | 视频行同步输出                         |
+-------------+------+-------+----------------------------------------+
| o_vs        | out  | 1     | 视频场同步输出                         |
+-------------+------+-------+----------------------------------------+
| o_de        | out  | 1     | 视频数据有效输出                       |
+-------------+------+-------+----------------------------------------+
| o_data      | out  | 24    | 视频数据输出                           |
+-------------+------+-------+----------------------------------------+
| x           | out  | 12    | 坐标x输出                              |
+-------------+------+-------+----------------------------------------+
| y           | out  | 12    | 坐标y输出                              |
+-------------+------+-------+----------------------------------------+

timing_gen_xy模块端口

实验现象
--------

连接电路如下，调节信号发生器的频率和幅度，AN9238输入范围-5V-5V，为了便于观察波形数据，建议信号输入频率
200Khz 到 1Mhz。观察显示器输出，红色波形为 CH1 输入、蓝色为 CH2
输入、黄色网格最上面横线代表 5V，最下面横线代表-5V，中间横线代表
0V，每个竖线间隔是 10 个采样点。

.. image:: images/23_media/image13.png
      
AX7Z035硬件连接图

.. image:: images/23_media/image14.png
      