xilinx vivado zynq vdma仿真及应用详解

很多人用zynq平台做视频图像开发,但是对vdma了解比较少,上手起来稍微有些困难,我针对这一现象,做了一个基于vivado和modelsim的仿真和应用测试工程,并写篇文章做些介绍,希望能对大家有帮助。 
一:xilinx vdma IP例化以及接口介绍 
这里写图片描述
上面图片就是在vivado2015.4中例化vdma的界面,首先对参数做些介绍: 
Frame Buffers :选择vdma缓存几帧图像,这里默认是写通道和读通道都设置相同的缓存帧数,具体设置多少帧合适一般根据应用来定,比如读写带宽相同,想用ddr作为一个乒乓buffer,那就可以设置成2帧,写第一个地址,读第二个地址,写第二个地址,读第一个地址。这里面设置几帧,就要在vdma寄存器配置的时候设置几个帧起始地址。 
Memory Map Data Width:代表数据到达AXI4总线上的位宽,比如这里设置成64,那就代表M_AXI_XX总线上的数据位宽是64bit,这时候如果stream上的数据是32bit,那vdma内部会有一个带宽转换模块,把数据拼成64bit。 
Burst Size : AXI总线上突发传输的长度,一般设置为16 
Stream Data Width:vdma与pl逻辑部分通过axi stream协议交互数据,这里代表stream数据位宽 
Line Buffer Depth:vdma内部会有一个行缓存fifo,stream数据会先写入fifo,然后AXI总线逻辑会读出到总线上,这个深度就代表fifo的深度。设置原则(个人理解):如果AXI总线数据带宽是stream总线数据带宽的1.5倍以上,这个fifo深度可以设置的小一点,如果AXI总线带宽小于1.5倍的stream总线带宽,那fifo的深度至少要是图像一个有效行的一半。 
Advanced : 这里面只说一下Fsync Options,这个信号是什么意思呢,就是告诉vdma什么时候开始运行,一般s2mm通道选择tuser,就是说在tuser 拉高的时候开始传输。mm2s通道,可以选择none,也可以选择 mm2s_fsync,这里介绍一下这两个的区别。 
none : 就是没有同步信号,但这并不是说没有开始信号,而是只要mm2s_stream通道tready拉高,就开始传输,相当于free模式 
mm2s_fsync:当这个信号发生一个下降沿的时候开始传输,如果没有这个下降沿,即使mm2s_stream通道tready拉高也不会传输 
下面是接口介绍: 
M_AXI_XX : axi4总线接口,用来与ddr交互数据 
M_AXIS_XX , S_AXIS_XX : axi stream接口,用来与pl交互数据 
S_AXI_LITE :控制总线,接到ps的gp口或者写一个axilite master总线去配置 
其他接口不做介绍 
二:下面开始一步步的详解如何搭建一个vdma的仿真工程 
FPGA的开发,离不开仿真,很少有人能直接写好代码上板就成功的,仿真必不可少。但是有些应用要用到vdma,vdma又要和ddr做数据交互,这样做起来就很麻烦了,我这里就实现了一个简单的方法,可以测试vdma,又不用去例化MIG搞什么ddr。下面开始! 
系统框图: 
这里写图片描述
(1)因为是要仿真vdma,vdma顾名思义就是video dma,那肯定要先做一个视频模块,注意,我这里除了vdma和fifo用xilinx的ip。其他的都不用ip,这样更通用性。 
我这里就把这个视频发生模块叫做sensor,可以理解为xilin的tpg模块,sensor模块的接口如下:

<code
 class="hljs ruby has-numbering" style="display: block; padding: 0px; 
color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', 
monospace;font-size:undefined; white-space: pre; border-radius: 0px; 
word-wrap: normal; background: transparent;"><span 
class="hljs-class" style="box-sizing: border-box;"><span 
class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">module</span> <span class="hljs-title" 
style="box-sizing: border-box; color: rgb(102, 0, 
102);">sensor</span> </span>
( 
    input rst, 
    input clk, 
    output reg vsync, 
    output reg hsync,
    output reg de,
    output reg vblank,
    output reg[<span class="hljs-number" style="color: rgb(0, 102, 
102); box-sizing: border-box;">31</span><span 
class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">:</span><span class="hljs-number" style="color:
 rgb(0, 102, 102); box-sizing: border-box;">0</span>]pix_out
);

parameter <span class="hljs-constant" style="box-sizing: 
border-box;">SENSOR_ACT_W</span> = <span class="hljs-number"
 style="color: rgb(0, 102, 102); box-sizing: 
border-box;">640</span>;
parameter <span class="hljs-constant" style="box-sizing: 
border-box;">SENSOR_ACT_H</span> = <span class="hljs-number"
 style="color: rgb(0, 102, 102); box-sizing: 
border-box;">480</span>;
parameter <span class="hljs-constant" style="box-sizing: 
border-box;">SENSOR_WIDTH</span> = <span class="hljs-number"
 style="color: rgb(0, 102, 102); box-sizing: 
border-box;">800</span>;
parameter <span class="hljs-constant" style="box-sizing: 
border-box;">SENSOR_HEIGHT</span> = <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">600</span>;
parameter <span class="hljs-constant" style="box-sizing: 
border-box;">H_START</span>       = <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">80</span>; 
parameter <span class="hljs-constant" style="box-sizing: 
border-box;">V_START</span>       = <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">60</span>; </code><ul 
class="pre-numbering" style="box-sizing: border-box; position: absolute;
 width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; 
border-right-width: 1px; border-right-style: solid; border-right-color: 
rgb(221, 221, 221); list-style: none; text-align: right; 
background-color: rgb(238, 238, 238);"><li style="box-sizing: 
border-box; padding: 0px 5px;">1</li><li style="box-sizing: 
border-box; padding: 0px 5px;">2</li><li style="box-sizing: 
border-box; padding: 0px 5px;">3</li><li style="box-sizing: 
border-box; padding: 0px 5px;">4</li><li style="box-sizing: 
border-box; padding: 0px 5px;">5</li><li style="box-sizing: 
border-box; padding: 0px 5px;">6</li><li style="box-sizing: 
border-box; padding: 0px 5px;">7</li><li style="box-sizing: 
border-box; padding: 0px 5px;">8</li><li style="box-sizing: 
border-box; padding: 0px 5px;">9</li><li style="box-sizing: 
border-box; padding: 0px 5px;">10</li><li style="box-sizing:
 border-box; padding: 0px 5px;">11</li><li 
style="box-sizing: border-box; padding: 0px 5px;">12</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">13</li><li style="box-sizing: border-box; padding: 0px
 5px;">14</li><li style="box-sizing: border-box; padding: 
0px 5px;">15</li><li style="box-sizing: border-box; padding:
 0px 5px;">16</li><li style="box-sizing: border-box; 
padding: 0px 5px;">17</li></ul><ul 
class="pre-numbering" style="box-sizing: border-box; position: absolute;
 width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; 
border-right-width: 1px; border-right-style: solid; border-right-color: 
rgb(221, 221, 221); list-style: none; text-align: right; 
background-color: rgb(238, 238, 238);"><li style="box-sizing: 
border-box; padding: 0px 5px;">1</li><li style="box-sizing: 
border-box; padding: 0px 5px;">2</li><li style="box-sizing: 
border-box; padding: 0px 5px;">3</li><li style="box-sizing: 
border-box; padding: 0px 5px;">4</li><li style="box-sizing: 
border-box; padding: 0px 5px;">5</li><li style="box-sizing: 
border-box; padding: 0px 5px;">6</li><li style="box-sizing: 
border-box; padding: 0px 5px;">7</li><li style="box-sizing: 
border-box; padding: 0px 5px;">8</li><li style="box-sizing: 
border-box; padding: 0px 5px;">9</li><li style="box-sizing: 
border-box; padding: 0px 5px;">10</li><li style="box-sizing:
 border-box; padding: 0px 5px;">11</li><li 
style="box-sizing: border-box; padding: 0px 5px;">12</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">13</li><li style="box-sizing: border-box; padding: 0px
 5px;">14</li><li style="box-sizing: border-box; padding: 
0px 5px;">15</li><li style="box-sizing: border-box; padding:
 0px 5px;">16</li><li style="box-sizing: border-box; 
padding: 0px 5px;">17</li></ul>

我这里构建了一个图像传感器,总像素数是600*800,有效像素是 480*640,水平有效像素开始位置是80,垂直有效像素开始位置是60,这个模块会读取一个本地图像数据,rgb格式,这里为了测试方便,直接把像素输出位宽设置为32bit。 
(2)video转axis模块,相当于 xilinx的vid in to stream模块,接口如下:

<code
 class="hljs ruby has-numbering" style="display: block; padding: 0px; 
color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', 
monospace;font-size:undefined; white-space: pre; border-radius: 0px; 
word-wrap: normal; background: transparent;"><span 
class="hljs-class" style="box-sizing: border-box;"><span 
class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">module</span> <span class="hljs-title" 
style="box-sizing: border-box; color: rgb(102, 0, 
102);">video2axis</span> <span class="hljs-comment" 
style="color: rgb(136, 0, 0); box-sizing: 
border-box;">#</span></span>
(
    parameter <span class="hljs-constant" style="box-sizing: 
border-box;">DW</span> = <span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">32</span>,
    parameter <span class="hljs-constant" style="box-sizing: 
border-box;">WIDTH</span> = <span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">640</span>,
    parameter <span class="hljs-constant" style="box-sizing: 
border-box;">HEIGHT</span> = <span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">480</span>
)
(
    input axis_clk,
    input axis_aresetn,

    <span class="hljs-regexp" style="color: rgb(0, 136, 0); 
box-sizing: border-box;">//</span> axis
    input              reg_axis_s2mm_start,
    output [<span class="hljs-constant" style="box-sizing: 
border-box;">DW</span>-<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span><span class="hljs-symbol" style="color:
 rgb(0, 102, 102); box-sizing: border-box;">:</span><span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>] m_axis_tdata,
    output  [<span class="hljs-constant" style="box-sizing: 
border-box;">DW</span>/<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">8</span>-<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span><span class="hljs-symbol" style="color:
 rgb(0, 102, 102); box-sizing: border-box;">:</span><span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>] m_axis_tkeep,
    output reg         m_axis_tvalid,
    output             m_axis_tlast,
    output             m_axis_tuser,
    input              m_axis_tready,
    <span class="hljs-regexp" style="color: rgb(0, 136, 0); 
box-sizing: border-box;">//</span> video data
    input              video_clk,
    input              video_rst,
    input              video_hsync,
    input              video_vsync,
    input              video_hblank,
    input              video_vblank,
    input              video_de,
    input  [<span class="hljs-constant" style="box-sizing: 
border-box;">DW</span>-<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span><span class="hljs-symbol" style="color:
 rgb(0, 102, 102); box-sizing: border-box;">:</span><span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]    video_data

);</code><ul class="pre-numbering" style="box-sizing: 
border-box; position: absolute; width: 50px; top: 0px; left: 0px; 
margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; 
border-right-style: solid; border-right-color: rgb(221, 221, 221); 
list-style: none; text-align: right; background-color: rgb(238, 238, 
238);"><li style="box-sizing: border-box; padding: 0px 
5px;">1</li><li style="box-sizing: border-box; padding: 0px 
5px;">2</li><li style="box-sizing: border-box; padding: 0px 
5px;">3</li><li style="box-sizing: border-box; padding: 0px 
5px;">4</li><li style="box-sizing: border-box; padding: 0px 
5px;">5</li><li style="box-sizing: border-box; padding: 0px 
5px;">6</li><li style="box-sizing: border-box; padding: 0px 
5px;">7</li><li style="box-sizing: border-box; padding: 0px 
5px;">8</li><li style="box-sizing: border-box; padding: 0px 
5px;">9</li><li style="box-sizing: border-box; padding: 0px 
5px;">10</li><li style="box-sizing: border-box; padding: 0px
 5px;">11</li><li style="box-sizing: border-box; padding: 
0px 5px;">12</li><li style="box-sizing: border-box; padding:
 0px 5px;">13</li><li style="box-sizing: border-box; 
padding: 0px 5px;">14</li><li style="box-sizing: border-box;
 padding: 0px 5px;">15</li><li style="box-sizing: 
border-box; padding: 0px 5px;">16</li><li style="box-sizing:
 border-box; padding: 0px 5px;">17</li><li 
style="box-sizing: border-box; padding: 0px 5px;">18</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">19</li><li style="box-sizing: border-box; padding: 0px
 5px;">20</li><li style="box-sizing: border-box; padding: 
0px 5px;">21</li><li style="box-sizing: border-box; padding:
 0px 5px;">22</li><li style="box-sizing: border-box; 
padding: 0px 5px;">23</li><li style="box-sizing: border-box;
 padding: 0px 5px;">24</li><li style="box-sizing: 
border-box; padding: 0px 5px;">25</li><li style="box-sizing:
 border-box; padding: 0px 5px;">26</li><li 
style="box-sizing: border-box; padding: 0px 5px;">27</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">28</li><li style="box-sizing: border-box; padding: 0px
 5px;">29</li></ul><ul class="pre-numbering" 
style="box-sizing: border-box; position: absolute; width: 50px; top: 
0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 
1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); 
list-style: none; text-align: right; background-color: rgb(238, 238, 
238);"><li style="box-sizing: border-box; padding: 0px 
5px;">1</li><li style="box-sizing: border-box; padding: 0px 
5px;">2</li><li style="box-sizing: border-box; padding: 0px 
5px;">3</li><li style="box-sizing: border-box; padding: 0px 
5px;">4</li><li style="box-sizing: border-box; padding: 0px 
5px;">5</li><li style="box-sizing: border-box; padding: 0px 
5px;">6</li><li style="box-sizing: border-box; padding: 0px 
5px;">7</li><li style="box-sizing: border-box; padding: 0px 
5px;">8</li><li style="box-sizing: border-box; padding: 0px 
5px;">9</li><li style="box-sizing: border-box; padding: 0px 
5px;">10</li><li style="box-sizing: border-box; padding: 0px
 5px;">11</li><li style="box-sizing: border-box; padding: 
0px 5px;">12</li><li style="box-sizing: border-box; padding:
 0px 5px;">13</li><li style="box-sizing: border-box; 
padding: 0px 5px;">14</li><li style="box-sizing: border-box;
 padding: 0px 5px;">15</li><li style="box-sizing: 
border-box; padding: 0px 5px;">16</li><li style="box-sizing:
 border-box; padding: 0px 5px;">17</li><li 
style="box-sizing: border-box; padding: 0px 5px;">18</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">19</li><li style="box-sizing: border-box; padding: 0px
 5px;">20</li><li style="box-sizing: border-box; padding: 
0px 5px;">21</li><li style="box-sizing: border-box; padding:
 0px 5px;">22</li><li style="box-sizing: border-box; 
padding: 0px 5px;">23</li><li style="box-sizing: border-box;
 padding: 0px 5px;">24</li><li style="box-sizing: 
border-box; padding: 0px 5px;">25</li><li style="box-sizing:
 border-box; padding: 0px 5px;">26</li><li 
style="box-sizing: border-box; padding: 0px 5px;">27</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">28</li><li style="box-sizing: border-box; padding: 0px
 5px;">29</li></ul>

这个模块主要用到一个fifo来做数据缓存,只要注意一下stream协议的握手操作即可,由于stream协议比较简单,这里就不多说了。至此,video数据就转换到了stream数据。 
(3)axis转video模块,接口如下:

<code
 class="hljs ruby has-numbering" style="display: block; padding: 0px; 
color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', 
monospace;font-size:undefined; white-space: pre; border-radius: 0px; 
word-wrap: normal; background: transparent;"><span 
class="hljs-class" style="box-sizing: border-box;"><span 
class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">module</span> <span class="hljs-title" 
style="box-sizing: border-box; color: rgb(102, 0, 
102);">axis2video</span><span class="hljs-comment" 
style="color: rgb(136, 0, 0); box-sizing: 
border-box;">#</span></span>
(
    parameter <span class="hljs-constant" style="box-sizing: 
border-box;">DW</span> = <span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">32</span>,
    parameter <span class="hljs-constant" style="box-sizing: 
border-box;">WIDTH</span> = <span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">640</span>,
    parameter <span class="hljs-constant" style="box-sizing: 
border-box;">HEIGHT</span> = <span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">480</span>
)
(
    input axis_clk,
    input axis_aresetn,

    <span class="hljs-regexp" style="color: rgb(0, 136, 0); 
box-sizing: border-box;">//</span> axis
    input             reg_axis_mm2s_start,
    input [<span class="hljs-constant" style="box-sizing: 
border-box;">DW</span>-<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span><span class="hljs-symbol" style="color:
 rgb(0, 102, 102); box-sizing: border-box;">:</span><span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]    s_axis_tdata,

    input             s_axis_tvalid,
    input             s_axis_tlast,
    input             s_axis_tuser,
    output reg        s_axis_tready,
    <span class="hljs-regexp" style="color: rgb(0, 136, 0); 
box-sizing: border-box;">//</span> video data
    input              video_clk,
    input              video_rst,

    input              video_hsync_i,
    input              video_vsync_i,
    input              video_hblank_i,
    input              video_vblank_i,
    input              video_de_i,

    output             video_hsync_o,
    output             video_vsync_o,
    output             video_hblank_o,
    output             video_vblank_o,
    output             video_de_o,  
    output  reg[<span class="hljs-constant" style="box-sizing: 
border-box;">DW</span>-<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span><span class="hljs-symbol" style="color:
 rgb(0, 102, 102); box-sizing: border-box;">:</span><span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]   video_data
);</code><ul class="pre-numbering" style="box-sizing: 
border-box; position: absolute; width: 50px; top: 0px; left: 0px; 
margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; 
border-right-style: solid; border-right-color: rgb(221, 221, 221); 
list-style: none; text-align: right; background-color: rgb(238, 238, 
238);"><li style="box-sizing: border-box; padding: 0px 
5px;">1</li><li style="box-sizing: border-box; padding: 0px 
5px;">2</li><li style="box-sizing: border-box; padding: 0px 
5px;">3</li><li style="box-sizing: border-box; padding: 0px 
5px;">4</li><li style="box-sizing: border-box; padding: 0px 
5px;">5</li><li style="box-sizing: border-box; padding: 0px 
5px;">6</li><li style="box-sizing: border-box; padding: 0px 
5px;">7</li><li style="box-sizing: border-box; padding: 0px 
5px;">8</li><li style="box-sizing: border-box; padding: 0px 
5px;">9</li><li style="box-sizing: border-box; padding: 0px 
5px;">10</li><li style="box-sizing: border-box; padding: 0px
 5px;">11</li><li style="box-sizing: border-box; padding: 
0px 5px;">12</li><li style="box-sizing: border-box; padding:
 0px 5px;">13</li><li style="box-sizing: border-box; 
padding: 0px 5px;">14</li><li style="box-sizing: border-box;
 padding: 0px 5px;">15</li><li style="box-sizing: 
border-box; padding: 0px 5px;">16</li><li style="box-sizing:
 border-box; padding: 0px 5px;">17</li><li 
style="box-sizing: border-box; padding: 0px 5px;">18</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">19</li><li style="box-sizing: border-box; padding: 0px
 5px;">20</li><li style="box-sizing: border-box; padding: 
0px 5px;">21</li><li style="box-sizing: border-box; padding:
 0px 5px;">22</li><li style="box-sizing: border-box; 
padding: 0px 5px;">23</li><li style="box-sizing: border-box;
 padding: 0px 5px;">24</li><li style="box-sizing: 
border-box; padding: 0px 5px;">25</li><li style="box-sizing:
 border-box; padding: 0px 5px;">26</li><li 
style="box-sizing: border-box; padding: 0px 5px;">27</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">28</li><li style="box-sizing: border-box; padding: 0px
 5px;">29</li><li style="box-sizing: border-box; padding: 
0px 5px;">30</li><li style="box-sizing: border-box; padding:
 0px 5px;">31</li><li style="box-sizing: border-box; 
padding: 0px 5px;">32</li><li style="box-sizing: border-box;
 padding: 0px 5px;">33</li><li style="box-sizing: 
border-box; padding: 0px 5px;">34</li><li style="box-sizing:
 border-box; padding: 0px 5px;">35</li></ul><ul 
class="pre-numbering" style="box-sizing: border-box; position: absolute;
 width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; 
border-right-width: 1px; border-right-style: solid; border-right-color: 
rgb(221, 221, 221); list-style: none; text-align: right; 
background-color: rgb(238, 238, 238);"><li style="box-sizing: 
border-box; padding: 0px 5px;">1</li><li style="box-sizing: 
border-box; padding: 0px 5px;">2</li><li style="box-sizing: 
border-box; padding: 0px 5px;">3</li><li style="box-sizing: 
border-box; padding: 0px 5px;">4</li><li style="box-sizing: 
border-box; padding: 0px 5px;">5</li><li style="box-sizing: 
border-box; padding: 0px 5px;">6</li><li style="box-sizing: 
border-box; padding: 0px 5px;">7</li><li style="box-sizing: 
border-box; padding: 0px 5px;">8</li><li style="box-sizing: 
border-box; padding: 0px 5px;">9</li><li style="box-sizing: 
border-box; padding: 0px 5px;">10</li><li style="box-sizing:
 border-box; padding: 0px 5px;">11</li><li 
style="box-sizing: border-box; padding: 0px 5px;">12</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">13</li><li style="box-sizing: border-box; padding: 0px
 5px;">14</li><li style="box-sizing: border-box; padding: 
0px 5px;">15</li><li style="box-sizing: border-box; padding:
 0px 5px;">16</li><li style="box-sizing: border-box; 
padding: 0px 5px;">17</li><li style="box-sizing: border-box;
 padding: 0px 5px;">18</li><li style="box-sizing: 
border-box; padding: 0px 5px;">19</li><li style="box-sizing:
 border-box; padding: 0px 5px;">20</li><li 
style="box-sizing: border-box; padding: 0px 5px;">21</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">22</li><li style="box-sizing: border-box; padding: 0px
 5px;">23</li><li style="box-sizing: border-box; padding: 
0px 5px;">24</li><li style="box-sizing: border-box; padding:
 0px 5px;">25</li><li style="box-sizing: border-box; 
padding: 0px 5px;">26</li><li style="box-sizing: border-box;
 padding: 0px 5px;">27</li><li style="box-sizing: 
border-box; padding: 0px 5px;">28</li><li style="box-sizing:
 border-box; padding: 0px 5px;">29</li><li 
style="box-sizing: border-box; padding: 0px 5px;">30</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">31</li><li style="box-sizing: border-box; padding: 0px
 5px;">32</li><li style="box-sizing: border-box; padding: 
0px 5px;">33</li><li style="box-sizing: border-box; padding:
 0px 5px;">34</li><li style="box-sizing: border-box; 
padding: 0px 5px;">35</li></ul>

这个模块相当于xilinx的vid out模块,我这里是简化版的,xilinx的ip写的太复杂了,而且不容易用起来,其实也就是用一个fifo做数据缓存,然后根据外部video时序从fifo读出到输出。 

(4)video timing gen模块,接口如下:

<code
 class="hljs ruby has-numbering" style="display: block; padding: 0px; 
color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', 
monospace;font-size:undefined; white-space: pre; border-radius: 0px; 
word-wrap: normal; background: transparent;"><span 
class="hljs-class" style="box-sizing: border-box;"><span 
class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">module</span> <span class="hljs-title" 
style="box-sizing: border-box; color: rgb(102, 0, 
102);">video_timing_gen</span> <span class="hljs-comment" 
style="color: rgb(136, 0, 0); box-sizing: 
border-box;">#</span></span>
(
    parameter <span class="hljs-constant" style="box-sizing: 
border-box;">SENSOR_ACT_W</span> = <span class="hljs-number"
 style="color: rgb(0, 102, 102); box-sizing: 
border-box;">640</span>,
    parameter <span class="hljs-constant" style="box-sizing: 
border-box;">SENSOR_ACT_H</span> = <span class="hljs-number"
 style="color: rgb(0, 102, 102); box-sizing: 
border-box;">480</span>,
    parameter <span class="hljs-constant" style="box-sizing: 
border-box;">SENSOR_WIDTH</span> = <span class="hljs-number"
 style="color: rgb(0, 102, 102); box-sizing: 
border-box;">800</span>,
    parameter <span class="hljs-constant" style="box-sizing: 
border-box;">SENSOR_HEIGHT</span> = <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">600</span>,
    parameter <span class="hljs-constant" style="box-sizing: 
border-box;">SENSOR_HSYNC_START</span> = <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>,
    parameter <span class="hljs-constant" style="box-sizing: 
border-box;">SENSOR_HSYNC_STOP</span> = <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">40</span>,
    parameter <span class="hljs-constant" style="box-sizing: 
border-box;">SENSOR_VSYNC_START</span> = <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>,
    parameter <span class="hljs-constant" style="box-sizing: 
border-box;">SENSOR_VSYNC_STOP</span> = <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">4</span>
)
( 
    input rst_n, 
    input video_clk, 
    input  [<span class="hljs-number" style="color: rgb(0, 102, 102);
 box-sizing: border-box;">12</span><span class="hljs-symbol"
 style="color: rgb(0, 102, 102); box-sizing: 
border-box;">:</span><span class="hljs-number" style="color:
 rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]reg_h_start,
    input  [<span class="hljs-number" style="color: rgb(0, 102, 102);
 box-sizing: border-box;">12</span><span class="hljs-symbol"
 style="color: rgb(0, 102, 102); box-sizing: 
border-box;">:</span><span class="hljs-number" style="color:
 rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]reg_v_start,
    output reg vsync, 
    output reg hsync,
    output reg de,
    output reg vblank,
    output reg hblank
);</code><ul class="pre-numbering" style="box-sizing: 
border-box; position: absolute; width: 50px; top: 0px; left: 0px; 
margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; 
border-right-style: solid; border-right-color: rgb(221, 221, 221); 
list-style: none; text-align: right; background-color: rgb(238, 238, 
238);"><li style="box-sizing: border-box; padding: 0px 
5px;">1</li><li style="box-sizing: border-box; padding: 0px 
5px;">2</li><li style="box-sizing: border-box; padding: 0px 
5px;">3</li><li style="box-sizing: border-box; padding: 0px 
5px;">4</li><li style="box-sizing: border-box; padding: 0px 
5px;">5</li><li style="box-sizing: border-box; padding: 0px 
5px;">6</li><li style="box-sizing: border-box; padding: 0px 
5px;">7</li><li style="box-sizing: border-box; padding: 0px 
5px;">8</li><li style="box-sizing: border-box; padding: 0px 
5px;">9</li><li style="box-sizing: border-box; padding: 0px 
5px;">10</li><li style="box-sizing: border-box; padding: 0px
 5px;">11</li><li style="box-sizing: border-box; padding: 
0px 5px;">12</li><li style="box-sizing: border-box; padding:
 0px 5px;">13</li><li style="box-sizing: border-box; 
padding: 0px 5px;">14</li><li style="box-sizing: border-box;
 padding: 0px 5px;">15</li><li style="box-sizing: 
border-box; padding: 0px 5px;">16</li><li style="box-sizing:
 border-box; padding: 0px 5px;">17</li><li 
style="box-sizing: border-box; padding: 0px 5px;">18</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">19</li><li style="box-sizing: border-box; padding: 0px
 5px;">20</li><li style="box-sizing: border-box; padding: 
0px 5px;">21</li><li style="box-sizing: border-box; padding:
 0px 5px;">22</li></ul><ul class="pre-numbering" 
style="box-sizing: border-box; position: absolute; width: 50px; top: 
0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 
1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); 
list-style: none; text-align: right; background-color: rgb(238, 238, 
238);"><li style="box-sizing: border-box; padding: 0px 
5px;">1</li><li style="box-sizing: border-box; padding: 0px 
5px;">2</li><li style="box-sizing: border-box; padding: 0px 
5px;">3</li><li style="box-sizing: border-box; padding: 0px 
5px;">4</li><li style="box-sizing: border-box; padding: 0px 
5px;">5</li><li style="box-sizing: border-box; padding: 0px 
5px;">6</li><li style="box-sizing: border-box; padding: 0px 
5px;">7</li><li style="box-sizing: border-box; padding: 0px 
5px;">8</li><li style="box-sizing: border-box; padding: 0px 
5px;">9</li><li style="box-sizing: border-box; padding: 0px 
5px;">10</li><li style="box-sizing: border-box; padding: 0px
 5px;">11</li><li style="box-sizing: border-box; padding: 
0px 5px;">12</li><li style="box-sizing: border-box; padding:
 0px 5px;">13</li><li style="box-sizing: border-box; 
padding: 0px 5px;">14</li><li style="box-sizing: border-box;
 padding: 0px 5px;">15</li><li style="box-sizing: 
border-box; padding: 0px 5px;">16</li><li style="box-sizing:
 border-box; padding: 0px 5px;">17</li><li 
style="box-sizing: border-box; padding: 0px 5px;">18</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">19</li><li style="box-sizing: border-box; padding: 0px
 5px;">20</li><li style="box-sizing: border-box; padding: 
0px 5px;">21</li><li style="box-sizing: border-box; padding:
 0px 5px;">22</li></ul>

此模块产生视频时序,提供给 axis2video模块,相当于xilinx的vtc模块。 
(5) axi slave模块,接口如下:

<code
 class="hljs mel has-numbering" style="display: block; padding: 0px; 
color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', 
monospace;font-size:undefined; white-space: pre; border-radius: 0px; 
word-wrap: normal; background: transparent;"><span 
class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: 
border-box;">`define C_S_AXI_ADDR_WIDTH 32

module axi_slave #(
  parameter integer C_S_AXI_ID_WIDTH = 6,
  parameter integer C_S_AXI_DATA_WIDTH = 32
) (

  input  wire S_AXI_ACLK,
  input  wire S_AXI_ARESETN,
  input  wire [C_S_AXI_ID_WIDTH-1:0] S_AXI_AWID,
  input  wire [`</span>C_S_AXI_ADDR_WIDTH-<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>] S_AXI_AWADDR,
  input  <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">wire</span> [<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">7</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>] S_AXI_AWLEN,
  input  <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">wire</span> [<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">2</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>] S_AXI_AWSIZE,
  input  <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">wire</span> [<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>] S_AXI_AWBURST,
  input  <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">wire</span> S_AXI_AWVALID,
  output <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">wire</span> S_AXI_AWREADY,
  input  <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">wire</span> 
[C_S_AXI_DATA_WIDTH-<span class="hljs-number" style="color: rgb(0, 
102, 102); box-sizing: border-box;">1</span>:<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>] S_AXI_WDATA,
  input  <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">wire</span> 
[C_S_AXI_DATA_WIDTH/<span class="hljs-number" style="color: rgb(0, 
102, 102); box-sizing: border-box;">8</span>-<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>] S_AXI_WSTRB,
  input  <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">wire</span> S_AXI_WLAST,
  input  <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">wire</span> S_AXI_WVALID,
  output <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">wire</span> S_AXI_WREADY,
  output <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">wire</span> [C_S_AXI_ID_WIDTH-<span
 class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>] S_AXI_BID,
  output <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">wire</span> [<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>] S_AXI_BRESP,
  output <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">wire</span> S_AXI_BVALID,
  input  <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">wire</span> S_AXI_BREADY,
  input  <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">wire</span> [C_S_AXI_ID_WIDTH-<span
 class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>] S_AXI_ARID,
  input  <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">wire</span> [<span 
class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: 
border-box;">`C_S_AXI_ADDR_WIDTH-1:0] S_AXI_ARADDR,
  input  wire [7:0] S_AXI_ARLEN,
  input  wire [2:0] S_AXI_ARSIZE,
  input  wire [1:0] S_AXI_ARBURST,
  input  wire S_AXI_ARVALID,
  output wire S_AXI_ARREADY,
  output wire [C_S_AXI_ID_WIDTH-1:0] S_AXI_RID,
  output wire [C_S_AXI_DATA_WIDTH-1:0] S_AXI_RDATA,
  output wire [1:0] S_AXI_RRESP,
  output wire S_AXI_RLAST,
  output wire S_AXI_RVALID,
  input  wire S_AXI_RREADY
);</span></code><ul class="pre-numbering" 
style="box-sizing: border-box; position: absolute; width: 50px; top: 
0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 
1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); 
list-style: none; text-align: right; background-color: rgb(238, 238, 
238);"><li style="box-sizing: border-box; padding: 0px 
5px;">1</li><li style="box-sizing: border-box; padding: 0px 
5px;">2</li><li style="box-sizing: border-box; padding: 0px 
5px;">3</li><li style="box-sizing: border-box; padding: 0px 
5px;">4</li><li style="box-sizing: border-box; padding: 0px 
5px;">5</li><li style="box-sizing: border-box; padding: 0px 
5px;">6</li><li style="box-sizing: border-box; padding: 0px 
5px;">7</li><li style="box-sizing: border-box; padding: 0px 
5px;">8</li><li style="box-sizing: border-box; padding: 0px 
5px;">9</li><li style="box-sizing: border-box; padding: 0px 
5px;">10</li><li style="box-sizing: border-box; padding: 0px
 5px;">11</li><li style="box-sizing: border-box; padding: 
0px 5px;">12</li><li style="box-sizing: border-box; padding:
 0px 5px;">13</li><li style="box-sizing: border-box; 
padding: 0px 5px;">14</li><li style="box-sizing: border-box;
 padding: 0px 5px;">15</li><li style="box-sizing: 
border-box; padding: 0px 5px;">16</li><li style="box-sizing:
 border-box; padding: 0px 5px;">17</li><li 
style="box-sizing: border-box; padding: 0px 5px;">18</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">19</li><li style="box-sizing: border-box; padding: 0px
 5px;">20</li><li style="box-sizing: border-box; padding: 
0px 5px;">21</li><li style="box-sizing: border-box; padding:
 0px 5px;">22</li><li style="box-sizing: border-box; 
padding: 0px 5px;">23</li><li style="box-sizing: border-box;
 padding: 0px 5px;">24</li><li style="box-sizing: 
border-box; padding: 0px 5px;">25</li><li style="box-sizing:
 border-box; padding: 0px 5px;">26</li><li 
style="box-sizing: border-box; padding: 0px 5px;">27</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">28</li><li style="box-sizing: border-box; padding: 0px
 5px;">29</li><li style="box-sizing: border-box; padding: 
0px 5px;">30</li><li style="box-sizing: border-box; padding:
 0px 5px;">31</li><li style="box-sizing: border-box; 
padding: 0px 5px;">32</li><li style="box-sizing: border-box;
 padding: 0px 5px;">33</li><li style="box-sizing: 
border-box; padding: 0px 5px;">34</li><li style="box-sizing:
 border-box; padding: 0px 5px;">35</li><li 
style="box-sizing: border-box; padding: 0px 5px;">36</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">37</li><li style="box-sizing: border-box; padding: 0px
 5px;">38</li><li style="box-sizing: border-box; padding: 
0px 5px;">39</li></ul><ul class="pre-numbering" 
style="box-sizing: border-box; position: absolute; width: 50px; top: 
0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 
1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); 
list-style: none; text-align: right; background-color: rgb(238, 238, 
238);"><li style="box-sizing: border-box; padding: 0px 
5px;">1</li><li style="box-sizing: border-box; padding: 0px 
5px;">2</li><li style="box-sizing: border-box; padding: 0px 
5px;">3</li><li style="box-sizing: border-box; padding: 0px 
5px;">4</li><li style="box-sizing: border-box; padding: 0px 
5px;">5</li><li style="box-sizing: border-box; padding: 0px 
5px;">6</li><li style="box-sizing: border-box; padding: 0px 
5px;">7</li><li style="box-sizing: border-box; padding: 0px 
5px;">8</li><li style="box-sizing: border-box; padding: 0px 
5px;">9</li><li style="box-sizing: border-box; padding: 0px 
5px;">10</li><li style="box-sizing: border-box; padding: 0px
 5px;">11</li><li style="box-sizing: border-box; padding: 
0px 5px;">12</li><li style="box-sizing: border-box; padding:
 0px 5px;">13</li><li style="box-sizing: border-box; 
padding: 0px 5px;">14</li><li style="box-sizing: border-box;
 padding: 0px 5px;">15</li><li style="box-sizing: 
border-box; padding: 0px 5px;">16</li><li style="box-sizing:
 border-box; padding: 0px 5px;">17</li><li 
style="box-sizing: border-box; padding: 0px 5px;">18</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">19</li><li style="box-sizing: border-box; padding: 0px
 5px;">20</li><li style="box-sizing: border-box; padding: 
0px 5px;">21</li><li style="box-sizing: border-box; padding:
 0px 5px;">22</li><li style="box-sizing: border-box; 
padding: 0px 5px;">23</li><li style="box-sizing: border-box;
 padding: 0px 5px;">24</li><li style="box-sizing: 
border-box; padding: 0px 5px;">25</li><li style="box-sizing:
 border-box; padding: 0px 5px;">26</li><li 
style="box-sizing: border-box; padding: 0px 5px;">27</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">28</li><li style="box-sizing: border-box; padding: 0px
 5px;">29</li><li style="box-sizing: border-box; padding: 
0px 5px;">30</li><li style="box-sizing: border-box; padding:
 0px 5px;">31</li><li style="box-sizing: border-box; 
padding: 0px 5px;">32</li><li style="box-sizing: border-box;
 padding: 0px 5px;">33</li><li style="box-sizing: 
border-box; padding: 0px 5px;">34</li><li style="box-sizing:
 border-box; padding: 0px 5px;">35</li><li 
style="box-sizing: border-box; padding: 0px 5px;">36</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">37</li><li style="box-sizing: border-box; padding: 0px
 5px;">38</li><li style="box-sizing: border-box; padding: 
0px 5px;">39</li></ul>

这块模块是根据xilinx官方提供的参考设计基础上修改而来的(xapp1168),协议部分完全没有改动,这里拿他当做ddr,具体修改是这样的, 
reg [31:0] mem [32’h01000000:0]; 
用寄存器组来模拟ddr 
此模块会根据axi master的时序来计算出要读写的地址 
assign write_mem_address = axi_awv_awr_flag ? axi_awaddr: 0; 
assign read_mem_address = axi_arv_arr_flag ? axi_araddr: 0; 
写操作:mem[write_mem_address>>2] <= #1 S_AXI_WDATA; 
读操作:mem_data_out <= mem[read_mem_address>>2]; 
做此修改以后,这个模块就可以当做ddr来用,为仿真提供了很大的方便 
(6)vdma模块,这个就用xilinx的vdma ip,注意,我这里不是在block design里面例化,所以端口需要自己在hdl里面做连接的。 
这里还有一个模块是 axi lite master模块,作用是用来配置vdma的寄存器,这个模块也是xilinx提供的,只需要做小量修改即可

<code
 class="hljs vhdl has-numbering" style="display: block; padding: 0px; 
color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', 
monospace;font-size:undefined; white-space: pre; border-radius: 0px; 
word-wrap: normal; background: transparent;">always @(write_index)
  <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">begin</span>
     <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">case</span> (write_index)
       // AXI VDMA <span class="hljs-number" style="color: rgb(0, 
102, 102); box-sizing: border-box;">0</span> Set Up
       <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">1</span>:  awaddr <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">32</span><span class="hljs-attribute" 
style="box-sizing: border-box;">'h43000030</span>; 
       <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">2</span>:  awaddr <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">32</span><span class="hljs-attribute" 
style="box-sizing: border-box;">'h43c000ac</span>;  
       <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">3</span>:  awaddr <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">32</span><span class="hljs-attribute" 
style="box-sizing: border-box;">'h43c000b0</span>;  
       <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">4</span>:  awaddr <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">32</span><span class="hljs-attribute" 
style="box-sizing: border-box;">'h43c000a8</span>;
       <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">5</span>:  awaddr <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">32</span><span class="hljs-attribute" 
style="box-sizing: border-box;">'h43c000a4</span>;
       <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">6</span>:  awaddr <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">32</span><span class="hljs-attribute" 
style="box-sizing: border-box;">'h43c000a0</span>;
   <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">7</span>:  awaddr <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">32</span><span class="hljs-attribute" 
style="box-sizing: border-box;">'h43000000</span>; 
       <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">8</span>:  awaddr <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">32</span><span class="hljs-attribute" 
style="box-sizing: border-box;">'h43c0005c</span>;  
       <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">9</span>:  awaddr <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">32</span><span class="hljs-attribute" 
style="box-sizing: border-box;">'h43c00060</span>; 
       <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">10</span>: awaddr <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">32</span><span class="hljs-attribute" 
style="box-sizing: border-box;">'h43c00058</span>;
       <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">11</span>: awaddr <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">32</span><span class="hljs-attribute" 
style="box-sizing: border-box;">'h43c00054</span>;
       <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">12</span>: awaddr <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">32</span><span class="hljs-attribute" 
style="box-sizing: border-box;">'h43c00050</span>;
       <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">default</span>: awaddr <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">32</span><span class="hljs-attribute" 
style="box-sizing: border-box;">'h00000000</span>;
     endcase 
  <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">end</span>

always @(write_index)
  <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">begin</span>
     <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">case</span> (write_index)
       // AXI VDMA <span class="hljs-number" style="color: rgb(0, 
102, 102); box-sizing: border-box;">0</span> Set Up
       <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">1</span>:  wdata <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">32</span><span class="hljs-attribute" 
style="box-sizing: border-box;">'h00000003</span>;   
       <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">2</span>:  wdata <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">32</span><span class="hljs-attribute" 
style="box-sizing: border-box;">'h00800000</span>;    
       <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">3</span>:  wdata <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">32</span><span class="hljs-attribute" 
style="box-sizing: border-box;">'h00000000</span>; 
       <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">4</span>:  wdata <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">640</span>*<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">4</span>;
       <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">5</span>:  wdata <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">640</span>*<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">4</span>;
       <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">6</span>:  wdata <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">480</span>;
   <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">7</span>:  wdata <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">32</span><span class="hljs-attribute" 
style="box-sizing: border-box;">'h00000003</span>;   
       <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">8</span>:  wdata <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">32</span><span class="hljs-attribute" 
style="box-sizing: border-box;">'h00000000</span>;    
       <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">9</span>:  wdata <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">32</span><span class="hljs-attribute" 
style="box-sizing: border-box;">'h00800000</span>;   
       <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">10</span>: wdata <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">640</span>*<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">4</span>;
       <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">11</span>:  wdata <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">640</span>*<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">4</span>;
       <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">12</span>: wdata <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">480</span>;
       <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">default</span>: wdata <= <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">32</span><span class="hljs-attribute" 
style="box-sizing: border-box;">'h00000000</span>;
     endcase
  <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">end</span></code><ul 
class="pre-numbering" style="box-sizing: border-box; position: absolute;
 width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; 
border-right-width: 1px; border-right-style: solid; border-right-color: 
rgb(221, 221, 221); list-style: none; text-align: right; 
background-color: rgb(238, 238, 238);"><li style="box-sizing: 
border-box; padding: 0px 5px;">1</li><li style="box-sizing: 
border-box; padding: 0px 5px;">2</li><li style="box-sizing: 
border-box; padding: 0px 5px;">3</li><li style="box-sizing: 
border-box; padding: 0px 5px;">4</li><li style="box-sizing: 
border-box; padding: 0px 5px;">5</li><li style="box-sizing: 
border-box; padding: 0px 5px;">6</li><li style="box-sizing: 
border-box; padding: 0px 5px;">7</li><li style="box-sizing: 
border-box; padding: 0px 5px;">8</li><li style="box-sizing: 
border-box; padding: 0px 5px;">9</li><li style="box-sizing: 
border-box; padding: 0px 5px;">10</li><li style="box-sizing:
 border-box; padding: 0px 5px;">11</li><li 
style="box-sizing: border-box; padding: 0px 5px;">12</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">13</li><li style="box-sizing: border-box; padding: 0px
 5px;">14</li><li style="box-sizing: border-box; padding: 
0px 5px;">15</li><li style="box-sizing: border-box; padding:
 0px 5px;">16</li><li style="box-sizing: border-box; 
padding: 0px 5px;">17</li><li style="box-sizing: border-box;
 padding: 0px 5px;">18</li><li style="box-sizing: 
border-box; padding: 0px 5px;">19</li><li style="box-sizing:
 border-box; padding: 0px 5px;">20</li><li 
style="box-sizing: border-box; padding: 0px 5px;">21</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">22</li><li style="box-sizing: border-box; padding: 0px
 5px;">23</li><li style="box-sizing: border-box; padding: 
0px 5px;">24</li><li style="box-sizing: border-box; padding:
 0px 5px;">25</li><li style="box-sizing: border-box; 
padding: 0px 5px;">26</li><li style="box-sizing: border-box;
 padding: 0px 5px;">27</li><li style="box-sizing: 
border-box; padding: 0px 5px;">28</li><li style="box-sizing:
 border-box; padding: 0px 5px;">29</li><li 
style="box-sizing: border-box; padding: 0px 5px;">30</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">31</li><li style="box-sizing: border-box; padding: 0px
 5px;">32</li><li style="box-sizing: border-box; padding: 
0px 5px;">33</li><li style="box-sizing: border-box; padding:
 0px 5px;">34</li><li style="box-sizing: border-box; 
padding: 0px 5px;">35</li><li style="box-sizing: border-box;
 padding: 0px 5px;">36</li><li style="box-sizing: 
border-box; padding: 0px 5px;">37</li><li style="box-sizing:
 border-box; padding: 0px 5px;">38</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">39</li></ul><ul class="pre-numbering" 
style="box-sizing: border-box; position: absolute; width: 50px; top: 
0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 
1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); 
list-style: none; text-align: right; background-color: rgb(238, 238, 
238);"><li style="box-sizing: border-box; padding: 0px 
5px;">1</li><li style="box-sizing: border-box; padding: 0px 
5px;">2</li><li style="box-sizing: border-box; padding: 0px 
5px;">3</li><li style="box-sizing: border-box; padding: 0px 
5px;">4</li><li style="box-sizing: border-box; padding: 0px 
5px;">5</li><li style="box-sizing: border-box; padding: 0px 
5px;">6</li><li style="box-sizing: border-box; padding: 0px 
5px;">7</li><li style="box-sizing: border-box; padding: 0px 
5px;">8</li><li style="box-sizing: border-box; padding: 0px 
5px;">9</li><li style="box-sizing: border-box; padding: 0px 
5px;">10</li><li style="box-sizing: border-box; padding: 0px
 5px;">11</li><li style="box-sizing: border-box; padding: 
0px 5px;">12</li><li style="box-sizing: border-box; padding:
 0px 5px;">13</li><li style="box-sizing: border-box; 
padding: 0px 5px;">14</li><li style="box-sizing: border-box;
 padding: 0px 5px;">15</li><li style="box-sizing: 
border-box; padding: 0px 5px;">16</li><li style="box-sizing:
 border-box; padding: 0px 5px;">17</li><li 
style="box-sizing: border-box; padding: 0px 5px;">18</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">19</li><li style="box-sizing: border-box; padding: 0px
 5px;">20</li><li style="box-sizing: border-box; padding: 
0px 5px;">21</li><li style="box-sizing: border-box; padding:
 0px 5px;">22</li><li style="box-sizing: border-box; 
padding: 0px 5px;">23</li><li style="box-sizing: border-box;
 padding: 0px 5px;">24</li><li style="box-sizing: 
border-box; padding: 0px 5px;">25</li><li style="box-sizing:
 border-box; padding: 0px 5px;">26</li><li 
style="box-sizing: border-box; padding: 0px 5px;">27</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">28</li><li style="box-sizing: border-box; padding: 0px
 5px;">29</li><li style="box-sizing: border-box; padding: 
0px 5px;">30</li><li style="box-sizing: border-box; padding:
 0px 5px;">31</li><li style="box-sizing: border-box; 
padding: 0px 5px;">32</li><li style="box-sizing: border-box;
 padding: 0px 5px;">33</li><li style="box-sizing: 
border-box; padding: 0px 5px;">34</li><li style="box-sizing:
 border-box; padding: 0px 5px;">35</li><li 
style="box-sizing: border-box; padding: 0px 5px;">36</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">37</li><li style="box-sizing: border-box; padding: 0px
 5px;">38</li><li style="box-sizing: border-box; padding: 
0px 5px;">39</li></ul>

我这里是把ddr作为一个乒乓buffer,所以vdma缓存帧数选择2帧,寄存器配置里面就配置两个传输地址。这样就完成了对vdma的寄存器配置。 
编写test bench top文件,把这些模块连接起来,至此,仿真工程就全部写好了。 
三:仿真 
(1)vdma工作流程介绍 
第一步,对vdma寄存器进行配置,并打开使能,这时候vdma处于待命状态,什么时候开始传输呢,下面详细介绍 
对于S2MM通道:之前在讲vdma配置的时候有一个Advanced选项,里面有Fsync Options选项,可选none,s2mm_fsync,s2mm_tuer,三种同步模式。 
none就是只要vdma就绪,就立马准备接收数据,不需要同步信号。 
s2mm_fsync,当选择此模式时,vdma 模块会有一个s2mm_fsync引脚,一般情况下是把视频帧同步信号连到这上面,当检测到s2mm_fsync引脚有一个下降沿的时候,vdma正式进入传输状态。 
s2mm_tuer,这个信号和s2mm_fsync这个信号类似,但他是在stream协议里面的,vdma检测到s2mm_tuer拉高以后(tuser只在一帧数据的第一个像素位置拉高),正式进入传输状态 
对于MM2S通道,同样在vdma配置的Advanced选项里面有 none,mm2s_fsync两种选择模式。 
none不需要同步信号,只要axis_mm2s通道的tready拉高,就开始从ddr读取数据进行传输,选择这种模式一般主要是把ddr里面的数据读到pl里面进行处理,而不是转成视频 
mm2s_fsync,选择此同步模式,一般是把ddr的数据转成视频数据,注意,这里重点讲这个同步模式,当vdma的读通道选择此同步模式的时候,vdma模块会有一个mm2s_fsync信号,这个信号在读操作中非常重要。当vdma寄存器配置完成并开启传输,mm2s通道进入等待过程,一直等到mm2s引脚信号出现一个下降沿,这时候vdma启动读操作,会从ddr预读一些数据到内部linebuffer,等到axis_mm2s通道的tready信号拉高,数据就开始传输,进入axis2video模块的fifo,当axis2video内部fifo满了以后,会拉低tready,这时候就会反馈到vdma,暂停读操作,一直等到axis2video模块的视频时序输入数据有效信号,这时候视频开始输出,axis2video内部fifo数据减少,axis_mm2s通道开始恢复传输,继续从vdma读出数据,vdma再通过axi总线从ddr读取数据,如此反复,完成ddr数据到video数据的转换 
(2)仿真实践 
首先在vivado平台例化一个vdma ip,然后添加进上述的各个模块,代码层级如下: 
这里写图片描述 
在tb_top里面对各个模块做连接,这部分源码如下:

<code
 class="hljs fsharp has-numbering" style="display: block; padding: 0px; 
color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', 
monospace;font-size:undefined; white-space: pre; border-radius: 0px; 
word-wrap: normal; background: transparent;">`timescale <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span>ns / <span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span>ps
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: 
border-box;">//</span>
<span
 class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: 
border-box;">// </span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: 
border-box;">// Engineer: EEPROM</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: 
border-box;">// </span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: 
border-box;">//</span>


<span
 class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">module</span> tb_top();

reg reset = <span class="hljs-number" style="color: rgb(0, 102, 102);
 box-sizing: border-box;">1</span>'b1;
reg video_clk = <span class="hljs-number" style="color: rgb(0, 102, 
102); box-sizing: border-box;">1</span>'b0;
reg axis_clk = <span class="hljs-number" style="color: rgb(0, 102, 
102); box-sizing: border-box;">1</span>'b0;
reg axi_clk = <span class="hljs-number" style="color: rgb(0, 102, 
102); box-sizing: border-box;">1</span>'b0;
wire axi_lite_clk = video_clk;

wire sensor_vsync;
wire sensor_hsync;
wire sensor_de;
wire sensor_vblank;
wire [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">31</span>:<span class="hljs-number"
 style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]sensor_data;
wire [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">31</span>:<span class="hljs-number"
 style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]axis_s2mm_tdata;
wire axis_s2mm_tvalid;
wire axis_s2mm_tlast;
wire axis_s2mm_tuser;
wire axis_s2mm_tready;

wire [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">31</span>:<span class="hljs-number"
 style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]axis_mm2s_tdata;
wire axis_mm2s_tvalid;
wire axis_mm2s_tlast;
wire axis_mm2s_tuser;
wire axis_mm2s_tready;
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: 
border-box;">//axi lite</span>
wire [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">31</span>:<span class="hljs-number"
 style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]axi_lite_master_araddr;
wire [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">2</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]axi_lite_master_arprot;
wire axi_lite_master_arready;
wire axi_lite_master_arvalid;
wire [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">31</span>:<span class="hljs-number"
 style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]axi_lite_master_awaddr;
wire [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">2</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]axi_lite_master_awprot;
wire axi_lite_master_awready;
wire axi_lite_master_awvalid;
wire axi_lite_master_bready;
wire [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">1</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]axi_lite_master_bresp;
wire axi_lite_master_bvalid;
wire [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">31</span>:<span class="hljs-number"
 style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]axi_lite_master_rdata;
wire axi_lite_master_rready;
wire [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">1</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]axi_lite_master_rresp;
wire axi_lite_master_rvalid;
wire [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">31</span>:<span class="hljs-number"
 style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]axi_lite_master_wdata;
wire axi_lite_master_wready;
wire [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">3</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]axi_lite_master_wstrb;
wire axi_lite_master_wvalid;
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: 
border-box;">// axi</span>
wire   [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">31</span>:<span class="hljs-number"
 style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]   S_AXI_awaddr ;
wire   [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">1</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]    S_AXI_awburst;
wire   [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">3</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]    S_AXI_awcache;
wire   [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">5</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]    S_AXI_awid   ;
wire   [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">7</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]    S_AXI_awlen  ;
wire   [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">1</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]    S_AXI_awlock ;
wire   [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">2</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]    S_AXI_awprot ;
wire   [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">3</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]    S_AXI_awqos  ;
wire            S_AXI_awready;
wire   [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">2</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]    S_AXI_awsize ;
wire            S_AXI_awvalid;
wire   [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">5</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]    S_AXI_bid    ;
wire            S_AXI_bready ;
wire   [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">1</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]    S_AXI_bresp  ;
wire            S_AXI_bvalid ;
wire   [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">31</span>:<span class="hljs-number"
 style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]   S_AXI_wdata  ;
wire   [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">5</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]    S_AXI_wid    ;
wire            S_AXI_wlast  ;
wire            S_AXI_wready ;
wire   [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">3</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]    S_AXI_wstrb  ;
wire            S_AXI_wvalid ;
wire            S_AXI_arready;
wire            S_AXI_rlast;
wire            S_AXI_rvalid;
wire  [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">1</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]     S_AXI_rresp;
wire  [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">31</span>:<span class="hljs-number"
 style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]    S_AXI_rdata;
wire  [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">5</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]     S_AXI_rid;
wire            S_AXI_arvalid; 
wire            S_AXI_rready;
wire [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">1</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]      S_AXI_arburst;
wire [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">1</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]      S_AXI_arlock;
wire [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">2</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]      S_AXI_arsize;
wire [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">2</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]      S_AXI_arprot;
wire [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">31</span>:<span class="hljs-number"
 style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]     S_AXI_araddr;
wire [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">3</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]      S_AXI_arcache;
wire [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">7</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]      S_AXI_arlen;
wire [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">3</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]      S_AXI_arqos;
wire [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">5</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]      S_AXI_arid;

initial <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">begin</span>
#<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">100</span>;
reset=<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">0</span>;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">end</span>
always # <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">10</span> video_clk = ~video_clk;
always # <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">5</span> axis_clk = ~axis_clk;
always # <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">2</span> axi_clk = ~axi_clk;
sensor u_sensor
( 
    .rst     (reset), 
    .clk     (video_clk), 
    .vsync   (sensor_vsync), 
    .hsync   (sensor_hsync),
    .de      (sensor_de),
    .vblank  (sensor_vblank), 
    .pix_out (sensor_data)
);
video2axis u_video2axis
(
    .axis_clk       (axis_clk),
    .axis_aresetn   (!reset),
    .reg_axis_start (<span class="hljs-number" style="color: rgb(0, 
102, 102); box-sizing: border-box;">1</span>'b1),
    .m_axis_tdata   (axis_s2mm_tdata ),
    .m_axis_tkeep   (axis_s2mm_tkeep ),
    .m_axis_tvalid  (axis_s2mm_tvalid),
    .m_axis_tlast   (axis_s2mm_tlast ),
    .m_axis_tuser   (axis_s2mm_tuser ),
    .m_axis_tready  (axis_s2mm_tready),
    .video_clk      (video_clk),
    .video_rst      (reset),
    .video_hsync    (sensor_hsync),
    .video_vsync    (sensor_vsync),
    .video_hblank   (<span class="hljs-number" style="color: rgb(0, 
102, 102); box-sizing: border-box;">1</span>'b0),
    .video_vblank   (sensor_vblank),
    .video_de       (sensor_de),
    .video_data     (sensor_data)
);
wire vid_hsync_i;
wire vid_vsync_i;
wire vid_hblank_i;
wire vid_vblank_i;
wire vid_de_i;
wire vid_hsync_o;
wire vid_vsync_o;
wire vid_hblank_o;
wire vid_vblank_o;
wire vid_de_o;
wire [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">31</span>:<span class="hljs-number"
 style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>] vid_video_o;
video_timing_gen 
#(
    .SENSOR_ACT_W       (<span class="hljs-number" style="color: 
rgb(0, 102, 102); box-sizing: border-box;">640</span>),
    .SENSOR_ACT_H       (<span class="hljs-number" style="color: 
rgb(0, 102, 102); box-sizing: border-box;">480</span>),
    .SENSOR_WIDTH       (<span class="hljs-number" style="color: 
rgb(0, 102, 102); box-sizing: border-box;">800</span>),
    .SENSOR_HEIGHT      (<span class="hljs-number" style="color: 
rgb(0, 102, 102); box-sizing: border-box;">600</span>),
    .SENSOR_HSYNC_START (<span class="hljs-number" style="color: 
rgb(0, 102, 102); box-sizing: border-box;">0</span> ),
    .SENSOR_HSYNC_STOP  (<span class="hljs-number" style="color: 
rgb(0, 102, 102); box-sizing: border-box;">40</span>),
    .SENSOR_VSYNC_START (<span class="hljs-number" style="color: 
rgb(0, 102, 102); box-sizing: border-box;">0</span> ),
    .SENSOR_VSYNC_STOP  (<span class="hljs-number" style="color: 
rgb(0, 102, 102); box-sizing: border-box;">4</span> )
)
u_video_timing_gen
( 
    .rst_n       (!reset), 
    .video_clk   (video_clk), 
    .reg_h_start (<span class="hljs-number" style="color: rgb(0, 102,
 102); box-sizing: border-box;">80</span>),
    .reg_v_start (<span class="hljs-number" style="color: rgb(0, 102,
 102); box-sizing: border-box;">60</span>),
    .vsync       (vid_vsync_i), 
    .hsync       (vid_hsync_i),
    .de          (vid_de_i),
    .vblank      (vid_vblank_i),
    .hblank      (vid_hblank_i)
);
axis2video u_axis2video
(
    .axis_clk            (axis_clk),
    .axis_aresetn        (!reset),
    .reg_axis_mm2s_start (<span class="hljs-number" style="color: 
rgb(0, 102, 102); box-sizing: border-box;">1</span>'b1),
    .s_axis_tdata        (axis_mm2s_tdata),
    .s_axis_tvalid       (axis_mm2s_tvalid),
    .s_axis_tlast        (axis_mm2s_tlast),
    .s_axis_tuser        (axis_mm2s_tuser),
    .s_axis_tready       (axis_mm2s_tready),
    .video_clk           (video_clk),
    .video_rst           (reset),
    .video_hsync_i       (vid_hsync_i),
    .video_vsync_i       (vid_vsync_i),
    .video_hblank_i      (vid_hblank_i),
    .video_vblank_i      (vid_vblank_i),
    .video_de_i          (vid_de_i),
    .video_hsync_o       (vid_hsync_o),
    .video_vsync_o       (vid_vsync_o),
    .video_hblank_o      (vid_hblank_o),
    .video_vblank_o      (vid_vblank_o),
    .video_de_o          (vid_de_o),    
    .video_data          (vid_video_o)
);
axi_lite_master u_axi_lite_master 
(
   .M_AXI_ACLK    (axi_lite_clk           ), 
   .M_AXI_ARESETN (!reset ), 
   .M_AXI_AWADDR  (axi_lite_master_awaddr  ), <span 
class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: 
border-box;">//[8:0]</span>
   .M_AXI_AWPROT  (                 ),
   .M_AXI_AWVALID (axi_lite_master_awvalid ),
   .M_AXI_AWREADY (axi_lite_master_awready ),
   .M_AXI_WDATA   (axi_lite_master_wdata   ),
   .M_AXI_WSTRB   (                 ),
   .M_AXI_WVALID  (axi_lite_master_wvalid  ),
   .M_AXI_WREADY  (axi_lite_master_wready  ),
   .M_AXI_BRESP   (axi_lite_master_bresp   ),
   .M_AXI_BVALID  (axi_lite_master_bvalid  ),
   .M_AXI_BREADY  (axi_lite_master_bready  ),
   .M_AXI_ARADDR  (axi_lite_master_araddr  ), <span 
class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: 
border-box;">//[8:0]</span>
   .M_AXI_ARPROT  (                 ),
   .M_AXI_ARVALID (axi_lite_master_arvalid ),
   .M_AXI_ARREADY (axi_lite_master_arready ),
   .M_AXI_RDATA   (axi_lite_master_rdata   ),
   .M_AXI_RRESP   (axi_lite_master_rresp   ),
   .M_AXI_RVALID  (axi_lite_master_rvalid  ),
   .M_AXI_RREADY  (axi_lite_master_rready  ),
   .DDRX_PHY_INIT_DONE(<span class="hljs-number" style="color: rgb(0,
 102, 102); box-sizing: border-box;">1</span>'b1), 
   .DONE_SUCCESS  (                   )
);
axi_vdma_test u_axi_vdma_test (
  .s_axi_lite_aclk(axi_lite_clk), 
  .m_axi_mm2s_aclk(axi_clk),      
  .m_axis_mm2s_aclk(axis_clk),    
  .m_axi_s2mm_aclk(axi_clk),      
  .s_axis_s2mm_aclk(axis_clk),    
  .axi_resetn(!reset),            
  .s_axi_lite_awvalid(axi_lite_master_awvalid), 
  .s_axi_lite_awready(axi_lite_master_awready), 
  .s_axi_lite_awaddr (axi_lite_master_awaddr[<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">8</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]),
  .s_axi_lite_wvalid (axi_lite_master_wvalid),   
  .s_axi_lite_wready (axi_lite_master_wready),   
  .s_axi_lite_wdata  (axi_lite_master_wdata),    
  .s_axi_lite_bresp  (axi_lite_master_bresp),    
  .s_axi_lite_bvalid (axi_lite_master_bvalid),   
  .s_axi_lite_bready (axi_lite_master_bready),   
  .s_axi_lite_arvalid(axi_lite_master_arvalid),  
  .s_axi_lite_arready(axi_lite_master_arready),  
  .s_axi_lite_araddr (axi_lite_master_araddr[<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">8</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]), 
  .s_axi_lite_rvalid (axi_lite_master_rvalid),   
  .s_axi_lite_rready (axi_lite_master_rready),   
  .s_axi_lite_rdata  (axi_lite_master_rdata),    
  .s_axi_lite_rresp  (axi_lite_master_rresp),    
  <span class="hljs-comment" style="color: rgb(136, 0, 0); 
box-sizing: border-box;">//.s2mm_frame_ptr_in(),                     
     </span>
  <span class="hljs-comment" style="color: rgb(136, 0, 0); 
box-sizing: border-box;">//.s2mm_frame_ptr_out(),                    
     </span>
  .m_axi_s2mm_awaddr (S_AXI_awaddr),   
  .m_axi_s2mm_awlen  (S_AXI_awlen),    
  .m_axi_s2mm_awsize (S_AXI_awsize),   
  .m_axi_s2mm_awburst(S_AXI_awburst),  
  .m_axi_s2mm_awprot (S_AXI_awprot),   
  .m_axi_s2mm_awcache(S_AXI_awcache),  
  .m_axi_s2mm_awvalid(S_AXI_awvalid),  
  .m_axi_s2mm_awready(S_AXI_awready),  
  .m_axi_s2mm_wdata  (S_AXI_wdata),    
  .m_axi_s2mm_wstrb  (S_AXI_wstrb),    
  .m_axi_s2mm_wlast  (S_AXI_wlast),    
  .m_axi_s2mm_wvalid (S_AXI_wvalid),   
  .m_axi_s2mm_wready (S_AXI_wready),   
  .m_axi_s2mm_bresp  (S_AXI_bresp),    
  .m_axi_s2mm_bvalid (S_AXI_bvalid),   
  .m_axi_s2mm_bready (S_AXI_bready),   

  .m_axi_mm2s_araddr (S_AXI_araddr),   
  .m_axi_mm2s_arlen  (S_AXI_arlen),    
  .m_axi_mm2s_arsize (S_AXI_arsize),   
  .m_axi_mm2s_arburst(S_AXI_arburst),  
  .m_axi_mm2s_arprot (S_AXI_arprot),   
  .m_axi_mm2s_arcache(S_AXI_arcache),  
  .m_axi_mm2s_arvalid(S_AXI_arvalid),  
  .m_axi_mm2s_arready(S_AXI_arready),  
  .m_axi_mm2s_rdata  (S_AXI_rdata),    
  .m_axi_mm2s_rresp  (S_AXI_rresp),    
  .m_axi_mm2s_rlast  (S_AXI_rlast),    
  .m_axi_mm2s_rvalid (S_AXI_rvalid),   
  .m_axi_mm2s_rready (S_AXI_rready),   

  .s_axis_s2mm_tdata(axis_s2mm_tdata),    
  .s_axis_s2mm_tkeep(<span class="hljs-number" style="color: rgb(0, 
102, 102); box-sizing: border-box;">4</span>'b1111),           
 
  .s_axis_s2mm_tuser(axis_s2mm_tuser),    
  .s_axis_s2mm_tvalid(axis_s2mm_tvalid),  
  .s_axis_s2mm_tready(axis_s2mm_tready),  
  .s_axis_s2mm_tlast(axis_s2mm_tlast),    

  .m_axis_mm2s_tdata(axis_mm2s_tdata),  
  .m_axis_mm2s_tkeep(),  
  .m_axis_mm2s_tuser(axis_mm2s_tuser),  
  .m_axis_mm2s_tvalid(axis_mm2s_tvalid),
  .m_axis_mm2s_tready(axis_mm2s_tready),
  .m_axis_mm2s_tlast(axis_mm2s_tlast),  
  .mm2s_fsync(!vid_vsync_i),
  .s2mm_introut()                         
);
axi_slave u_axi_slave
(

  .S_AXI_ACLK      (axi_clk),
  .S_AXI_ARESETN   (!reset),
  .S_AXI_AWID      (S_AXI_awid   ),
  .S_AXI_AWADDR    (S_AXI_awaddr ),
  .S_AXI_AWLEN     (S_AXI_awlen  ),
  .S_AXI_AWSIZE    (S_AXI_awsize ),
  .S_AXI_AWBURST   (S_AXI_awburst),
  .S_AXI_AWVALID   (S_AXI_awvalid),
  .S_AXI_AWREADY   (S_AXI_awready),
  .S_AXI_WDATA     (S_AXI_wdata  ),
  .S_AXI_WSTRB     (S_AXI_wstrb  ),
  .S_AXI_WLAST     (S_AXI_wlast  ),
  .S_AXI_WVALID    (S_AXI_wvalid ),
  .S_AXI_WREADY    (S_AXI_wready ),
  .S_AXI_BID       (S_AXI_bid    ),
  .S_AXI_BRESP     (S_AXI_bresp  ),
  .S_AXI_BVALID    (S_AXI_bvalid ),
  .S_AXI_BREADY    (S_AXI_bready ),

  .S_AXI_ARID    (S_AXI_arid   ),
  .S_AXI_ARADDR  (S_AXI_araddr ),
  .S_AXI_ARLEN   ({<span class="hljs-number" style="color: rgb(0, 
102, 102); box-sizing: border-box;">4</span>'b0,S_AXI_arlen}  
),
  .S_AXI_ARSIZE  (S_AXI_arsize ),
  .S_AXI_ARBURST (S_AXI_arburst),
  .S_AXI_ARVALID (S_AXI_arvalid),
  .S_AXI_ARREADY (S_AXI_arready),
  .S_AXI_RID     (S_AXI_rid    ),
  .S_AXI_RDATA   (S_AXI_rdata  ),
  .S_AXI_RRESP   (S_AXI_rresp  ),
  .S_AXI_RLAST   (S_AXI_rlast  ),
  .S_AXI_RVALID  (S_AXI_rvalid ),
  .S_AXI_RREADY  (S_AXI_rready )
);

integer file_fd;
reg vblank_o_r;
reg [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">1</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>] frame_cnt=<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>;
always @(posedge video_clk) vblank_o_r <= vid_vblank_o;
always @(posedge video_clk)
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">begin</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">if</span>((~vblank_o_r) & 
vid_vblank_o)
        frame_cnt <= frame_cnt + <span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span>'b1;

<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">end</span>
initial <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">begin</span>
    file_fd = $fopen(<span class="hljs-string" style="color: rgb(0, 
136, 0); box-sizing: border-box;">"output.rgb"</span>,<span 
class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: 
border-box;">"wb"</span>);
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">end</span>
always @(posedge video_clk)
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">begin</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">if</span>(frame_cnt == <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span> && vid_de_o)
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">begin</span>
        $fwrite(file_fd,<span class="hljs-string" style="color: 
rgb(0, 136, 0); box-sizing: 
border-box;">"%c%c%c%c"</span>,vid_video_o[<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">31</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">24</span>],vid_video_o[<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">23</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">16</span>],vid_video_o[<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">15</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">8</span>],vid_video_o[<span class="hljs-number"
 style="color: rgb(0, 102, 102); box-sizing: 
border-box;">7</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]);
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">end</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">else</span> <span 
class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">if</span>(frame_cnt == <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">2</span>)
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">begin</span>
        $fclose(file_fd);
        $stop;
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">end</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">end</span>

endmodule
</code><ul class="pre-numbering" style="box-sizing: border-box;
 position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; 
padding: 6px 0px 40px; border-right-width: 1px; border-right-style: 
solid; border-right-color: rgb(221, 221, 221); list-style: none; 
text-align: right; background-color: rgb(238, 238, 238);"><li 
style="box-sizing: border-box; padding: 0px 5px;">1</li><li 
style="box-sizing: border-box; padding: 0px 5px;">2</li><li 
style="box-sizing: border-box; padding: 0px 5px;">3</li><li 
style="box-sizing: border-box; padding: 0px 5px;">4</li><li 
style="box-sizing: border-box; padding: 0px 5px;">5</li><li 
style="box-sizing: border-box; padding: 0px 5px;">6</li><li 
style="box-sizing: border-box; padding: 0px 5px;">7</li><li 
style="box-sizing: border-box; padding: 0px 5px;">8</li><li 
style="box-sizing: border-box; padding: 0px 5px;">9</li><li 
style="box-sizing: border-box; padding: 0px 5px;">10</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">11</li><li style="box-sizing: border-box; padding: 0px
 5px;">12</li><li style="box-sizing: border-box; padding: 
0px 5px;">13</li><li style="box-sizing: border-box; padding:
 0px 5px;">14</li><li style="box-sizing: border-box; 
padding: 0px 5px;">15</li><li style="box-sizing: border-box;
 padding: 0px 5px;">16</li><li style="box-sizing: 
border-box; padding: 0px 5px;">17</li><li style="box-sizing:
 border-box; padding: 0px 5px;">18</li><li 
style="box-sizing: border-box; padding: 0px 5px;">19</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">20</li><li style="box-sizing: border-box; padding: 0px
 5px;">21</li><li style="box-sizing: border-box; padding: 
0px 5px;">22</li><li style="box-sizing: border-box; padding:
 0px 5px;">23</li><li style="box-sizing: border-box; 
padding: 0px 5px;">24</li><li style="box-sizing: border-box;
 padding: 0px 5px;">25</li><li style="box-sizing: 
border-box; padding: 0px 5px;">26</li><li style="box-sizing:
 border-box; padding: 0px 5px;">27</li><li 
style="box-sizing: border-box; padding: 0px 5px;">28</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">29</li><li style="box-sizing: border-box; padding: 0px
 5px;">30</li><li style="box-sizing: border-box; padding: 
0px 5px;">31</li><li style="box-sizing: border-box; padding:
 0px 5px;">32</li><li style="box-sizing: border-box; 
padding: 0px 5px;">33</li><li style="box-sizing: border-box;
 padding: 0px 5px;">34</li><li style="box-sizing: 
border-box; padding: 0px 5px;">35</li><li style="box-sizing:
 border-box; padding: 0px 5px;">36</li><li 
style="box-sizing: border-box; padding: 0px 5px;">37</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">38</li><li style="box-sizing: border-box; padding: 0px
 5px;">39</li><li style="box-sizing: border-box; padding: 
0px 5px;">40</li><li style="box-sizing: border-box; padding:
 0px 5px;">41</li><li style="box-sizing: border-box; 
padding: 0px 5px;">42</li><li style="box-sizing: border-box;
 padding: 0px 5px;">43</li><li style="box-sizing: 
border-box; padding: 0px 5px;">44</li><li style="box-sizing:
 border-box; padding: 0px 5px;">45</li><li 
style="box-sizing: border-box; padding: 0px 5px;">46</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">47</li><li style="box-sizing: border-box; padding: 0px
 5px;">48</li><li style="box-sizing: border-box; padding: 
0px 5px;">49</li><li style="box-sizing: border-box; padding:
 0px 5px;">50</li><li style="box-sizing: border-box; 
padding: 0px 5px;">51</li><li style="box-sizing: border-box;
 padding: 0px 5px;">52</li><li style="box-sizing: 
border-box; padding: 0px 5px;">53</li><li style="box-sizing:
 border-box; padding: 0px 5px;">54</li><li 
style="box-sizing: border-box; padding: 0px 5px;">55</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">56</li><li style="box-sizing: border-box; padding: 0px
 5px;">57</li><li style="box-sizing: border-box; padding: 
0px 5px;">58</li><li style="box-sizing: border-box; padding:
 0px 5px;">59</li><li style="box-sizing: border-box; 
padding: 0px 5px;">60</li><li style="box-sizing: border-box;
 padding: 0px 5px;">61</li><li style="box-sizing: 
border-box; padding: 0px 5px;">62</li><li style="box-sizing:
 border-box; padding: 0px 5px;">63</li><li 
style="box-sizing: border-box; padding: 0px 5px;">64</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">65</li><li style="box-sizing: border-box; padding: 0px
 5px;">66</li><li style="box-sizing: border-box; padding: 
0px 5px;">67</li><li style="box-sizing: border-box; padding:
 0px 5px;">68</li><li style="box-sizing: border-box; 
padding: 0px 5px;">69</li><li style="box-sizing: border-box;
 padding: 0px 5px;">70</li><li style="box-sizing: 
border-box; padding: 0px 5px;">71</li><li style="box-sizing:
 border-box; padding: 0px 5px;">72</li><li 
style="box-sizing: border-box; padding: 0px 5px;">73</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">74</li><li style="box-sizing: border-box; padding: 0px
 5px;">75</li><li style="box-sizing: border-box; padding: 
0px 5px;">76</li><li style="box-sizing: border-box; padding:
 0px 5px;">77</li><li style="box-sizing: border-box; 
padding: 0px 5px;">78</li><li style="box-sizing: border-box;
 padding: 0px 5px;">79</li><li style="box-sizing: 
border-box; padding: 0px 5px;">80</li><li style="box-sizing:
 border-box; padding: 0px 5px;">81</li><li 
style="box-sizing: border-box; padding: 0px 5px;">82</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">83</li><li style="box-sizing: border-box; padding: 0px
 5px;">84</li><li style="box-sizing: border-box; padding: 
0px 5px;">85</li><li style="box-sizing: border-box; padding:
 0px 5px;">86</li><li style="box-sizing: border-box; 
padding: 0px 5px;">87</li><li style="box-sizing: border-box;
 padding: 0px 5px;">88</li><li style="box-sizing: 
border-box; padding: 0px 5px;">89</li><li style="box-sizing:
 border-box; padding: 0px 5px;">90</li><li 
style="box-sizing: border-box; padding: 0px 5px;">91</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">92</li><li style="box-sizing: border-box; padding: 0px
 5px;">93</li><li style="box-sizing: border-box; padding: 
0px 5px;">94</li><li style="box-sizing: border-box; padding:
 0px 5px;">95</li><li style="box-sizing: border-box; 
padding: 0px 5px;">96</li><li style="box-sizing: border-box;
 padding: 0px 5px;">97</li><li style="box-sizing: 
border-box; padding: 0px 5px;">98</li><li style="box-sizing:
 border-box; padding: 0px 5px;">99</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">100</li><li style="box-sizing: border-box; padding: 
0px 5px;">101</li><li style="box-sizing: border-box; 
padding: 0px 5px;">102</li><li style="box-sizing: 
border-box; padding: 0px 5px;">103</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">104</li><li style="box-sizing: border-box; padding: 
0px 5px;">105</li><li style="box-sizing: border-box; 
padding: 0px 5px;">106</li><li style="box-sizing: 
border-box; padding: 0px 5px;">107</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">108</li><li style="box-sizing: border-box; padding: 
0px 5px;">109</li><li style="box-sizing: border-box; 
padding: 0px 5px;">110</li><li style="box-sizing: 
border-box; padding: 0px 5px;">111</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">112</li><li style="box-sizing: border-box; padding: 
0px 5px;">113</li><li style="box-sizing: border-box; 
padding: 0px 5px;">114</li><li style="box-sizing: 
border-box; padding: 0px 5px;">115</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">116</li><li style="box-sizing: border-box; padding: 
0px 5px;">117</li><li style="box-sizing: border-box; 
padding: 0px 5px;">118</li><li style="box-sizing: 
border-box; padding: 0px 5px;">119</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">120</li><li style="box-sizing: border-box; padding: 
0px 5px;">121</li><li style="box-sizing: border-box; 
padding: 0px 5px;">122</li><li style="box-sizing: 
border-box; padding: 0px 5px;">123</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">124</li><li style="box-sizing: border-box; padding: 
0px 5px;">125</li><li style="box-sizing: border-box; 
padding: 0px 5px;">126</li><li style="box-sizing: 
border-box; padding: 0px 5px;">127</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">128</li><li style="box-sizing: border-box; padding: 
0px 5px;">129</li><li style="box-sizing: border-box; 
padding: 0px 5px;">130</li><li style="box-sizing: 
border-box; padding: 0px 5px;">131</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">132</li><li style="box-sizing: border-box; padding: 
0px 5px;">133</li><li style="box-sizing: border-box; 
padding: 0px 5px;">134</li><li style="box-sizing: 
border-box; padding: 0px 5px;">135</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">136</li><li style="box-sizing: border-box; padding: 
0px 5px;">137</li><li style="box-sizing: border-box; 
padding: 0px 5px;">138</li><li style="box-sizing: 
border-box; padding: 0px 5px;">139</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">140</li><li style="box-sizing: border-box; padding: 
0px 5px;">141</li><li style="box-sizing: border-box; 
padding: 0px 5px;">142</li><li style="box-sizing: 
border-box; padding: 0px 5px;">143</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">144</li><li style="box-sizing: border-box; padding: 
0px 5px;">145</li><li style="box-sizing: border-box; 
padding: 0px 5px;">146</li><li style="box-sizing: 
border-box; padding: 0px 5px;">147</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">148</li><li style="box-sizing: border-box; padding: 
0px 5px;">149</li><li style="box-sizing: border-box; 
padding: 0px 5px;">150</li><li style="box-sizing: 
border-box; padding: 0px 5px;">151</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">152</li><li style="box-sizing: border-box; padding: 
0px 5px;">153</li><li style="box-sizing: border-box; 
padding: 0px 5px;">154</li><li style="box-sizing: 
border-box; padding: 0px 5px;">155</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">156</li><li style="box-sizing: border-box; padding: 
0px 5px;">157</li><li style="box-sizing: border-box; 
padding: 0px 5px;">158</li><li style="box-sizing: 
border-box; padding: 0px 5px;">159</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">160</li><li style="box-sizing: border-box; padding: 
0px 5px;">161</li><li style="box-sizing: border-box; 
padding: 0px 5px;">162</li><li style="box-sizing: 
border-box; padding: 0px 5px;">163</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">164</li><li style="box-sizing: border-box; padding: 
0px 5px;">165</li><li style="box-sizing: border-box; 
padding: 0px 5px;">166</li><li style="box-sizing: 
border-box; padding: 0px 5px;">167</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">168</li><li style="box-sizing: border-box; padding: 
0px 5px;">169</li><li style="box-sizing: border-box; 
padding: 0px 5px;">170</li><li style="box-sizing: 
border-box; padding: 0px 5px;">171</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">172</li><li style="box-sizing: border-box; padding: 
0px 5px;">173</li><li style="box-sizing: border-box; 
padding: 0px 5px;">174</li><li style="box-sizing: 
border-box; padding: 0px 5px;">175</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">176</li><li style="box-sizing: border-box; padding: 
0px 5px;">177</li><li style="box-sizing: border-box; 
padding: 0px 5px;">178</li><li style="box-sizing: 
border-box; padding: 0px 5px;">179</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">180</li><li style="box-sizing: border-box; padding: 
0px 5px;">181</li><li style="box-sizing: border-box; 
padding: 0px 5px;">182</li><li style="box-sizing: 
border-box; padding: 0px 5px;">183</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">184</li><li style="box-sizing: border-box; padding: 
0px 5px;">185</li><li style="box-sizing: border-box; 
padding: 0px 5px;">186</li><li style="box-sizing: 
border-box; padding: 0px 5px;">187</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">188</li><li style="box-sizing: border-box; padding: 
0px 5px;">189</li><li style="box-sizing: border-box; 
padding: 0px 5px;">190</li><li style="box-sizing: 
border-box; padding: 0px 5px;">191</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">192</li><li style="box-sizing: border-box; padding: 
0px 5px;">193</li><li style="box-sizing: border-box; 
padding: 0px 5px;">194</li><li style="box-sizing: 
border-box; padding: 0px 5px;">195</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">196</li><li style="box-sizing: border-box; padding: 
0px 5px;">197</li><li style="box-sizing: border-box; 
padding: 0px 5px;">198</li><li style="box-sizing: 
border-box; padding: 0px 5px;">199</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">200</li><li style="box-sizing: border-box; padding: 
0px 5px;">201</li><li style="box-sizing: border-box; 
padding: 0px 5px;">202</li><li style="box-sizing: 
border-box; padding: 0px 5px;">203</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">204</li><li style="box-sizing: border-box; padding: 
0px 5px;">205</li><li style="box-sizing: border-box; 
padding: 0px 5px;">206</li><li style="box-sizing: 
border-box; padding: 0px 5px;">207</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">208</li><li style="box-sizing: border-box; padding: 
0px 5px;">209</li><li style="box-sizing: border-box; 
padding: 0px 5px;">210</li><li style="box-sizing: 
border-box; padding: 0px 5px;">211</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">212</li><li style="box-sizing: border-box; padding: 
0px 5px;">213</li><li style="box-sizing: border-box; 
padding: 0px 5px;">214</li><li style="box-sizing: 
border-box; padding: 0px 5px;">215</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">216</li><li style="box-sizing: border-box; padding: 
0px 5px;">217</li><li style="box-sizing: border-box; 
padding: 0px 5px;">218</li><li style="box-sizing: 
border-box; padding: 0px 5px;">219</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">220</li><li style="box-sizing: border-box; padding: 
0px 5px;">221</li><li style="box-sizing: border-box; 
padding: 0px 5px;">222</li><li style="box-sizing: 
border-box; padding: 0px 5px;">223</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">224</li><li style="box-sizing: border-box; padding: 
0px 5px;">225</li><li style="box-sizing: border-box; 
padding: 0px 5px;">226</li><li style="box-sizing: 
border-box; padding: 0px 5px;">227</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">228</li><li style="box-sizing: border-box; padding: 
0px 5px;">229</li><li style="box-sizing: border-box; 
padding: 0px 5px;">230</li><li style="box-sizing: 
border-box; padding: 0px 5px;">231</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">232</li><li style="box-sizing: border-box; padding: 
0px 5px;">233</li><li style="box-sizing: border-box; 
padding: 0px 5px;">234</li><li style="box-sizing: 
border-box; padding: 0px 5px;">235</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">236</li><li style="box-sizing: border-box; padding: 
0px 5px;">237</li><li style="box-sizing: border-box; 
padding: 0px 5px;">238</li><li style="box-sizing: 
border-box; padding: 0px 5px;">239</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">240</li><li style="box-sizing: border-box; padding: 
0px 5px;">241</li><li style="box-sizing: border-box; 
padding: 0px 5px;">242</li><li style="box-sizing: 
border-box; padding: 0px 5px;">243</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">244</li><li style="box-sizing: border-box; padding: 
0px 5px;">245</li><li style="box-sizing: border-box; 
padding: 0px 5px;">246</li><li style="box-sizing: 
border-box; padding: 0px 5px;">247</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">248</li><li style="box-sizing: border-box; padding: 
0px 5px;">249</li><li style="box-sizing: border-box; 
padding: 0px 5px;">250</li><li style="box-sizing: 
border-box; padding: 0px 5px;">251</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">252</li><li style="box-sizing: border-box; padding: 
0px 5px;">253</li><li style="box-sizing: border-box; 
padding: 0px 5px;">254</li><li style="box-sizing: 
border-box; padding: 0px 5px;">255</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">256</li><li style="box-sizing: border-box; padding: 
0px 5px;">257</li><li style="box-sizing: border-box; 
padding: 0px 5px;">258</li><li style="box-sizing: 
border-box; padding: 0px 5px;">259</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">260</li><li style="box-sizing: border-box; padding: 
0px 5px;">261</li><li style="box-sizing: border-box; 
padding: 0px 5px;">262</li><li style="box-sizing: 
border-box; padding: 0px 5px;">263</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">264</li><li style="box-sizing: border-box; padding: 
0px 5px;">265</li><li style="box-sizing: border-box; 
padding: 0px 5px;">266</li><li style="box-sizing: 
border-box; padding: 0px 5px;">267</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">268</li><li style="box-sizing: border-box; padding: 
0px 5px;">269</li><li style="box-sizing: border-box; 
padding: 0px 5px;">270</li><li style="box-sizing: 
border-box; padding: 0px 5px;">271</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">272</li><li style="box-sizing: border-box; padding: 
0px 5px;">273</li><li style="box-sizing: border-box; 
padding: 0px 5px;">274</li><li style="box-sizing: 
border-box; padding: 0px 5px;">275</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">276</li><li style="box-sizing: border-box; padding: 
0px 5px;">277</li><li style="box-sizing: border-box; 
padding: 0px 5px;">278</li><li style="box-sizing: 
border-box; padding: 0px 5px;">279</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">280</li><li style="box-sizing: border-box; padding: 
0px 5px;">281</li><li style="box-sizing: border-box; 
padding: 0px 5px;">282</li><li style="box-sizing: 
border-box; padding: 0px 5px;">283</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">284</li><li style="box-sizing: border-box; padding: 
0px 5px;">285</li><li style="box-sizing: border-box; 
padding: 0px 5px;">286</li><li style="box-sizing: 
border-box; padding: 0px 5px;">287</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">288</li><li style="box-sizing: border-box; padding: 
0px 5px;">289</li><li style="box-sizing: border-box; 
padding: 0px 5px;">290</li><li style="box-sizing: 
border-box; padding: 0px 5px;">291</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">292</li><li style="box-sizing: border-box; padding: 
0px 5px;">293</li><li style="box-sizing: border-box; 
padding: 0px 5px;">294</li><li style="box-sizing: 
border-box; padding: 0px 5px;">295</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">296</li><li style="box-sizing: border-box; padding: 
0px 5px;">297</li><li style="box-sizing: border-box; 
padding: 0px 5px;">298</li><li style="box-sizing: 
border-box; padding: 0px 5px;">299</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">300</li><li style="box-sizing: border-box; padding: 
0px 5px;">301</li><li style="box-sizing: border-box; 
padding: 0px 5px;">302</li><li style="box-sizing: 
border-box; padding: 0px 5px;">303</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">304</li><li style="box-sizing: border-box; padding: 
0px 5px;">305</li><li style="box-sizing: border-box; 
padding: 0px 5px;">306</li><li style="box-sizing: 
border-box; padding: 0px 5px;">307</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">308</li><li style="box-sizing: border-box; padding: 
0px 5px;">309</li><li style="box-sizing: border-box; 
padding: 0px 5px;">310</li><li style="box-sizing: 
border-box; padding: 0px 5px;">311</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">312</li><li style="box-sizing: border-box; padding: 
0px 5px;">313</li><li style="box-sizing: border-box; 
padding: 0px 5px;">314</li><li style="box-sizing: 
border-box; padding: 0px 5px;">315</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">316</li><li style="box-sizing: border-box; padding: 
0px 5px;">317</li><li style="box-sizing: border-box; 
padding: 0px 5px;">318</li><li style="box-sizing: 
border-box; padding: 0px 5px;">319</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">320</li><li style="box-sizing: border-box; padding: 
0px 5px;">321</li><li style="box-sizing: border-box; 
padding: 0px 5px;">322</li><li style="box-sizing: 
border-box; padding: 0px 5px;">323</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">324</li><li style="box-sizing: border-box; padding: 
0px 5px;">325</li><li style="box-sizing: border-box; 
padding: 0px 5px;">326</li><li style="box-sizing: 
border-box; padding: 0px 5px;">327</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">328</li><li style="box-sizing: border-box; padding: 
0px 5px;">329</li><li style="box-sizing: border-box; 
padding: 0px 5px;">330</li><li style="box-sizing: 
border-box; padding: 0px 5px;">331</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">332</li><li style="box-sizing: border-box; padding: 
0px 5px;">333</li><li style="box-sizing: border-box; 
padding: 0px 5px;">334</li><li style="box-sizing: 
border-box; padding: 0px 5px;">335</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">336</li><li style="box-sizing: border-box; padding: 
0px 5px;">337</li><li style="box-sizing: border-box; 
padding: 0px 5px;">338</li><li style="box-sizing: 
border-box; padding: 0px 5px;">339</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">340</li><li style="box-sizing: border-box; padding: 
0px 5px;">341</li><li style="box-sizing: border-box; 
padding: 0px 5px;">342</li><li style="box-sizing: 
border-box; padding: 0px 5px;">343</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">344</li><li style="box-sizing: border-box; padding: 
0px 5px;">345</li><li style="box-sizing: border-box; 
padding: 0px 5px;">346</li><li style="box-sizing: 
border-box; padding: 0px 5px;">347</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">348</li><li style="box-sizing: border-box; padding: 
0px 5px;">349</li><li style="box-sizing: border-box; 
padding: 0px 5px;">350</li></ul><ul 
class="pre-numbering" style="box-sizing: border-box; position: absolute;
 width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; 
border-right-width: 1px; border-right-style: solid; border-right-color: 
rgb(221, 221, 221); list-style: none; text-align: right; 
background-color: rgb(238, 238, 238);"><li style="box-sizing: 
border-box; padding: 0px 5px;">1</li><li style="box-sizing: 
border-box; padding: 0px 5px;">2</li><li style="box-sizing: 
border-box; padding: 0px 5px;">3</li><li style="box-sizing: 
border-box; padding: 0px 5px;">4</li><li style="box-sizing: 
border-box; padding: 0px 5px;">5</li><li style="box-sizing: 
border-box; padding: 0px 5px;">6</li><li style="box-sizing: 
border-box; padding: 0px 5px;">7</li><li style="box-sizing: 
border-box; padding: 0px 5px;">8</li><li style="box-sizing: 
border-box; padding: 0px 5px;">9</li><li style="box-sizing: 
border-box; padding: 0px 5px;">10</li><li style="box-sizing:
 border-box; padding: 0px 5px;">11</li><li 
style="box-sizing: border-box; padding: 0px 5px;">12</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">13</li><li style="box-sizing: border-box; padding: 0px
 5px;">14</li><li style="box-sizing: border-box; padding: 
0px 5px;">15</li><li style="box-sizing: border-box; padding:
 0px 5px;">16</li><li style="box-sizing: border-box; 
padding: 0px 5px;">17</li><li style="box-sizing: border-box;
 padding: 0px 5px;">18</li><li style="box-sizing: 
border-box; padding: 0px 5px;">19</li><li style="box-sizing:
 border-box; padding: 0px 5px;">20</li><li 
style="box-sizing: border-box; padding: 0px 5px;">21</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">22</li><li style="box-sizing: border-box; padding: 0px
 5px;">23</li><li style="box-sizing: border-box; padding: 
0px 5px;">24</li><li style="box-sizing: border-box; padding:
 0px 5px;">25</li><li style="box-sizing: border-box; 
padding: 0px 5px;">26</li><li style="box-sizing: border-box;
 padding: 0px 5px;">27</li><li style="box-sizing: 
border-box; padding: 0px 5px;">28</li><li style="box-sizing:
 border-box; padding: 0px 5px;">29</li><li 
style="box-sizing: border-box; padding: 0px 5px;">30</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">31</li><li style="box-sizing: border-box; padding: 0px
 5px;">32</li><li style="box-sizing: border-box; padding: 
0px 5px;">33</li><li style="box-sizing: border-box; padding:
 0px 5px;">34</li><li style="box-sizing: border-box; 
padding: 0px 5px;">35</li><li style="box-sizing: border-box;
 padding: 0px 5px;">36</li><li style="box-sizing: 
border-box; padding: 0px 5px;">37</li><li style="box-sizing:
 border-box; padding: 0px 5px;">38</li><li 
style="box-sizing: border-box; padding: 0px 5px;">39</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">40</li><li style="box-sizing: border-box; padding: 0px
 5px;">41</li><li style="box-sizing: border-box; padding: 
0px 5px;">42</li><li style="box-sizing: border-box; padding:
 0px 5px;">43</li><li style="box-sizing: border-box; 
padding: 0px 5px;">44</li><li style="box-sizing: border-box;
 padding: 0px 5px;">45</li><li style="box-sizing: 
border-box; padding: 0px 5px;">46</li><li style="box-sizing:
 border-box; padding: 0px 5px;">47</li><li 
style="box-sizing: border-box; padding: 0px 5px;">48</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">49</li><li style="box-sizing: border-box; padding: 0px
 5px;">50</li><li style="box-sizing: border-box; padding: 
0px 5px;">51</li><li style="box-sizing: border-box; padding:
 0px 5px;">52</li><li style="box-sizing: border-box; 
padding: 0px 5px;">53</li><li style="box-sizing: border-box;
 padding: 0px 5px;">54</li><li style="box-sizing: 
border-box; padding: 0px 5px;">55</li><li style="box-sizing:
 border-box; padding: 0px 5px;">56</li><li 
style="box-sizing: border-box; padding: 0px 5px;">57</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">58</li><li style="box-sizing: border-box; padding: 0px
 5px;">59</li><li style="box-sizing: border-box; padding: 
0px 5px;">60</li><li style="box-sizing: border-box; padding:
 0px 5px;">61</li><li style="box-sizing: border-box; 
padding: 0px 5px;">62</li><li style="box-sizing: border-box;
 padding: 0px 5px;">63</li><li style="box-sizing: 
border-box; padding: 0px 5px;">64</li><li style="box-sizing:
 border-box; padding: 0px 5px;">65</li><li 
style="box-sizing: border-box; padding: 0px 5px;">66</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">67</li><li style="box-sizing: border-box; padding: 0px
 5px;">68</li><li style="box-sizing: border-box; padding: 
0px 5px;">69</li><li style="box-sizing: border-box; padding:
 0px 5px;">70</li><li style="box-sizing: border-box; 
padding: 0px 5px;">71</li><li style="box-sizing: border-box;
 padding: 0px 5px;">72</li><li style="box-sizing: 
border-box; padding: 0px 5px;">73</li><li style="box-sizing:
 border-box; padding: 0px 5px;">74</li><li 
style="box-sizing: border-box; padding: 0px 5px;">75</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">76</li><li style="box-sizing: border-box; padding: 0px
 5px;">77</li><li style="box-sizing: border-box; padding: 
0px 5px;">78</li><li style="box-sizing: border-box; padding:
 0px 5px;">79</li><li style="box-sizing: border-box; 
padding: 0px 5px;">80</li><li style="box-sizing: border-box;
 padding: 0px 5px;">81</li><li style="box-sizing: 
border-box; padding: 0px 5px;">82</li><li style="box-sizing:
 border-box; padding: 0px 5px;">83</li><li 
style="box-sizing: border-box; padding: 0px 5px;">84</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">85</li><li style="box-sizing: border-box; padding: 0px
 5px;">86</li><li style="box-sizing: border-box; padding: 
0px 5px;">87</li><li style="box-sizing: border-box; padding:
 0px 5px;">88</li><li style="box-sizing: border-box; 
padding: 0px 5px;">89</li><li style="box-sizing: border-box;
 padding: 0px 5px;">90</li><li style="box-sizing: 
border-box; padding: 0px 5px;">91</li><li style="box-sizing:
 border-box; padding: 0px 5px;">92</li><li 
style="box-sizing: border-box; padding: 0px 5px;">93</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">94</li><li style="box-sizing: border-box; padding: 0px
 5px;">95</li><li style="box-sizing: border-box; padding: 
0px 5px;">96</li><li style="box-sizing: border-box; padding:
 0px 5px;">97</li><li style="box-sizing: border-box; 
padding: 0px 5px;">98</li><li style="box-sizing: border-box;
 padding: 0px 5px;">99</li><li style="box-sizing: 
border-box; padding: 0px 5px;">100</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">101</li><li style="box-sizing: border-box; padding: 
0px 5px;">102</li><li style="box-sizing: border-box; 
padding: 0px 5px;">103</li><li style="box-sizing: 
border-box; padding: 0px 5px;">104</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">105</li><li style="box-sizing: border-box; padding: 
0px 5px;">106</li><li style="box-sizing: border-box; 
padding: 0px 5px;">107</li><li style="box-sizing: 
border-box; padding: 0px 5px;">108</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">109</li><li style="box-sizing: border-box; padding: 
0px 5px;">110</li><li style="box-sizing: border-box; 
padding: 0px 5px;">111</li><li style="box-sizing: 
border-box; padding: 0px 5px;">112</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">113</li><li style="box-sizing: border-box; padding: 
0px 5px;">114</li><li style="box-sizing: border-box; 
padding: 0px 5px;">115</li><li style="box-sizing: 
border-box; padding: 0px 5px;">116</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">117</li><li style="box-sizing: border-box; padding: 
0px 5px;">118</li><li style="box-sizing: border-box; 
padding: 0px 5px;">119</li><li style="box-sizing: 
border-box; padding: 0px 5px;">120</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">121</li><li style="box-sizing: border-box; padding: 
0px 5px;">122</li><li style="box-sizing: border-box; 
padding: 0px 5px;">123</li><li style="box-sizing: 
border-box; padding: 0px 5px;">124</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">125</li><li style="box-sizing: border-box; padding: 
0px 5px;">126</li><li style="box-sizing: border-box; 
padding: 0px 5px;">127</li><li style="box-sizing: 
border-box; padding: 0px 5px;">128</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">129</li><li style="box-sizing: border-box; padding: 
0px 5px;">130</li><li style="box-sizing: border-box; 
padding: 0px 5px;">131</li><li style="box-sizing: 
border-box; padding: 0px 5px;">132</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">133</li><li style="box-sizing: border-box; padding: 
0px 5px;">134</li><li style="box-sizing: border-box; 
padding: 0px 5px;">135</li><li style="box-sizing: 
border-box; padding: 0px 5px;">136</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">137</li><li style="box-sizing: border-box; padding: 
0px 5px;">138</li><li style="box-sizing: border-box; 
padding: 0px 5px;">139</li><li style="box-sizing: 
border-box; padding: 0px 5px;">140</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">141</li><li style="box-sizing: border-box; padding: 
0px 5px;">142</li><li style="box-sizing: border-box; 
padding: 0px 5px;">143</li><li style="box-sizing: 
border-box; padding: 0px 5px;">144</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">145</li><li style="box-sizing: border-box; padding: 
0px 5px;">146</li><li style="box-sizing: border-box; 
padding: 0px 5px;">147</li><li style="box-sizing: 
border-box; padding: 0px 5px;">148</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">149</li><li style="box-sizing: border-box; padding: 
0px 5px;">150</li><li style="box-sizing: border-box; 
padding: 0px 5px;">151</li><li style="box-sizing: 
border-box; padding: 0px 5px;">152</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">153</li><li style="box-sizing: border-box; padding: 
0px 5px;">154</li><li style="box-sizing: border-box; 
padding: 0px 5px;">155</li><li style="box-sizing: 
border-box; padding: 0px 5px;">156</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">157</li><li style="box-sizing: border-box; padding: 
0px 5px;">158</li><li style="box-sizing: border-box; 
padding: 0px 5px;">159</li><li style="box-sizing: 
border-box; padding: 0px 5px;">160</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">161</li><li style="box-sizing: border-box; padding: 
0px 5px;">162</li><li style="box-sizing: border-box; 
padding: 0px 5px;">163</li><li style="box-sizing: 
border-box; padding: 0px 5px;">164</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">165</li><li style="box-sizing: border-box; padding: 
0px 5px;">166</li><li style="box-sizing: border-box; 
padding: 0px 5px;">167</li><li style="box-sizing: 
border-box; padding: 0px 5px;">168</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">169</li><li style="box-sizing: border-box; padding: 
0px 5px;">170</li><li style="box-sizing: border-box; 
padding: 0px 5px;">171</li><li style="box-sizing: 
border-box; padding: 0px 5px;">172</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">173</li><li style="box-sizing: border-box; padding: 
0px 5px;">174</li><li style="box-sizing: border-box; 
padding: 0px 5px;">175</li><li style="box-sizing: 
border-box; padding: 0px 5px;">176</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">177</li><li style="box-sizing: border-box; padding: 
0px 5px;">178</li><li style="box-sizing: border-box; 
padding: 0px 5px;">179</li><li style="box-sizing: 
border-box; padding: 0px 5px;">180</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">181</li><li style="box-sizing: border-box; padding: 
0px 5px;">182</li><li style="box-sizing: border-box; 
padding: 0px 5px;">183</li><li style="box-sizing: 
border-box; padding: 0px 5px;">184</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">185</li><li style="box-sizing: border-box; padding: 
0px 5px;">186</li><li style="box-sizing: border-box; 
padding: 0px 5px;">187</li><li style="box-sizing: 
border-box; padding: 0px 5px;">188</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">189</li><li style="box-sizing: border-box; padding: 
0px 5px;">190</li><li style="box-sizing: border-box; 
padding: 0px 5px;">191</li><li style="box-sizing: 
border-box; padding: 0px 5px;">192</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">193</li><li style="box-sizing: border-box; padding: 
0px 5px;">194</li><li style="box-sizing: border-box; 
padding: 0px 5px;">195</li><li style="box-sizing: 
border-box; padding: 0px 5px;">196</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">197</li><li style="box-sizing: border-box; padding: 
0px 5px;">198</li><li style="box-sizing: border-box; 
padding: 0px 5px;">199</li><li style="box-sizing: 
border-box; padding: 0px 5px;">200</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">201</li><li style="box-sizing: border-box; padding: 
0px 5px;">202</li><li style="box-sizing: border-box; 
padding: 0px 5px;">203</li><li style="box-sizing: 
border-box; padding: 0px 5px;">204</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">205</li><li style="box-sizing: border-box; padding: 
0px 5px;">206</li><li style="box-sizing: border-box; 
padding: 0px 5px;">207</li><li style="box-sizing: 
border-box; padding: 0px 5px;">208</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">209</li><li style="box-sizing: border-box; padding: 
0px 5px;">210</li><li style="box-sizing: border-box; 
padding: 0px 5px;">211</li><li style="box-sizing: 
border-box; padding: 0px 5px;">212</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">213</li><li style="box-sizing: border-box; padding: 
0px 5px;">214</li><li style="box-sizing: border-box; 
padding: 0px 5px;">215</li><li style="box-sizing: 
border-box; padding: 0px 5px;">216</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">217</li><li style="box-sizing: border-box; padding: 
0px 5px;">218</li><li style="box-sizing: border-box; 
padding: 0px 5px;">219</li><li style="box-sizing: 
border-box; padding: 0px 5px;">220</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">221</li><li style="box-sizing: border-box; padding: 
0px 5px;">222</li><li style="box-sizing: border-box; 
padding: 0px 5px;">223</li><li style="box-sizing: 
border-box; padding: 0px 5px;">224</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">225</li><li style="box-sizing: border-box; padding: 
0px 5px;">226</li><li style="box-sizing: border-box; 
padding: 0px 5px;">227</li><li style="box-sizing: 
border-box; padding: 0px 5px;">228</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">229</li><li style="box-sizing: border-box; padding: 
0px 5px;">230</li><li style="box-sizing: border-box; 
padding: 0px 5px;">231</li><li style="box-sizing: 
border-box; padding: 0px 5px;">232</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">233</li><li style="box-sizing: border-box; padding: 
0px 5px;">234</li><li style="box-sizing: border-box; 
padding: 0px 5px;">235</li><li style="box-sizing: 
border-box; padding: 0px 5px;">236</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">237</li><li style="box-sizing: border-box; padding: 
0px 5px;">238</li><li style="box-sizing: border-box; 
padding: 0px 5px;">239</li><li style="box-sizing: 
border-box; padding: 0px 5px;">240</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">241</li><li style="box-sizing: border-box; padding: 
0px 5px;">242</li><li style="box-sizing: border-box; 
padding: 0px 5px;">243</li><li style="box-sizing: 
border-box; padding: 0px 5px;">244</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">245</li><li style="box-sizing: border-box; padding: 
0px 5px;">246</li><li style="box-sizing: border-box; 
padding: 0px 5px;">247</li><li style="box-sizing: 
border-box; padding: 0px 5px;">248</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">249</li><li style="box-sizing: border-box; padding: 
0px 5px;">250</li><li style="box-sizing: border-box; 
padding: 0px 5px;">251</li><li style="box-sizing: 
border-box; padding: 0px 5px;">252</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">253</li><li style="box-sizing: border-box; padding: 
0px 5px;">254</li><li style="box-sizing: border-box; 
padding: 0px 5px;">255</li><li style="box-sizing: 
border-box; padding: 0px 5px;">256</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">257</li><li style="box-sizing: border-box; padding: 
0px 5px;">258</li><li style="box-sizing: border-box; 
padding: 0px 5px;">259</li><li style="box-sizing: 
border-box; padding: 0px 5px;">260</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">261</li><li style="box-sizing: border-box; padding: 
0px 5px;">262</li><li style="box-sizing: border-box; 
padding: 0px 5px;">263</li><li style="box-sizing: 
border-box; padding: 0px 5px;">264</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">265</li><li style="box-sizing: border-box; padding: 
0px 5px;">266</li><li style="box-sizing: border-box; 
padding: 0px 5px;">267</li><li style="box-sizing: 
border-box; padding: 0px 5px;">268</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">269</li><li style="box-sizing: border-box; padding: 
0px 5px;">270</li><li style="box-sizing: border-box; 
padding: 0px 5px;">271</li><li style="box-sizing: 
border-box; padding: 0px 5px;">272</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">273</li><li style="box-sizing: border-box; padding: 
0px 5px;">274</li><li style="box-sizing: border-box; 
padding: 0px 5px;">275</li><li style="box-sizing: 
border-box; padding: 0px 5px;">276</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">277</li><li style="box-sizing: border-box; padding: 
0px 5px;">278</li><li style="box-sizing: border-box; 
padding: 0px 5px;">279</li><li style="box-sizing: 
border-box; padding: 0px 5px;">280</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">281</li><li style="box-sizing: border-box; padding: 
0px 5px;">282</li><li style="box-sizing: border-box; 
padding: 0px 5px;">283</li><li style="box-sizing: 
border-box; padding: 0px 5px;">284</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">285</li><li style="box-sizing: border-box; padding: 
0px 5px;">286</li><li style="box-sizing: border-box; 
padding: 0px 5px;">287</li><li style="box-sizing: 
border-box; padding: 0px 5px;">288</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">289</li><li style="box-sizing: border-box; padding: 
0px 5px;">290</li><li style="box-sizing: border-box; 
padding: 0px 5px;">291</li><li style="box-sizing: 
border-box; padding: 0px 5px;">292</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">293</li><li style="box-sizing: border-box; padding: 
0px 5px;">294</li><li style="box-sizing: border-box; 
padding: 0px 5px;">295</li><li style="box-sizing: 
border-box; padding: 0px 5px;">296</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">297</li><li style="box-sizing: border-box; padding: 
0px 5px;">298</li><li style="box-sizing: border-box; 
padding: 0px 5px;">299</li><li style="box-sizing: 
border-box; padding: 0px 5px;">300</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">301</li><li style="box-sizing: border-box; padding: 
0px 5px;">302</li><li style="box-sizing: border-box; 
padding: 0px 5px;">303</li><li style="box-sizing: 
border-box; padding: 0px 5px;">304</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">305</li><li style="box-sizing: border-box; padding: 
0px 5px;">306</li><li style="box-sizing: border-box; 
padding: 0px 5px;">307</li><li style="box-sizing: 
border-box; padding: 0px 5px;">308</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">309</li><li style="box-sizing: border-box; padding: 
0px 5px;">310</li><li style="box-sizing: border-box; 
padding: 0px 5px;">311</li><li style="box-sizing: 
border-box; padding: 0px 5px;">312</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">313</li><li style="box-sizing: border-box; padding: 
0px 5px;">314</li><li style="box-sizing: border-box; 
padding: 0px 5px;">315</li><li style="box-sizing: 
border-box; padding: 0px 5px;">316</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">317</li><li style="box-sizing: border-box; padding: 
0px 5px;">318</li><li style="box-sizing: border-box; 
padding: 0px 5px;">319</li><li style="box-sizing: 
border-box; padding: 0px 5px;">320</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">321</li><li style="box-sizing: border-box; padding: 
0px 5px;">322</li><li style="box-sizing: border-box; 
padding: 0px 5px;">323</li><li style="box-sizing: 
border-box; padding: 0px 5px;">324</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">325</li><li style="box-sizing: border-box; padding: 
0px 5px;">326</li><li style="box-sizing: border-box; 
padding: 0px 5px;">327</li><li style="box-sizing: 
border-box; padding: 0px 5px;">328</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">329</li><li style="box-sizing: border-box; padding: 
0px 5px;">330</li><li style="box-sizing: border-box; 
padding: 0px 5px;">331</li><li style="box-sizing: 
border-box; padding: 0px 5px;">332</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">333</li><li style="box-sizing: border-box; padding: 
0px 5px;">334</li><li style="box-sizing: border-box; 
padding: 0px 5px;">335</li><li style="box-sizing: 
border-box; padding: 0px 5px;">336</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">337</li><li style="box-sizing: border-box; padding: 
0px 5px;">338</li><li style="box-sizing: border-box; 
padding: 0px 5px;">339</li><li style="box-sizing: 
border-box; padding: 0px 5px;">340</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">341</li><li style="box-sizing: border-box; padding: 
0px 5px;">342</li><li style="box-sizing: border-box; 
padding: 0px 5px;">343</li><li style="box-sizing: 
border-box; padding: 0px 5px;">344</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">345</li><li style="box-sizing: border-box; padding: 
0px 5px;">346</li><li style="box-sizing: border-box; 
padding: 0px 5px;">347</li><li style="box-sizing: 
border-box; padding: 0px 5px;">348</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">349</li><li style="box-sizing: border-box; padding: 
0px 5px;">350</li></ul>

接下来,就要准备仿真用数据了,我这里用matlab将一副图片的图像数据取出来,写成rgb文件,当做视频数据源

<code
 class="hljs matlab has-numbering" style="display: block; padding: 0px; 
color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', 
monospace;font-size:undefined; white-space: pre; border-radius: 0px; 
word-wrap: normal; background: transparent;">image=imread(<span 
class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: 
border-box;">'test.bmp'</span>);
image=imresize(image,<span class="hljs-matrix" style="box-sizing: 
border-box;">[<span class="hljs-number" style="color: rgb(0, 102, 
102); box-sizing: border-box;">480</span>,<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">640</span>]</span>);
imshow(image);
w=<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">640</span>;
h=<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">480</span>;
fd=fopen(<span class="hljs-string" style="color: rgb(0, 136, 0); 
box-sizing: border-box;">'input.rgb'</span>,<span 
class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: 
border-box;">'wb'</span>);
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">for</span> <span class="hljs-built_in" 
style="color: rgb(102, 0, 102); box-sizing: 
border-box;">i</span>=<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span>:h
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">for</span> <span 
class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: 
border-box;">j</span>=<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span>:w
        pix=<span class="hljs-matrix" style="box-sizing: 
border-box;">[<span class="hljs-number" style="color: rgb(0, 102, 
102); box-sizing: border-box;">0</span>,image(i,j,<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span>),image(i,j,<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">2</span>),image(i,j,<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">3</span>)]</span>;
        fwrite(fd,<span class="hljs-transposed_variable" 
style="box-sizing: border-box;">pix'</span>,<span 
class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: 
border-box;">'uint8'</span>);
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">end</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">end</span>
fclose(fd);</code><ul class="pre-numbering" style="box-sizing: 
border-box; position: absolute; width: 50px; top: 0px; left: 0px; 
margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; 
border-right-style: solid; border-right-color: rgb(221, 221, 221); 
list-style: none; text-align: right; background-color: rgb(238, 238, 
238);"><li style="box-sizing: border-box; padding: 0px 
5px;">1</li><li style="box-sizing: border-box; padding: 0px 
5px;">2</li><li style="box-sizing: border-box; padding: 0px 
5px;">3</li><li style="box-sizing: border-box; padding: 0px 
5px;">4</li><li style="box-sizing: border-box; padding: 0px 
5px;">5</li><li style="box-sizing: border-box; padding: 0px 
5px;">6</li><li style="box-sizing: border-box; padding: 0px 
5px;">7</li><li style="box-sizing: border-box; padding: 0px 
5px;">8</li><li style="box-sizing: border-box; padding: 0px 
5px;">9</li><li style="box-sizing: border-box; padding: 0px 
5px;">10</li><li style="box-sizing: border-box; padding: 0px
 5px;">11</li><li style="box-sizing: border-box; padding: 
0px 5px;">12</li><li style="box-sizing: border-box; padding:
 0px 5px;">13</li></ul><ul class="pre-numbering" 
style="box-sizing: border-box; position: absolute; width: 50px; top: 
0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 
1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); 
list-style: none; text-align: right; background-color: rgb(238, 238, 
238);"><li style="box-sizing: border-box; padding: 0px 
5px;">1</li><li style="box-sizing: border-box; padding: 0px 
5px;">2</li><li style="box-sizing: border-box; padding: 0px 
5px;">3</li><li style="box-sizing: border-box; padding: 0px 
5px;">4</li><li style="box-sizing: border-box; padding: 0px 
5px;">5</li><li style="box-sizing: border-box; padding: 0px 
5px;">6</li><li style="box-sizing: border-box; padding: 0px 
5px;">7</li><li style="box-sizing: border-box; padding: 0px 
5px;">8</li><li style="box-sizing: border-box; padding: 0px 
5px;">9</li><li style="box-sizing: border-box; padding: 0px 
5px;">10</li><li style="box-sizing: border-box; padding: 0px
 5px;">11</li><li style="box-sizing: border-box; padding: 
0px 5px;">12</li><li style="box-sizing: border-box; padding:
 0px 5px;">13</li></ul>

接下来在sensor模块里面读出这个图像数据,然后根据视频时序发出 
sensor.v代码

<code
 class="hljs vhdl has-numbering" style="display: block; padding: 0px; 
color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', 
monospace;font-size:undefined; white-space: pre; border-radius: 0px; 
word-wrap: normal; background: transparent;">`timescale <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span>ns / <span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span>ps
`timescale <span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">1</span>ns / <span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span>ps
//
//
 
// Engineer: EEPROM
// 
//
module
 sensor 
( 
    input rst, 
    input clk, 
    output reg vsync, 
    output reg hsync,
    output reg de,
    output reg vblank,
    output reg[<span class="hljs-number" style="color: rgb(0, 102, 
102); box-sizing: border-box;">31</span>:<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>]pix_out
);

parameter SENSOR_ACT_W = <span class="hljs-number" style="color: 
rgb(0, 102, 102); box-sizing: border-box;">640</span>;
parameter SENSOR_ACT_H = <span class="hljs-number" style="color: 
rgb(0, 102, 102); box-sizing: border-box;">480</span>;
parameter SENSOR_WIDTH = <span class="hljs-number" style="color: 
rgb(0, 102, 102); box-sizing: border-box;">800</span>;
parameter SENSOR_HEIGHT = <span class="hljs-number" style="color: 
rgb(0, 102, 102); box-sizing: border-box;">600</span>;
parameter H_START       = <span class="hljs-number" style="color: 
rgb(0, 102, 102); box-sizing: border-box;">80</span>; 
parameter V_START       = <span class="hljs-number" style="color: 
rgb(0, 102, 102); box-sizing: border-box;">60</span>; 

parameter DATA_SIZE = SENSOR_WIDTH*SENSOR_HEIGHT;
reg [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">12</span>:<span class="hljs-number"
 style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>] hcnt;
reg [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">12</span>:<span class="hljs-number"
 style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>] vcnt;

reg  [<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">31</span>:<span class="hljs-number"
 style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>] raw_array [DATA_SIZE-<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span>:<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>];
<span class="hljs-typename" style="color: rgb(102, 0, 102); 
box-sizing: border-box;">integer</span> i;
<span class="hljs-typename" style="color: rgb(102, 0, 102); 
box-sizing: border-box;">integer</span> file_hdl;

initial
  <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">begin</span>
    file_hdl = $fopen(<span class="hljs-string" style="color: rgb(0, 
136, 0); box-sizing: border-box;">"input.rgb"</span>, <span 
class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: 
border-box;">"rb"</span>);
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">for</span> ( i=<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>; i<DATA_SIZE; i=i+<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span>) <span class="hljs-keyword" 
style="color: rgb(0, 0, 136); box-sizing: 
border-box;">begin</span>
        raw_array[i][<span class="hljs-number" style="color: rgb(0, 
102, 102); box-sizing: border-box;">7</span>:<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>] = $fgetc(file_hdl);
        raw_array[i][<span class="hljs-number" style="color: rgb(0, 
102, 102); box-sizing: border-box;">15</span>:<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">8</span>] = $fgetc(file_hdl);
        raw_array[i][<span class="hljs-number" style="color: rgb(0, 
102, 102); box-sizing: border-box;">23</span>:<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">16</span>] = $fgetc(file_hdl);
        raw_array[i][<span class="hljs-number" style="color: rgb(0, 
102, 102); box-sizing: border-box;">31</span>:<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">24</span>] = $fgetc(file_hdl);
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">end</span> 
        $fclose(file_hdl);
        $display(<span class="hljs-string" style="color: rgb(0, 136, 
0); box-sizing: border-box;">"read raw data ok\n"</span>);
  <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">end</span>

always @(posedge clk)
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">begin</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">if</span>(rst)
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">begin</span>
        hcnt <= <span class="hljs-number" style="color: rgb(0, 
102, 102); box-sizing: border-box;">13</span><span 
class="hljs-attribute" style="box-sizing: 
border-box;">'d0</span>;
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">end</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">else</span> <span 
class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">if</span>(hcnt == SENSOR_WIDTH-<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span>)
        hcnt <= <span class="hljs-number" style="color: rgb(0, 
102, 102); box-sizing: border-box;">13</span><span 
class="hljs-attribute" style="box-sizing: 
border-box;">'d0</span>;
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">else</span> 
        hcnt <= hcnt + <span class="hljs-number" style="color: 
rgb(0, 102, 102); box-sizing: border-box;">1</span>;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">end</span>
always @(posedge clk)
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">begin</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">if</span>(rst)
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">begin</span>
        vcnt <= <span class="hljs-number" style="color: rgb(0, 
102, 102); box-sizing: border-box;">13</span><span 
class="hljs-attribute" style="box-sizing: 
border-box;">'d0</span>;
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">end</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">else</span> <span 
class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">if</span>(hcnt == SENSOR_WIDTH-<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span> && vcnt == SENSOR_HEIGHT-<span
 class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span>)
        vcnt <= <span class="hljs-number" style="color: rgb(0, 
102, 102); box-sizing: border-box;">13</span><span 
class="hljs-attribute" style="box-sizing: 
border-box;">'d0</span>;
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">else</span> <span 
class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">if</span>(hcnt == SENSOR_WIDTH-<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span>)
        vcnt <= vcnt + <span class="hljs-number" style="color: 
rgb(0, 102, 102); box-sizing: border-box;">1</span>;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">end</span>

always @(posedge clk)
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">begin</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">if</span>(rst)
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">begin</span>
        hsync <= <span class="hljs-number" style="color: rgb(0, 
102, 102); box-sizing: border-box;">1</span><span 
class="hljs-attribute" style="box-sizing: 
border-box;">'b0</span>;
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">end</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">else</span> <span 
class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">if</span>(hcnt <= <span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">13</span><span class="hljs-attribute" 
style="box-sizing: border-box;">'d40</span>)
        hsync <= <span class="hljs-number" style="color: rgb(0, 
102, 102); box-sizing: border-box;">1</span><span 
class="hljs-attribute" style="box-sizing: 
border-box;">'b1</span>;
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">else</span>
        hsync <= <span class="hljs-number" style="color: rgb(0, 
102, 102); box-sizing: border-box;">1</span><span 
class="hljs-attribute" style="box-sizing: 
border-box;">'b0</span>;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">end</span>
always @(posedge clk)
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">begin</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">if</span>(rst)
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">begin</span>
        de <= <span class="hljs-number" style="color: rgb(0, 102, 
102); box-sizing: border-box;">1</span><span 
class="hljs-attribute" style="box-sizing: 
border-box;">'b0</span>;
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">end</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">else</span> <span 
class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">if</span>(hcnt >= H_START && hcnt < 
H_START+SENSOR_ACT_W && vcnt >= V_START && vcnt < 
V_START+SENSOR_ACT_H )
        de <= <span class="hljs-number" style="color: rgb(0, 102, 
102); box-sizing: border-box;">1</span><span 
class="hljs-attribute" style="box-sizing: 
border-box;">'b1</span>;
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">else</span>
        de <= <span class="hljs-number" style="color: rgb(0, 102, 
102); box-sizing: border-box;">1</span><span 
class="hljs-attribute" style="box-sizing: 
border-box;">'b0</span>;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">end</span>
always @(posedge clk)
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">begin</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">if</span>(rst)
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">begin</span>
        vblank <= <span class="hljs-number" style="color: rgb(0, 
102, 102); box-sizing: border-box;">1</span><span 
class="hljs-attribute" style="box-sizing: 
border-box;">'b1</span>;
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">end</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">else</span> <span 
class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">if</span>(vcnt >= V_START-<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span> && vcnt <= 
V_START+SENSOR_ACT_H )
        vblank <= <span class="hljs-number" style="color: rgb(0, 
102, 102); box-sizing: border-box;">1</span><span 
class="hljs-attribute" style="box-sizing: 
border-box;">'b0</span>;
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">else</span>
        vblank <= <span class="hljs-number" style="color: rgb(0, 
102, 102); box-sizing: border-box;">1</span><span 
class="hljs-attribute" style="box-sizing: 
border-box;">'b1</span>;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">end</span>
always @(posedge clk)
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">begin</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">if</span>(rst)
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">begin</span>
        vsync <= <span class="hljs-number" style="color: rgb(0, 
102, 102); box-sizing: border-box;">1</span><span 
class="hljs-attribute" style="box-sizing: 
border-box;">'b0</span>;
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">end</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">else</span> <span 
class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">if</span>(vcnt <= <span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">4</span>)
        vsync <= <span class="hljs-number" style="color: rgb(0, 
102, 102); box-sizing: border-box;">1</span><span 
class="hljs-attribute" style="box-sizing: 
border-box;">'b1</span>;
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">else</span>
        vsync <= <span class="hljs-number" style="color: rgb(0, 
102, 102); box-sizing: border-box;">1</span><span 
class="hljs-attribute" style="box-sizing: 
border-box;">'b0</span>;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">end</span>

always @(posedge clk)
 pix_out <= (hcnt >= H_START &&hcnt < 
H_START+SENSOR_ACT_W && vcnt >= V_START && vcnt < 
V_START+SENSOR_ACT_H) ? 
raw_array[(vcnt-V_START)*SENSOR_ACT_W+hcnt-H_START]:<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">0</span>;
endmodule</code><ul class="pre-numbering" style="box-sizing: 
border-box; position: absolute; width: 50px; top: 0px; left: 0px; 
margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; 
border-right-style: solid; border-right-color: rgb(221, 221, 221); 
list-style: none; text-align: right; background-color: rgb(238, 238, 
238);"><li style="box-sizing: border-box; padding: 0px 
5px;">1</li><li style="box-sizing: border-box; padding: 0px 
5px;">2</li><li style="box-sizing: border-box; padding: 0px 
5px;">3</li><li style="box-sizing: border-box; padding: 0px 
5px;">4</li><li style="box-sizing: border-box; padding: 0px 
5px;">5</li><li style="box-sizing: border-box; padding: 0px 
5px;">6</li><li style="box-sizing: border-box; padding: 0px 
5px;">7</li><li style="box-sizing: border-box; padding: 0px 
5px;">8</li><li style="box-sizing: border-box; padding: 0px 
5px;">9</li><li style="box-sizing: border-box; padding: 0px 
5px;">10</li><li style="box-sizing: border-box; padding: 0px
 5px;">11</li><li style="box-sizing: border-box; padding: 
0px 5px;">12</li><li style="box-sizing: border-box; padding:
 0px 5px;">13</li><li style="box-sizing: border-box; 
padding: 0px 5px;">14</li><li style="box-sizing: border-box;
 padding: 0px 5px;">15</li><li style="box-sizing: 
border-box; padding: 0px 5px;">16</li><li style="box-sizing:
 border-box; padding: 0px 5px;">17</li><li 
style="box-sizing: border-box; padding: 0px 5px;">18</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">19</li><li style="box-sizing: border-box; padding: 0px
 5px;">20</li><li style="box-sizing: border-box; padding: 
0px 5px;">21</li><li style="box-sizing: border-box; padding:
 0px 5px;">22</li><li style="box-sizing: border-box; 
padding: 0px 5px;">23</li><li style="box-sizing: border-box;
 padding: 0px 5px;">24</li><li style="box-sizing: 
border-box; padding: 0px 5px;">25</li><li style="box-sizing:
 border-box; padding: 0px 5px;">26</li><li 
style="box-sizing: border-box; padding: 0px 5px;">27</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">28</li><li style="box-sizing: border-box; padding: 0px
 5px;">29</li><li style="box-sizing: border-box; padding: 
0px 5px;">30</li><li style="box-sizing: border-box; padding:
 0px 5px;">31</li><li style="box-sizing: border-box; 
padding: 0px 5px;">32</li><li style="box-sizing: border-box;
 padding: 0px 5px;">33</li><li style="box-sizing: 
border-box; padding: 0px 5px;">34</li><li style="box-sizing:
 border-box; padding: 0px 5px;">35</li><li 
style="box-sizing: border-box; padding: 0px 5px;">36</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">37</li><li style="box-sizing: border-box; padding: 0px
 5px;">38</li><li style="box-sizing: border-box; padding: 
0px 5px;">39</li><li style="box-sizing: border-box; padding:
 0px 5px;">40</li><li style="box-sizing: border-box; 
padding: 0px 5px;">41</li><li style="box-sizing: border-box;
 padding: 0px 5px;">42</li><li style="box-sizing: 
border-box; padding: 0px 5px;">43</li><li style="box-sizing:
 border-box; padding: 0px 5px;">44</li><li 
style="box-sizing: border-box; padding: 0px 5px;">45</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">46</li><li style="box-sizing: border-box; padding: 0px
 5px;">47</li><li style="box-sizing: border-box; padding: 
0px 5px;">48</li><li style="box-sizing: border-box; padding:
 0px 5px;">49</li><li style="box-sizing: border-box; 
padding: 0px 5px;">50</li><li style="box-sizing: border-box;
 padding: 0px 5px;">51</li><li style="box-sizing: 
border-box; padding: 0px 5px;">52</li><li style="box-sizing:
 border-box; padding: 0px 5px;">53</li><li 
style="box-sizing: border-box; padding: 0px 5px;">54</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">55</li><li style="box-sizing: border-box; padding: 0px
 5px;">56</li><li style="box-sizing: border-box; padding: 
0px 5px;">57</li><li style="box-sizing: border-box; padding:
 0px 5px;">58</li><li style="box-sizing: border-box; 
padding: 0px 5px;">59</li><li style="box-sizing: border-box;
 padding: 0px 5px;">60</li><li style="box-sizing: 
border-box; padding: 0px 5px;">61</li><li style="box-sizing:
 border-box; padding: 0px 5px;">62</li><li 
style="box-sizing: border-box; padding: 0px 5px;">63</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">64</li><li style="box-sizing: border-box; padding: 0px
 5px;">65</li><li style="box-sizing: border-box; padding: 
0px 5px;">66</li><li style="box-sizing: border-box; padding:
 0px 5px;">67</li><li style="box-sizing: border-box; 
padding: 0px 5px;">68</li><li style="box-sizing: border-box;
 padding: 0px 5px;">69</li><li style="box-sizing: 
border-box; padding: 0px 5px;">70</li><li style="box-sizing:
 border-box; padding: 0px 5px;">71</li><li 
style="box-sizing: border-box; padding: 0px 5px;">72</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">73</li><li style="box-sizing: border-box; padding: 0px
 5px;">74</li><li style="box-sizing: border-box; padding: 
0px 5px;">75</li><li style="box-sizing: border-box; padding:
 0px 5px;">76</li><li style="box-sizing: border-box; 
padding: 0px 5px;">77</li><li style="box-sizing: border-box;
 padding: 0px 5px;">78</li><li style="box-sizing: 
border-box; padding: 0px 5px;">79</li><li style="box-sizing:
 border-box; padding: 0px 5px;">80</li><li 
style="box-sizing: border-box; padding: 0px 5px;">81</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">82</li><li style="box-sizing: border-box; padding: 0px
 5px;">83</li><li style="box-sizing: border-box; padding: 
0px 5px;">84</li><li style="box-sizing: border-box; padding:
 0px 5px;">85</li><li style="box-sizing: border-box; 
padding: 0px 5px;">86</li><li style="box-sizing: border-box;
 padding: 0px 5px;">87</li><li style="box-sizing: 
border-box; padding: 0px 5px;">88</li><li style="box-sizing:
 border-box; padding: 0px 5px;">89</li><li 
style="box-sizing: border-box; padding: 0px 5px;">90</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">91</li><li style="box-sizing: border-box; padding: 0px
 5px;">92</li><li style="box-sizing: border-box; padding: 
0px 5px;">93</li><li style="box-sizing: border-box; padding:
 0px 5px;">94</li><li style="box-sizing: border-box; 
padding: 0px 5px;">95</li><li style="box-sizing: border-box;
 padding: 0px 5px;">96</li><li style="box-sizing: 
border-box; padding: 0px 5px;">97</li><li style="box-sizing:
 border-box; padding: 0px 5px;">98</li><li 
style="box-sizing: border-box; padding: 0px 5px;">99</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">100</li><li style="box-sizing: border-box; padding: 
0px 5px;">101</li><li style="box-sizing: border-box; 
padding: 0px 5px;">102</li><li style="box-sizing: 
border-box; padding: 0px 5px;">103</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">104</li><li style="box-sizing: border-box; padding: 
0px 5px;">105</li><li style="box-sizing: border-box; 
padding: 0px 5px;">106</li><li style="box-sizing: 
border-box; padding: 0px 5px;">107</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">108</li><li style="box-sizing: border-box; padding: 
0px 5px;">109</li><li style="box-sizing: border-box; 
padding: 0px 5px;">110</li><li style="box-sizing: 
border-box; padding: 0px 5px;">111</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">112</li><li style="box-sizing: border-box; padding: 
0px 5px;">113</li><li style="box-sizing: border-box; 
padding: 0px 5px;">114</li><li style="box-sizing: 
border-box; padding: 0px 5px;">115</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">116</li><li style="box-sizing: border-box; padding: 
0px 5px;">117</li></ul><ul class="pre-numbering" 
style="box-sizing: border-box; position: absolute; width: 50px; top: 
0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 
1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); 
list-style: none; text-align: right; background-color: rgb(238, 238, 
238);"><li style="box-sizing: border-box; padding: 0px 
5px;">1</li><li style="box-sizing: border-box; padding: 0px 
5px;">2</li><li style="box-sizing: border-box; padding: 0px 
5px;">3</li><li style="box-sizing: border-box; padding: 0px 
5px;">4</li><li style="box-sizing: border-box; padding: 0px 
5px;">5</li><li style="box-sizing: border-box; padding: 0px 
5px;">6</li><li style="box-sizing: border-box; padding: 0px 
5px;">7</li><li style="box-sizing: border-box; padding: 0px 
5px;">8</li><li style="box-sizing: border-box; padding: 0px 
5px;">9</li><li style="box-sizing: border-box; padding: 0px 
5px;">10</li><li style="box-sizing: border-box; padding: 0px
 5px;">11</li><li style="box-sizing: border-box; padding: 
0px 5px;">12</li><li style="box-sizing: border-box; padding:
 0px 5px;">13</li><li style="box-sizing: border-box; 
padding: 0px 5px;">14</li><li style="box-sizing: border-box;
 padding: 0px 5px;">15</li><li style="box-sizing: 
border-box; padding: 0px 5px;">16</li><li style="box-sizing:
 border-box; padding: 0px 5px;">17</li><li 
style="box-sizing: border-box; padding: 0px 5px;">18</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">19</li><li style="box-sizing: border-box; padding: 0px
 5px;">20</li><li style="box-sizing: border-box; padding: 
0px 5px;">21</li><li style="box-sizing: border-box; padding:
 0px 5px;">22</li><li style="box-sizing: border-box; 
padding: 0px 5px;">23</li><li style="box-sizing: border-box;
 padding: 0px 5px;">24</li><li style="box-sizing: 
border-box; padding: 0px 5px;">25</li><li style="box-sizing:
 border-box; padding: 0px 5px;">26</li><li 
style="box-sizing: border-box; padding: 0px 5px;">27</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">28</li><li style="box-sizing: border-box; padding: 0px
 5px;">29</li><li style="box-sizing: border-box; padding: 
0px 5px;">30</li><li style="box-sizing: border-box; padding:
 0px 5px;">31</li><li style="box-sizing: border-box; 
padding: 0px 5px;">32</li><li style="box-sizing: border-box;
 padding: 0px 5px;">33</li><li style="box-sizing: 
border-box; padding: 0px 5px;">34</li><li style="box-sizing:
 border-box; padding: 0px 5px;">35</li><li 
style="box-sizing: border-box; padding: 0px 5px;">36</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">37</li><li style="box-sizing: border-box; padding: 0px
 5px;">38</li><li style="box-sizing: border-box; padding: 
0px 5px;">39</li><li style="box-sizing: border-box; padding:
 0px 5px;">40</li><li style="box-sizing: border-box; 
padding: 0px 5px;">41</li><li style="box-sizing: border-box;
 padding: 0px 5px;">42</li><li style="box-sizing: 
border-box; padding: 0px 5px;">43</li><li style="box-sizing:
 border-box; padding: 0px 5px;">44</li><li 
style="box-sizing: border-box; padding: 0px 5px;">45</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">46</li><li style="box-sizing: border-box; padding: 0px
 5px;">47</li><li style="box-sizing: border-box; padding: 
0px 5px;">48</li><li style="box-sizing: border-box; padding:
 0px 5px;">49</li><li style="box-sizing: border-box; 
padding: 0px 5px;">50</li><li style="box-sizing: border-box;
 padding: 0px 5px;">51</li><li style="box-sizing: 
border-box; padding: 0px 5px;">52</li><li style="box-sizing:
 border-box; padding: 0px 5px;">53</li><li 
style="box-sizing: border-box; padding: 0px 5px;">54</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">55</li><li style="box-sizing: border-box; padding: 0px
 5px;">56</li><li style="box-sizing: border-box; padding: 
0px 5px;">57</li><li style="box-sizing: border-box; padding:
 0px 5px;">58</li><li style="box-sizing: border-box; 
padding: 0px 5px;">59</li><li style="box-sizing: border-box;
 padding: 0px 5px;">60</li><li style="box-sizing: 
border-box; padding: 0px 5px;">61</li><li style="box-sizing:
 border-box; padding: 0px 5px;">62</li><li 
style="box-sizing: border-box; padding: 0px 5px;">63</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">64</li><li style="box-sizing: border-box; padding: 0px
 5px;">65</li><li style="box-sizing: border-box; padding: 
0px 5px;">66</li><li style="box-sizing: border-box; padding:
 0px 5px;">67</li><li style="box-sizing: border-box; 
padding: 0px 5px;">68</li><li style="box-sizing: border-box;
 padding: 0px 5px;">69</li><li style="box-sizing: 
border-box; padding: 0px 5px;">70</li><li style="box-sizing:
 border-box; padding: 0px 5px;">71</li><li 
style="box-sizing: border-box; padding: 0px 5px;">72</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">73</li><li style="box-sizing: border-box; padding: 0px
 5px;">74</li><li style="box-sizing: border-box; padding: 
0px 5px;">75</li><li style="box-sizing: border-box; padding:
 0px 5px;">76</li><li style="box-sizing: border-box; 
padding: 0px 5px;">77</li><li style="box-sizing: border-box;
 padding: 0px 5px;">78</li><li style="box-sizing: 
border-box; padding: 0px 5px;">79</li><li style="box-sizing:
 border-box; padding: 0px 5px;">80</li><li 
style="box-sizing: border-box; padding: 0px 5px;">81</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">82</li><li style="box-sizing: border-box; padding: 0px
 5px;">83</li><li style="box-sizing: border-box; padding: 
0px 5px;">84</li><li style="box-sizing: border-box; padding:
 0px 5px;">85</li><li style="box-sizing: border-box; 
padding: 0px 5px;">86</li><li style="box-sizing: border-box;
 padding: 0px 5px;">87</li><li style="box-sizing: 
border-box; padding: 0px 5px;">88</li><li style="box-sizing:
 border-box; padding: 0px 5px;">89</li><li 
style="box-sizing: border-box; padding: 0px 5px;">90</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">91</li><li style="box-sizing: border-box; padding: 0px
 5px;">92</li><li style="box-sizing: border-box; padding: 
0px 5px;">93</li><li style="box-sizing: border-box; padding:
 0px 5px;">94</li><li style="box-sizing: border-box; 
padding: 0px 5px;">95</li><li style="box-sizing: border-box;
 padding: 0px 5px;">96</li><li style="box-sizing: 
border-box; padding: 0px 5px;">97</li><li style="box-sizing:
 border-box; padding: 0px 5px;">98</li><li 
style="box-sizing: border-box; padding: 0px 5px;">99</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">100</li><li style="box-sizing: border-box; padding: 
0px 5px;">101</li><li style="box-sizing: border-box; 
padding: 0px 5px;">102</li><li style="box-sizing: 
border-box; padding: 0px 5px;">103</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">104</li><li style="box-sizing: border-box; padding: 
0px 5px;">105</li><li style="box-sizing: border-box; 
padding: 0px 5px;">106</li><li style="box-sizing: 
border-box; padding: 0px 5px;">107</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">108</li><li style="box-sizing: border-box; padding: 
0px 5px;">109</li><li style="box-sizing: border-box; 
padding: 0px 5px;">110</li><li style="box-sizing: 
border-box; padding: 0px 5px;">111</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">112</li><li style="box-sizing: border-box; padding: 
0px 5px;">113</li><li style="box-sizing: border-box; 
padding: 0px 5px;">114</li><li style="box-sizing: 
border-box; padding: 0px 5px;">115</li><li 
style="box-sizing: border-box; padding: 0px 
5px;">116</li><li style="box-sizing: border-box; padding: 
0px 5px;">117</li></ul>

视频数据源有了,那么为了验证vdma工作正常,即视频数据读写ddr正常,就需要把读回来的数据也存储一下,代码在tb_top最后有写,至于为什么要等fram_cnt为1的时候开始写,那是因为我做的是一个乒乓buffer,vdma读出来的第一帧数据是无效数据,第二帧开始才是有效数据。 
代码都准备完毕,开始仿真,我这里调用的modelsim,vivado如果使用modelsim仿真,这里不做介绍,网上搜一下资料还是比较多的 
仿真关键信号时序: 
这里写图片描述
这里面是做两帧的仿真,牢骚一句,仿真真的太慢了 
仿真结束以后,会把从DDR读回来的视频数据存储到output.rbg文件里面,还是用matlab对这个数据做处理:

<code
 class="hljs matlab has-numbering" style="display: block; padding: 0px; 
color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', 
monospace;font-size:undefined; white-space: pre; border-radius: 0px; 
word-wrap: normal; background: transparent;">w=<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">640</span>;
h=<span class="hljs-number" style="color: rgb(0, 102, 102); 
box-sizing: border-box;">480</span>;
dst = <span class="hljs-built_in" style="color: rgb(102, 0, 102); 
box-sizing: border-box;">zeros</span>(h,w);
fd=fopen(<span class="hljs-string" style="color: rgb(0, 136, 0); 
box-sizing: border-box;">'output.rgb'</span>,<span 
class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: 
border-box;">'r'</span>);
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">for</span> <span class="hljs-built_in" 
style="color: rgb(102, 0, 102); box-sizing: 
border-box;">i</span>=<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span>:h
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">for</span> <span 
class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: 
border-box;">j</span>=<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span>:w
        <span class="hljs-comment" style="color: rgb(136, 0, 0); 
box-sizing: 
border-box;">%pix=[0,image(i,j,1),image(i,j,2),image(i,j,3)];</span>

        pix=fread(fd,<span class="hljs-matrix" style="box-sizing: 
border-box;">[<span class="hljs-number" style="color: rgb(0, 102, 
102); box-sizing: border-box;">1</span>,<span 
class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: 
border-box;">4</span>]</span>,<span 
class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: 
border-box;">'uint8'</span>);
        dst(<span class="hljs-built_in" style="color: rgb(102, 0, 
102); box-sizing: border-box;">i</span>,<span 
class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: 
border-box;">j</span>)=pix(<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">3</span>);
        dst(<span class="hljs-built_in" style="color: rgb(102, 0, 
102); box-sizing: border-box;">i</span>,<span 
class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: 
border-box;">j</span>,<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">2</span>)=pix(<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">2</span>);
        dst(<span class="hljs-built_in" style="color: rgb(102, 0, 
102); box-sizing: border-box;">i</span>,<span 
class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: 
border-box;">j</span>,<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">3</span>)=pix(<span class="hljs-number" 
style="color: rgb(0, 102, 102); box-sizing: 
border-box;">1</span>);
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); 
box-sizing: border-box;">end</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: 
border-box;">end</span>
fclose(fd);
figure
imshow(uint8(dst));</code><ul class="pre-numbering" 
style="box-sizing: border-box; position: absolute; width: 50px; top: 
0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 
1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); 
list-style: none; text-align: right; background-color: rgb(238, 238, 
238);"><li style="box-sizing: border-box; padding: 0px 
5px;">1</li><li style="box-sizing: border-box; padding: 0px 
5px;">2</li><li style="box-sizing: border-box; padding: 0px 
5px;">3</li><li style="box-sizing: border-box; padding: 0px 
5px;">4</li><li style="box-sizing: border-box; padding: 0px 
5px;">5</li><li style="box-sizing: border-box; padding: 0px 
5px;">6</li><li style="box-sizing: border-box; padding: 0px 
5px;">7</li><li style="box-sizing: border-box; padding: 0px 
5px;">8</li><li style="box-sizing: border-box; padding: 0px 
5px;">9</li><li style="box-sizing: border-box; padding: 0px 
5px;">10</li><li style="box-sizing: border-box; padding: 0px
 5px;">11</li><li style="box-sizing: border-box; padding: 
0px 5px;">12</li><li style="box-sizing: border-box; padding:
 0px 5px;">13</li><li style="box-sizing: border-box; 
padding: 0px 5px;">14</li><li style="box-sizing: border-box;
 padding: 0px 5px;">15</li><li style="box-sizing: 
border-box; padding: 0px 5px;">16</li></ul><ul 
class="pre-numbering" style="box-sizing: border-box; position: absolute;
 width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; 
border-right-width: 1px; border-right-style: solid; border-right-color: 
rgb(221, 221, 221); list-style: none; text-align: right; 
background-color: rgb(238, 238, 238);"><li style="box-sizing: 
border-box; padding: 0px 5px;">1</li><li style="box-sizing: 
border-box; padding: 0px 5px;">2</li><li style="box-sizing: 
border-box; padding: 0px 5px;">3</li><li style="box-sizing: 
border-box; padding: 0px 5px;">4</li><li style="box-sizing: 
border-box; padding: 0px 5px;">5</li><li style="box-sizing: 
border-box; padding: 0px 5px;">6</li><li style="box-sizing: 
border-box; padding: 0px 5px;">7</li><li style="box-sizing: 
border-box; padding: 0px 5px;">8</li><li style="box-sizing: 
border-box; padding: 0px 5px;">9</li><li style="box-sizing: 
border-box; padding: 0px 5px;">10</li><li style="box-sizing:
 border-box; padding: 0px 5px;">11</li><li 
style="box-sizing: border-box; padding: 0px 5px;">12</li><li
 style="box-sizing: border-box; padding: 0px 
5px;">13</li><li style="box-sizing: border-box; padding: 0px
 5px;">14</li><li style="box-sizing: border-box; padding: 
0px 5px;">15</li><li style="box-sizing: border-box; padding:
 0px 5px;">16</li></ul>

下面是输入图片和输出图片对比: 
这里写图片描述
可见vdma工作正常 
四:总结 
通过对vdma的仿真,可以更深入的了解vdma的工作原理,工作流程,给实际应用做好准备工作。同时,这么做也有更多的意义,对于一些需要DDR缓存才能完成的图像算法,比如视频3D降噪,运动物体检测帧差法,HDR图像合成等等,完全可以在此基础上进行仿真,能更大程度的模拟FPGA实际工作状况,提高算法移植效率。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vivado是一款由Xilinx公司开发的集成电路设计软件,专门用于FPGA(可编程逻辑门阵列)的设计和开发。Vivado具有强大的功能和广泛的应用领域,可以应对各种不同的设计需求。 Zynq HP是一款由Xilinx公司设计的基于ARM处理器和FPGA系统级芯片。它集成了ARM Cortex-A9处理器和FPGA,提供了强大的处理能力和灵活的可编程性。Zynq HP不仅可以在FPGA中实现硬件逻辑的设计,还可以借助ARM处理器实现复杂的软件开发和嵌入式系统设计。 使用Vivado进行Zynq HP开发可以实现更高效、更灵活的系统设计。Vivado提供了丰富的设计工具和特性,可以方便地对Zynq HP进行硬件逻辑设计、软件开发和系统验证。 Vivado具有直观的图形界面和强大的集成设计环境,可以快速生成、优化和验证FPGA设计。对于Zynq HP,Vivado提供了特殊的开发流程和工具,帮助设计师将FPGA和ARM处理器的功能紧密集成起来。 通过Vivado的设计流程,可以对Zynq HP进行各种硬件逻辑的设计,包括IP核集成、时序分析和电源分析。同时,Vivado也支持嵌入式软件开发,可以通过ARM处理器进行驱动程序和应用程序的编写、调试和验证。 总之,VivadoZynq HP的结合为设计师提供了一个全面、高效的开发平台,可以实现复杂的硬件逻辑设计、软件开发和系统验证。这种集成的设计环境,可以大幅度缩短开发周期,提高设计效率,同时还可以有效减少开发成本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值