• FPGA基于ISE的VGA读取DDR3端数据的处理方法以及显示(10)


         这个小项目几乎也就快结束了,中间因为要写开题报告所以落下了一段时间。经过前8次的讲解,想必相中也有了这个项目的大概框架;

    一、整体框架图

    前几次我们都实现了,usb_read 模块,DDR IP模块,ddr_drive模块,整个小项目只剩下了,VGA的驱动模块。具体原理介绍如下:

    二、关于本次要实现的模块的介绍

    传送640*480的像素点的图片,vga_rd_data什么时候会出数据呢?因为我们用到的FIFO(指的是DDR中的FIFO)是fast_word模式,所以会在Vga_rd_en拉高的时候就直接出数据,并不会出现延迟的情况。这里我们的一次读是读出来了64bit的数据。然而VGA读出来的数据是16bit。这里需要进行对数据的拆分。也就是时序图中的Vga_rd_data[63:0]是从DDR中读出来的数据。但是在Vga_rd_en为低电平的时候,读出来的Vga_rd_data并不是不变的,因为Vga_data[15:0]是要直接给到VGA来显示的,所以应当先吧接收到的数据储存到寄存器Rd_data_reg[63:0]当中,然后对Rd_data_reg[63:0]中的数据进行拆分,在对Rd_data_reg[63:0]中的数据进行拆分时,必须保证里面的数据是已经准备好了的,所以在Vga_rd_en应该提前一拍,就是在行计数是142的时候拉高,然后Vga_rd_data[63:0]就会从DDR中把数据读出来,把读出来的数据缓存到Rd_data_reg[63:0]中,通过Vga_data[16:0]把Rd_data_reg[63:0]中的数据拆分成4个16bit的数据。可以发现Vga_rd_en每间隔4个时钟周期会拉高一次。用时序逻辑所以要提前一拍产生。需要产生让Rd_cnt相加的标志位Rd_cnt_add。一行最后一个像素点是144+639=783。需要将读使能拉高640/4=160次,对应的就是778是读使能的最后一次拉高。Byte_cnt用来拆分数据,Rd_cnt_add_r2拆分数据的标志位。
    因为当P1的读使能拉高的时候,DDR中的读FIFO也不会立刻就有数据,但是我们必须保证,在VGA读使能有效的时候,FIFO中已经有了数据,所以FIFO中必须提前准备好要给VGA的数据,那就意味着ddr_drive 模块要先产生相应的读命令是能,vga_drive模块产生的读请求使能触发P1_cmd_en 使能。
    P1_rd_cnt 单纯对VGA的读使能进行计数,VGA的读使能拉高一次进行一次自加,当加到16的时候会产生FIFO读空的情况。所以当P1_rd_cnt为16的时候再次拉高P1_cmd_en 进行向DDR中写入数据,但是这个时候向DDR中写入的时间,与读出的时间只有四个时钟周期的时间,所以容易产生错误,即将p1_rd_cnt 为1的时候,拉高P1_cmd_en。这里需要考虑读FIFO会不会读满的呢?因为这里设的读FIFO的深度为64,下一个VGA读使能到来的时候。FIFO里面最多也就是16个深度。字节地址开始自加一次自加128,突发次数计数器p1_bl_cnt,通过读请求Vga_rd_req来使得字节地址清0 。
    DDR中的读写FIFO是一次突发16个数据每一个数据是64Bit,要传送的图像是640*480的像素点,每一个像素点是16bit,也就是一行像素点要突发640/64=10次,P1_cmd_en使能拉高10次,总共480行,也就是拉高4800次。因为在最初的vga_rd_req就会使得使能拉高一次,所以在一幅图片里面使能拉高了4801次,那么在传送第二幅图的时候就会有第一幅图的64个像素点在干扰。所以需要做一下限制。利用突发次数做限制,使其只能产生4800次。

    xilinx芯片内部会对送入锁相环的时钟有个限制,当时钟送到PPL产生一个分频或者一个倍频时钟时,那么当前的时钟不能再送给其他pll作为时钟源的参考,驱动能力有限,会报错。最好就是再提供一个不同于之前的一个时钟源来做参考。
    USB的高低字节会取反,所以出现的图像会色差比较厉害。

     三、时序图的设计

     四、相关事项

         1、6480 X640 @60HZ 说明

          2、硬件双端口时钟UCF约束

          3、产生BIT文件时会报的约束错误

     

    五、该模块编码

      1 // *********************************************************************************
      2 // Project Name : 
      3 // Email        : 
      4 // Website      : 
      5 // Create Time  : 
      6 // File Name    : .v
      7 // Module Name  : 
      8 // Abstract     :
      9 // editor        : sublime text 3
     10 // *********************************************************************************
     11 // Modification History:
     12 // Date         By              Version                 Change Description
     13 // -----------------------------------------------------------------------
     14 // 2019/12/30    李国勇           1.0                     Original
     15 //  
     16 // *********************************************************************************
     17 `timescale      1ns/1ns
     18 module vga_drive (
     19     //system signals
     20     input              wire             sclk         , 
     21     input            wire             s_rst_n    ,
     22     //vga  signals
     23     output          wire             vga_hs     ,
     24     output          wire             vga_vs     ,
     25     output          reg      [15:0]  vga_data   ,             
     26     //vga ctrl signals
     27     output          reg              vga_rd_req ,
     28     output          reg              vga_rd_en  ,
     29     input           wire     [63:0]  vga_rd_data
     30 
     31 );
     32 
     33 //========================================================================
     34 // =========== Define Parameter and Internal signals =========== 
     35 //========================================================================/
     36 
     37 //640 X 480 @60HZ
     38 localParam         H_total_time  =  800           ;
     39 localParam         H_sync_time   =  96            ;
     40 localParam         H_back_porch  =  40            ;
     41 localParam         H_left_border  =  8            ;
     42 localParam         H_addr_time   =  640           ;
     43 
     44 localParam         V_total_time  =  525           ;
     45 localParam         V_sync_time   =  2             ;
     46 localParam         V_back_porch  =  25            ;
     47 localParam         V_top_border  =  8             ; 
     48 localParam         V_addr_time   =  480           ;
     49 
     50 
     51 reg               [9:0]            H_cnt          ;//行计数器,总共是880
     52 reg               [9:0]            V_cnt          ;//列计数器,总共是525
     53 reg               [63:0]           rd_data_reg    ;//对从DDR中独处的数据的一个中间缓存器
     54 reg               [1:0]            rd_cnt         ;//对数据的拆分计数
     55 reg                                rd_cnt_add     ;//对拆分计数开始的标志位
     56 reg               [1:0]            byte_cnt       ;//拆分字节计数器
     57 reg                                rd_cnt_add_r2  ;//拆分字节计数器开始标志位。相当于对数据拆分标志位延迟两个节拍
     58 
     59 //=============================================================================
     60 //****************************     Main Code    *******************************
     61 //=============================================================================
     62 
     63 assign        vga_hs   =    (H_cnt < H_sync_time)? 1'b1 : 1'b0 ;
     64 assign        vga_hs   =    (V_cnt < V_sync_time)? 1'b1 : 1'b0 ;
     65 
     66 //H_cnt
     67 always   @(posedge sclk or negedge s_rst_n)begin
     68     if (!s_rst_n)
     69        H_cnt   <=    'd0    ;
     70     else if(H_cnt >= (H_total_time-1))
     71        H_cnt   <=    'd0    ;
     72     else 
     73        H_cnt   <=     H_cnt + 1'b1  ;   
     74             
     75 end
     76 
     77 //V_cnt
     78 always @ (posedge sclk or negedge s_rst_n) begin
     79     if(s_rst_n == 1'b0)
     80         V_cnt    <=   'd0  ;
     81     else if (V_cnt >= (V_total_time-1) && V_cnt >= (H_total_time-1))
     82         V_cnt    <=    'd0 ;
     83     else if(V_cnt == H_total_time-1)
     84         V_cnt    <=   V_cnt + 1'b1 ;        
     85                         
     86 end
     87 
     88 //rd_data_reg 
     89 always @ (posedge sclk or negedge s_rst_n) begin
     90     if(s_rst_n == 1'b0)
     91         rd_data_reg    <=   64'h0  ;
     92     else if(vga_rd_en == 1'b1)
     93         rd_data_reg    <=   vga_rd_data ;    
     94         
     95 end
     96 
     97 
     98 
     99 //rd_cnt_add
    100 always @ (posedge sclk or negedge s_rst_n) begin
    101     if(s_rst_n == 1'b0)
    102         rd_cnt_add   <=     1'b0 ;
    103     else if(H_cnt >= 140  & H_cnt <= 780)    
    104         rd_cnt_add   <=     1'b1  ;
    105     else 
    106         rd_cnt_add   <=     1'b0  ;
    107 end
    108 
    109 //rd_cnt
    110 always @ (posedge sclk or negedge s_rst_n) begin
    111     if(s_rst_n == 1'b0)
    112         rd_cnt     <=     'd0    ;
    113     else if(rd_cnt_add == 1'b1)    
    114         rd_cnt     <=   rd_cnt  + 1'b1 ;
    115     else if(rd_cnt == 3)
    116         rd_cnt     <=     'd0    ;                
    117         
    118 end
    119 
    120 //byte_cnt
    121 always @ (posedge sclk or negedge s_rst_n) begin
    122     if(s_rst_n == 1'b0)
    123         byte_cnt    <=   'd0;
    124     else if(rd_cnt_add_r2 == 1'b1 )
    125         byte_cnt    <=   byte_cnt + 1'b1 ;    
    126         
    127 end
    128 
    129 //rd_cnt_add_r2
    130 always @(posedge sclk)begin
    131     rd_cnt_add    <=    rd_cnt     ;
    132     rd_cnt_add_r2 <=    rd_cnt_add ;   
    133 end
    134 
    135 
    136 //vga_rd_req
    137 always @ (posedge sclk or negedge s_rst_n) begin
    138     if(s_rst_n == 1'b0)
    139         vga_rd_req     <=     1'b0 ;
    140     else if(V_cnt == 35 && H_cnt == 0)
    141         vga_rd_req     <=   1'b1   ;    
    142         
    143 end
    144 
    145 
    146 //vga_rd_en
    147 always @ (posedge sclk or negedge s_rst_n) begin
    148     if(s_rst_n == 1'b0)
    149         vga_rd_en     <=     1'b0  ;
    150     else if(rd_cnt_add == 1'b1 && rd_cnt == 0)
    151         vga_rd_en     <=     1'b1  ;    
    152     else
    153         vga_rd_en     <=     1'b0  ;         
    154 end
    155 
    156 //拆分数据 vga_data
    157 always @ (posedge sclk or negedge s_rst_n) begin
    158        if(s_rst_n == 1'b0)
    159            vga_data   <=      'd0  ;
    160        else if(rd_cnt_add_r2 == 1'b1)
    161            case (byte_cnt)
    162                0:     vga_data     <=     rd_data_reg[63:48];
    163                1:     vga_data     <=     rd_data_reg[47:32];
    164                2:     vga_data     <=     rd_data_reg[31:16];
    165                3:     vga_data     <=     rd_data_reg[15: 0];        
    166          
    167         endcase
    168     else
    169        vga_data      <=     'd0  ;             
    170    end  
    171 
    172 endmodule
    vga_drive
     1 // *********************************************************************************
     2 // Project Name :
     3 // Weixin       : li15226499835
     4 // Website      : https://www.cnblogs.com/lgy-gdeu/
     5 // Create Time  : 201//
     6 // File Name    : .v
     7 // Module Name  :
     8 // Abstract     :
     9 // editor        : sublime text 3
    10 // *********************************************************************************
    11 // Modification History:
    12 // Date         By              Version                 Change Description
    13 // -----------------------------------------------------------------------
    14 // 201//    李国勇           1.0                     Original
    15 //
    16 // *********************************************************************************
    17 
    18 `timescale      1ns/1ps
    19 module   usb_read(
    20 
    21      // system signals
    22         input                   s_rst_n                 ,       
    23         // system signals
    24         input                   usb_ifclk               ,       
    25         input                   usb_full                ,       
    26         input                   usb_empty               ,       
    27         output  wire            usb_slcs                ,       
    28         output  wire            usb_slwr                ,       
    29         output  wire            usb_slrd                ,       
    30         output  wire            usb_sloe                ,       
    31         output  wire    [ 1:0]  usb_fifoadr             ,
    32         input           [15:0]  usb_fdata               ,
    33         // User Data
    34         output  reg             usb_wr_en               ,
    35         output  reg     [63:0]  usb_wr_data             
    36 );
    37 
    38 //========================================================================
    39 // =========== Define Parameter and Internal signals =========== 
    40 //========================================================================/
    41 
    42 reg                             usb_slrd_reg                    ;   
    43 reg     [ 1:0]                  data_cnt                        ;
    44     
    45 
    46 //=============================================================================
    47 //**************    Main Code   **************
    48 //=============================================================================
    49 assign  usb_slcs        =       1'b0;
    50 assign  usb_slrd        =       (usb_empty == 1'b1 && usb_slrd_reg == 1'b0) ? 1'b0 : 1'b1;
    51 assign  usb_slwr        =       1'b1;
    52 assign  usb_sloe        =       1'b0;
    53 assign  usb_fifoadr     =       2'b00;  // 2,4,6,8
    54 
    55 
    56 always  @(posedge usb_ifclk or negedge s_rst_n) begin
    57         if(s_rst_n == 1'b0)
    58                 usb_slrd_reg    <=      1'b1;
    59         else if(usb_empty == 1'b1)
    60                 usb_slrd_reg    <=      1'b0;
    61         else 
    62                 usb_slrd_reg    <=      1'b1;
    63 end
    64 
    65 always  @(posedge usb_ifclk or negedge s_rst_n) begin
    66         if(s_rst_n == 1'b0)
    67                 usb_wr_data     <=       64'h0;
    68         else if(usb_slrd == 1'b0)
    69                 usb_wr_data     <=      {usb_wr_data[47:0], usb_fdata[7:0],usb_fdata[15:8]};
    70 end
    71 
    72 always  @(posedge usb_ifclk or negedge s_rst_n) begin
    73         if(s_rst_n == 1'b0)
    74                 data_cnt        <=      'd0;
    75         else if(usb_slrd == 1'b0)
    76                 data_cnt        <=      data_cnt + 1'b1;
    77 end
    78 
    79 always  @(posedge usb_ifclk or negedge s_rst_n) begin
    80         if(s_rst_n == 1'b0)
    81                 usb_wr_en       <=      1'b0;
    82         else if(usb_slrd == 1'b0 && data_cnt == 'd3)
    83                 usb_wr_en       <=      1'b1;
    84         else
    85                 usb_wr_en       <=      1'b0;
    86 end
    87 
    88 endmodule
    usb_read
      1 // *********************************************************************************
      2 // Project Name :
      3 // Weixin       : li15226499835
      4 // Website      : https://www.cnblogs.com/lgy-gdeu/
      5 // Create Time  : 201//
      6 // File Name    : .v
      7 // Module Name  :
      8 // Abstract     :
      9 // editor        : sublime text 3
     10 // *********************************************************************************
     11 // Modification History:
     12 // Date         By              Version                 Change Description
     13 // -----------------------------------------------------------------------
     14 // 201//    æŽå›½å‹        1.0                     Original
     15 //
     16 // *********************************************************************************
     17 `timescale      1ns/1ps
     18 module    ddr_drive(
     19 
     20        // system signals
     21         input                   wr_clk                  ,
     22         input                   rd_clk                  ,
     23         input                   s_rst_n                 ,
     24         // DDR3 User Interfaces
     25         input                   p0_wr_en                ,
     26         output  reg             p0_cmd_en               ,
     27         output  wire    [ 2:0]  p0_cmd_instr            ,
     28         output  wire    [ 5:0]  p0_cmd_bl               ,
     29         output  reg     [29:0]  p0_byte_addr            ,
     30         output  wire    [ 7:0]  p0_wr_mask              ,
     31         output  reg             p1_cmd_en               ,
     32         output  wire    [ 2:0]  p1_cmd_instr            ,
     33         output  wire    [ 5:0]  p1_cmd_bl               ,
     34         output  reg     [29:0]  p1_byte_addr            ,
     35         
     36 
     37         //debug vga interfaces
     38         //output  reg             p1_rd_en                ,
     39         //input           [63:0]  p1_rd_data              ,
     40         //vga port
     41         input   wire              vga_rd_req              ,
     42         input  wire               p1_rd_en                //   input   wire            vga_rd_en               
     43 );
     44 
     45 //========================================================================
     46 // =========== Define Parameter and Internal signals ===========
     47 //========================================================================/
     48 //localparam      BURST_END       =       'd10                    ;
     49  localparam       BURST_END       =       4800                    ;
     50 
     51 reg     [ 3:0]                  wr_cnt                          ;
     52 reg     [15:0]                  wr_bl_cnt                       ;
     53 
     54 reg     [ 3:0]                  rd_cnt                          ;//读数据计数器
     55 reg     [15:0]                  rd_bl_cnt                       ;//读突发次数计数器
     56 //=============================================================================
     57 //**************    Main Code   **************
     58 //=============================================================================
     59 assign  p0_cmd_instr    =       3'b000;
     60 assign  p0_cmd_bl       =       'd15;
     61 assign  p0_wr_mask      =       8'h0;
     62 assign  p1_cmd_instr    =       3'b001;
     63 assign  p1_cmd_bl       =       'd15;
     64 
     65 always  @(posedge wr_clk or negedge s_rst_n) begin
     66         if(s_rst_n == 1'b0)
     67                 wr_cnt  <=      'd0;
     68         else if(p0_wr_en == 1'b1)
     69                 wr_cnt  <=      wr_cnt + 1'b1;
     70 end
     71 
     72 always  @(posedge wr_clk or negedge s_rst_n) begin
     73         if(s_rst_n == 1'b0)
     74                 p0_cmd_en       <=      1'b0;
     75         else if(p0_wr_en == 1'b1 && wr_cnt == 'd15)
     76                 p0_cmd_en       <=      1'b1;
     77         else
     78                 p0_cmd_en       <=      1'b0;
     79 end
     80 
     81 always  @(posedge wr_clk or negedge s_rst_n) begin
     82         if(s_rst_n == 1'b0)
     83                 p0_byte_addr    <=      'd0;
     84         else if(p0_cmd_en == 1'b1 && wr_bl_cnt >= (BURST_END-1))
     85                 p0_byte_addr    <=      'd0;
     86         else if(p0_cmd_en == 1'b1)
     87                 p0_byte_addr    <=      p0_byte_addr + 'd128;
     88 end
     89 
     90 always  @(posedge wr_clk or negedge s_rst_n) begin
     91         if(s_rst_n == 1'b0)
     92                 wr_bl_cnt       <=      'd0;
     93         else if(p0_cmd_en == 1'b1 && wr_bl_cnt >= (BURST_END-1))
     94                 wr_bl_cnt       <=      'd0;
     95         else if(p0_cmd_en == 1'b1)
     96                 wr_bl_cnt       <=      wr_bl_cnt + 1'b1;
     97 end
     98 
     99 
    100 
    101 //=============================================================================
    102 //*************************VGA  debug with ddr ip**************************
    103 //=============================================================================
    104 
    105 //p1_cmd_en
    106 always @ (posedge rd_clk  or negedge s_rst_n) begin
    107     if(s_rst_n == 1'b0)
    108         p1_cmd_en    <=    1'b0  ;
    109     else if (vga_rd_req == 1'b1 )
    110         p1_cmd_en    <=    1'b1  ;//äº§ç”Ÿç¬¬ä¸€ä¸ªå‘½ä»¤ä½¿èƒ    
    111      else if(p1_rd_en ==1'b1 && rd_cnt == 0 && rd_bl_cnt <= (BURST_END-1))
    112         p1_cmd_en    <=    1'b1  ;
    113     else
    114         p1_cmd_en    <=    1'b0  ;    
    115                                 
    116 end
    117 
    118 //rd_cnt
    119 always @ (posedge rd_clk  or negedge s_rst_n) begin
    120     if(s_rst_n == 1'b0)
    121         rd_cnt    <=   'd0 ;
    122     else if(p1_rd_en == 1'b1 )
    123         rd_cnt    <=    rd_cnt + 1'b1 ;    
    124         
    125 end
    126 
    127 //p1_byte_addr
    128 always @ (posedge rd_clk  or negedge s_rst_n) begin
    129     if(s_rst_n == 1'b0)
    130         p1_byte_addr     <=  'd0 ;
    131     else if(vga_rd_req == 1'b1 )
    132         p1_byte_addr     <=  'd0 ;    
    133     else if(p1_cmd_en == 1'b1 )
    134         p1_byte_addr     <=p1_byte_addr + 'd128 ; 
    135                        
    136 end
    137 
    138 //rd_bl_cnt
    139 always @ (posedge rd_clk  or negedge s_rst_n) begin
    140     if(s_rst_n == 1'b0)
    141         rd_bl_cnt     <=      'd0 ;
    142     else if(vga_rd_req == 1'b1 )
    143         rd_bl_cnt     <=      'd0 ;    
    144     else if(p1_cmd_en == 1'b1 )
    145         rd_bl_cnt     <=    rd_bl_cnt + 1'b1 ;
    146         
    147 end
    148 
    149 
    150 
    151 endmodule
    ddr_drive
      1 // *********************************************************************************
      2 // Project Name :
      3 // Weixin       : li15226499835
      4 // Website      : https://www.cnblogs.com/lgy-gdeu/
      5 // Create Time  : 2019
      6 // File Name    : .v
      7 // Module Name  :
      8 // Abstract     :
      9 // editor        : sublime text 3
     10 // *********************************************************************************
     11 // Modification History:
     12 // Date         By              Version                 Change Description
     13 // -----------------------------------------------------------------------
     14 // 2019    李国勇         1.0                     Original
     15 //
     16 // *********************************************************************************
     17 `timescale      1ns/1ps
     18 
     19 module   ddr_top(
     20 
     21 
     22 
     23         // system signals
     24         input                   c3_sys_clk              ,
     25         input                   sclk                    ,//50Mhz
     26         input                   c3_sys_rst_i            ,
     27         // DDR3 Interfaces
     28         inout           [15:0]  mcb3_dram_dq            ,
     29         output  wire    [12:0]  mcb3_dram_a             ,
     30         output  wire    [2:0]   mcb3_dram_ba            ,
     31         output  wire            mcb3_dram_ras_n         ,
     32         output  wire            mcb3_dram_cas_n         ,
     33         output  wire            mcb3_dram_we_n          ,
     34         output  wire            mcb3_dram_odt           ,
     35         output  wire            mcb3_dram_reset_n       ,
     36         output  wire            mcb3_dram_cke           ,
     37         output  wire            mcb3_dram_ck            ,
     38         output  wire            mcb3_dram_ck_n          ,
     39         output  wire            mcb3_dram_dm            ,
     40         inout                   mcb3_dram_udqs          ,
     41         inout                   mcb3_dram_udqs_n        ,
     42         inout                   mcb3_dram_dqs           ,
     43         inout                   mcb3_dram_dqs_n         ,
     44         inout                   mcb3_rzq                ,
     45         inout                   mcb3_zio                ,
     46         output                  mcb3_dram_udm           ,
     47         // USB interfaces
     48         input                   usb_ifclk               ,
     49         input                   usb_full                ,
     50         input                   usb_empty               ,
     51         output  wire            usb_slcs                ,
     52         output  wire            usb_slwr                ,
     53         output  wire            usb_slrd                ,
     54         output  wire            usb_sloe                ,
     55         output  wire    [ 1:0]  usb_fifoadr             ,
     56         input           [15:0]  usb_fdata               ,
     57         //VGA interfaces
     58         output  wire            vga_hs                  ,
     59         output  wire            vga_vs                  ,
     60         output  wire    [4:0]   vga_r                   ,
     61         output  wire    [5:0]   vga_g                   ,
     62         output  wire    [4:0]   vga_b                   
     63        // output  wire            vga_clk                 ,//it use for which vga_asic drive
     64        // output  wire            vga_blank               ;//it use for which vga_asic drive
     65        // output  wire    [15:0]  vga_data                 
     66 );
     67 
     68 
     69 
     70 //========================================================================
     71 // =========== Define Parameter and Internal signals ===========
     72 //========================================================================/
     73 wire                            p0_cmd_en                       ;
     74 wire    [ 2:0]                  p0_cmd_instr                    ;
     75 wire    [ 5:0]                  p0_cmd_bl                       ;
     76 wire    [29:0]                  p0_byte_addr                    ;
     77 wire                            p0_wr_en                        ;
     78 wire    [ 7:0]                  p0_wr_mask                      ;
     79 wire    [63:0]                  p0_wr_data                      ;
     80 wire                            p1_cmd_en                       ;
     81 wire    [ 2:0]                  p1_cmd_instr                    ;
     82 wire    [ 5:0]                  p1_cmd_bl                       ;
     83 wire    [29:0]                  p1_byte_addr                    ;
     84 wire                            p1_rd_en                        ;
     85 wire    [63:0]                  p1_rd_data                      ;
     86 
     87 wire                            vga_rd_req                      ;
     88 wire                            clk_sys25m                      ;
     89 wire                            pll_locked                      ;
     90 wire    [15:0]                  vga_data                        ;
     91 //=============================================================================
     92 //**************    Main Code   **************
     93 //=============================================================================
     94 //assign              vga_clk      =    clk_sys25m    ;//it use for which vga_asic drive
     95 //assign              vga_blank    =    1'b1          ;//it use for which vga_asic drive
     96 assign                {vga_r,vga_g,vga_b} = vga_data  ;
     97 usb_read        usb_read_inst(
     98         // system signals
     99         .s_rst_n                (c3_sys_rst_i & c3_calib_done ),
    100         // system signals
    101         .usb_ifclk              (usb_ifclk              ),
    102         .usb_full               (usb_full               ),
    103         .usb_empty              (usb_empty              ),
    104         .usb_slcs               (usb_slcs               ),
    105         .usb_slwr               (usb_slwr               ),
    106         .usb_slrd               (usb_slrd               ),
    107         .usb_sloe               (usb_sloe               ),
    108         .usb_fifoadr            (usb_fifoadr            ),
    109         .usb_fdata              (usb_fdata              ),
    110         // User Data
    111         .usb_wr_en              (p0_wr_en               ),
    112         .usb_wr_data            (p0_wr_data             )
    113 );
    114 
    115 ddr_drive      ddr_drive_inst(
    116         // system signals
    117         .rd_clk                 (clk_sys25m             ),
    118         .wr_clk                 (usb_ifclk              ),
    119         .s_rst_n                (c3_sys_rst_i           ),
    120         // DDR3 User Interfaces
    121         .p0_cmd_en              (p0_cmd_en              ),
    122         .p0_cmd_instr           (p0_cmd_instr           ),
    123         .p0_cmd_bl              (p0_cmd_bl              ),
    124         .p0_byte_addr           (p0_byte_addr           ),
    125         .p0_wr_en               (p0_wr_en               ),
    126         .p0_wr_mask             (p0_wr_mask             ),
    127         .p1_cmd_en              (p1_cmd_en              ),
    128         .p1_cmd_instr           (p1_cmd_instr           ),
    129         .p1_cmd_bl              (p1_cmd_bl              ),
    130         .p1_byte_addr           (p1_byte_addr           ),
    131         .p1_rd_en               (p1_rd_en               ),
    132         //VGA interfaces
    133 
    134         .vga_rd_req             (vga_rd_req             )
    135 );
    136 
    137 mig_39_2 # (
    138         .C3_P0_MASK_SIZE        (8                      ),
    139         .C3_P0_DATA_PORT_SIZE   (64                     ),
    140         .C3_P1_MASK_SIZE        (8                      ),
    141         .C3_P1_DATA_PORT_SIZE   (64                     ),
    142         .DEBUG_EN               (0                      ),
    143         .C3_MEMCLK_PERIOD       (3200                   ),
    144         .C3_CALIB_SOFT_IP       ("TRUE"                 ),
    145         .C3_SIMULATION          ("TRUE"                 ),
    146         .C3_RST_ACT_LOW         (1                      ),
    147         .C3_INPUT_CLK_TYPE      ("SINGLE_ENDED"         ),
    148         .C3_MEM_ADDR_ORDER      ("BANK_ROW_COLUMN"      ),
    149         .C3_NUM_DQ_PINS         (16                     ),
    150         .C3_MEM_ADDR_WIDTH      (13                     ),
    151         .C3_MEM_BANKADDR_WIDTH  (3                      )
    152 ) u_mig_39_2 (
    153 
    154         .c3_sys_clk             (c3_sys_clk             ),      // input
    155         .c3_sys_rst_i           (c3_sys_rst_i           ),      // input
    156 
    157         .mcb3_dram_dq           (mcb3_dram_dq           ),
    158         .mcb3_dram_a            (mcb3_dram_a            ),
    159         .mcb3_dram_ba           (mcb3_dram_ba           ),
    160         .mcb3_dram_ras_n        (mcb3_dram_ras_n        ),
    161         .mcb3_dram_cas_n        (mcb3_dram_cas_n        ),
    162         .mcb3_dram_we_n         (mcb3_dram_we_n         ),
    163         .mcb3_dram_odt          (mcb3_dram_odt          ),
    164         .mcb3_dram_cke          (mcb3_dram_cke          ),
    165         .mcb3_dram_ck           (mcb3_dram_ck           ),
    166         .mcb3_dram_ck_n         (mcb3_dram_ck_n         ),
    167         .mcb3_dram_dqs          (mcb3_dram_dqs          ),
    168         .mcb3_dram_dqs_n        (mcb3_dram_dqs_n        ),
    169         .mcb3_dram_udqs         (mcb3_dram_udqs         ),      // for X16 parts
    170         .mcb3_dram_udqs_n       (mcb3_dram_udqs_n       ),      // for X16 parts
    171         .mcb3_dram_udm          (mcb3_dram_udm          ),      // for X16 parts
    172         .mcb3_dram_dm           (mcb3_dram_dm           ),
    173         .mcb3_dram_reset_n      (mcb3_dram_reset_n      ),
    174         .c3_clk0                (c3_clk0                ),      // output
    175         .c3_rst0                (c3_rst0                ),      // output
    176 
    177 
    178 
    179         .c3_calib_done          (c3_calib_done          ),
    180         .mcb3_rzq               (mcb3_rzq               ),
    181 
    182         .mcb3_zio               (mcb3_zio               ),
    183 
    184         // Command Path
    185         .c3_p0_cmd_clk          (usb_ifclk              ),
    186         .c3_p0_cmd_en           (p0_cmd_en              ),
    187         .c3_p0_cmd_instr        (p0_cmd_instr           ),
    188         .c3_p0_cmd_bl           (p0_cmd_bl              ),
    189         .c3_p0_cmd_byte_addr    (p0_byte_addr           ),
    190         .c3_p0_cmd_empty        (                       ),
    191         .c3_p0_cmd_full         (                       ),
    192         // Write Data path
    193         .c3_p0_wr_clk           (usb_ifclk              ),
    194         .c3_p0_wr_en            (p0_wr_en               ),
    195         .c3_p0_wr_mask          (p0_wr_mask             ),
    196         .c3_p0_wr_data          (p0_wr_data             ),
    197         .c3_p0_wr_full          (                       ),
    198         .c3_p0_wr_empty         (                       ),
    199         .c3_p0_wr_count         (                       ),
    200         .c3_p0_wr_underrun      (                       ),
    201         .c3_p0_wr_error         (                       ),
    202 
    203         .c3_p0_rd_clk           (0                      ),
    204         .c3_p0_rd_en            (0                      ),
    205         .c3_p0_rd_data          (                       ),
    206         .c3_p0_rd_full          (                       ),
    207         .c3_p0_rd_empty         (                       ),
    208         .c3_p0_rd_count         (                       ),
    209         .c3_p0_rd_overflow      (                       ),
    210         .c3_p0_rd_error         (                       ),
    211         .c3_p1_cmd_clk          (clk_sys25m            ),
    212         .c3_p1_cmd_en           (p1_cmd_en              ),
    213         .c3_p1_cmd_instr        (p1_cmd_instr           ),
    214         .c3_p1_cmd_bl           (p1_cmd_bl              ),
    215         .c3_p1_cmd_byte_addr    (p1_byte_addr           ),
    216         .c3_p1_cmd_empty        (                       ),
    217         .c3_p1_cmd_full         (                       ),
    218         .c3_p1_wr_clk           (0                      ),
    219         .c3_p1_wr_en            (0                      ),
    220         .c3_p1_wr_mask          (0                      ),
    221         .c3_p1_wr_data          (64'h0                  ),
    222         .c3_p1_wr_full          (                       ),
    223         .c3_p1_wr_empty         (                       ),
    224         .c3_p1_wr_count         (                       ),
    225         .c3_p1_wr_underrun      (                       ),
    226         .c3_p1_wr_error         (                       ),
    227         .c3_p1_rd_clk           (clk_sys25m            ),
    228         .c3_p1_rd_en            (p1_rd_en               ),
    229         .c3_p1_rd_data          (p1_rd_data             ),
    230         .c3_p1_rd_full          (                       ),
    231         .c3_p1_rd_empty         (                       ),
    232         .c3_p1_rd_count         (                       ),
    233         .c3_p1_rd_overflow      (                       ),
    234         .c3_p1_rd_error         (                       )
    235 );
    236 
    237 vga_drive  vga_drive_inst(
    238         //system signals
    239         .sclk                             (clk_sys25m        ), 
    240         .s_rst_n                          (pll_locked & c3_calib_done ),
    241         //vga  signals
    242         .vga_hs                           (vga_hs      ),
    243         .vga_vs                           (vga_vs      ),
    244         .vga_data                         (vga_data    ),             
    245         //vga ctrl signals
    246         .vga_rd_req                       (vga_rd_req  ),
    247         .vga_rd_en                        (p1_rd_en    ),
    248         .vga_rd_data                      (p1_rd_data  )
    249 
    250 );
    251 
    252 clk_wiz_v3_6 clk_wiz_v3_6_inst(
    253     // Clock in ports
    254     .CLK_IN1                              (sclk      ),         // IN
    255     // Clock out ports
    256     .CLK_OUT1                             (clk_sys25m),         // OUT
    257     // Status and control signals
    258     .RESET                                (1'b0      ),        // IN
    259     .LOCKED                               (pll_locked)) ;           // OUT
    260 
    261 endmodule
    ddr_top
  • 相关阅读:
    关于web测试收集
    Webdriver初探
    Java学习笔记 11/15:一个简单的JAVA例子
    持续集成环境搭建总结
    启动速度
    excel中用到的函数
    jmerter使用
    接口测试
    内存泄漏场景
    手机连接电脑那些事
  • 原文地址:https://www.cnblogs.com/lgy-gdeu/p/12124650.html
Copyright © 2020-2023  润新知