基于FPGA的人脸检测(2)

MATLABl利用肤色检测模型工程代码

简述

本来打算两篇博客合成一篇博客发布,但是因为优快云博客字数的限制,这里将肤色检测的代码在该篇博客中给出。

工程代码

这里因为与前面的工程相比,代码变化的比较多,所以我们这里给出整个工程的代码:
top模块:

`timescale 1ns / 1ps
// *********************************************************************************
// Project Name : OSXXXX
// Author       : zhangningning
// Email        : nnzhang1996@foxmail.com
// Website      : 
// Module Name  : top.v
// Create Time  : 2020-03-01 20:33:42
// Editor       : sublime text3, tab size (4)
// CopyRight(c) : All Rights Reserved
//
// *********************************************************************************
// Modification History:
// Date             By              Version                 Change Description
// -----------------------------------------------------------------------
// XXXX       zhangningning          1.0                        Original
//  
// *********************************************************************************

module top(
    //System Interfaces
    input                       sclk                    ,
    input                       rst_n                   ,
    //DDR3 Interfaces           
    output  wire    [13:0]      ddr3_addr               ,
    output  wire    [ 2:0]      ddr3_ba                 ,
    output  wire                ddr3_cas_n              ,
    output  wire                ddr3_ck_n               ,
    output  wire                ddr3_ck_p               ,
    output  wire                ddr3_cke                ,
    output  wire                ddr3_ras_n              ,
    output  wire                ddr3_reset_n            ,
    output  wire                ddr3_we_n               ,
    inout           [31:0]      ddr3_dq                 ,
    inout           [ 3:0]      ddr3_dqs_n              ,
    inout           [ 3:0]      ddr3_dqs_p              ,
    output  wire    [ 0:0]      ddr3_cs_n               ,
    output  wire    [ 3:0]      ddr3_dm                 ,
    output  wire    [ 0:0]      ddr3_odt                ,
    //Gigbit Interfaces
    output  wire                phy_rst_n               ,
    input           [ 3:0]      rx_data                 ,
    input                       rx_ctrl                 ,
    input                       rx_clk                  ,
    //USB3 Interfaces
    output  wire                USBSS_EN                ,
    input                       USB_clk                 ,
    inout           [15:0]      data                    ,
    inout           [ 1:0]      be                      ,
    input                       rxf_n                   ,
    input                       txf_n                   ,
    output  wire                oe_n                    ,
    output  wire                wr_n                    ,
    output  wire                siwu_n                  ,
    output  wire                rd_n                    ,
    output  wire                wakeup                  ,
    output  wire    [ 1:0]      gpio                                 
    );
 
//========================================================================================\
//**************Define Parameter and  Internal Signals**********************************
//========================================================================================/
//clk_wiz_0_inst
wire                            clk_200m                ;
wire                            locked                  ;
wire                            clk_125m                ; 
//ddr3_drive_inst
wire                            init_calib_complete     ;
wire                            c3_p0_cmd_clk           ;
wire                            c3_p0_cmd_en            ;
wire                [ 2:0]      c3_p0_cmd_instr         ;
wire                [27:0]      c3_p0_cmd_byte_addr     ;
wire                [ 6:0]      c3_p0_cmd_bl            ;
wire                            c3_p0_wr_clk            ;
wire                            c3_p0_wr_en             ;
wire                [31:0]      c3_p0_wr_mask           ;
wire                [255:0]     c3_p0_wr_data           ;
wire                [10:0]      c3_p0_wr_count          ; 

wire                        	c3_p1_cmd_clk           ;
wire                        	c3_p1_cmd_en            ;
wire                [ 2:0]  	c3_p1_cmd_instr         ;
wire                [27:0]  	c3_p1_cmd_byte_addr     ;
wire                [ 6:0]  	c3_p1_cmd_bl            ;
wire                        	c3_p1_rd_clk            ;
wire                        	c3_p1_rd_en             ;
wire                [255:0] 	c3_p1_rd_data           ;
wire                [10:0]  	c3_p1_rd_count          ;

//sensor_data_gen_inst
wire                            clk_24m                 ;
wire                            data_wr_en              ;
wire                [31:0]      data_wr                 ;

//usb3_drive_inst
wire                [15:0]      data_in                 ; 
wire                            data_req                ;

wire                [ 7:0]      image_data              ;
wire                            image_data_en           ;
wire                [31:0]      rlst                    ;     
wire                            rlst_flag               ;

//conver_bit_inst
wire                [10:0]      x_min                   ;        
wire                [10:0]      x_max                   ;        
wire                [10:0]      y_min                   ;        
wire                [10:0]      y_max                   ;        
wire                            po_flag                 ;      

 
//========================================================================================\
//**************     Main      Code        **********************************
//========================================================================================/
clk_wiz_0 clk_wiz_0_inst(
    // Clock out ports
    .clk_out1                       (clk_200m                       ),     // output clk_out1
    .clk_out2                       (clk_125m                       ),
    .clk_out3                       (clk_50m                        ),
    // Status and control signals
    .reset                          (~rst_n                         ), // input reset
    .locked                         (locked                         ),       // output locked
    // Clock in ports
    .clk_in1                        (sclk                           )
);      // input clk_in1

ddr3_top ddr3_top_inst(
    //System Interfaces
    .rst_n                          (rst_n                          ),
    .locked                         (locked                         ),
    .clk_200m                       (clk_200m                       ), 
    //DDR3 Interfaces           
    .ddr3_addr                      (ddr3_addr                      ),
    .ddr3_ba                        (ddr3_ba                        ),
    .ddr3_cas_n                     (ddr3_cas_n                     ),
    .ddr3_ck_n                      (ddr3_ck_n                      ),
    .ddr3_ck_p                      (ddr3_ck_p                      ),
    .ddr3_cke                       (ddr3_cke                       ),
    .ddr3_ras_n                     (ddr3_ras_n                     ),
    .ddr3_reset_n                   (ddr3_reset_n                   ),
    .ddr3_we_n                      (ddr3_we_n                      ),
    .ddr3_dq                        (ddr3_dq                        ),
    .ddr3_dqs_n                     (ddr3_dqs_n                     ),
    .ddr3_dqs_p                     (ddr3_dqs_p                     ),
    .ddr3_cs_n                      (ddr3_cs_n                      ),
    .ddr3_dm                        (ddr3_dm                        ),
    .ddr3_odt                       (ddr3_odt                       ),
    //User Interfaces
    .init_calib_complete            (init_calib_complete            ),
    .c3_p0_cmd_clk                  (c3_p0_cmd_clk 					),
    .c3_p0_cmd_en                   (c3_p0_cmd_en                   ),
    .c3_p0_cmd_bl                   (c3_p0_cmd_bl                   ),
    .c3_p0_cmd_byte_addr            (c3_p0_cmd_byte_addr            ),
    .c3_p0_cmd_empty                (								),
    .c3_p0_cmd_full                 (								),
    .c3_p0_wr_clk                   (c3_p0_wr_clk                   ),
    .c3_p0_wr_en                    (c3_p0_wr_en                    ),
    .c3_p0_wr_mask                  (c3_p0_wr_mask                  ),
    .c3_p0_wr_data                  (c3_p0_wr_data                  ),
    .c3_p0_wr_full                  (								),
    .c3_p0_wr_empty                 (								),
    .c3_p0_wr_count                 (c3_p0_wr_count                 ),

    .c3_p1_cmd_clk           		('d0							),
    .c3_p1_cmd_en            		('d0							),
    .c3_p1_cmd_bl            		('d0							),
    .c3_p1_cmd_byte_addr     		('d0							),
    .c3_p1_cmd_empty         		(								),
    .c3_p1_cmd_full          		(								),
    .c3_p1_wr_clk            		('d0							),
    .c3_p1_wr_en             		('d0							),
    .c3_p1_wr_mask           		('d0							),
    .c3_p1_wr_data           		('d0							),
    .c3_p1_wr_full           		(								),
    .c3_p1_wr_empty          		(								),
    .c3_p1_wr_count          		(								),

    .c3_p2_cmd_clk           		(c3_p1_cmd_clk                  ),
    .c3_p2_cmd_en            		(c3_p1_cmd_en                   ),
    .c3_p2_cmd_bl            		(c3_p1_cmd_bl                   ),
    .c3_p2_cmd_byte_addr     		(c3_p1_cmd_byte_addr            ),
    .c3_p2_cmd_empty         		(								),
    .c3_p2_cmd_full          		(								),
    .c3_p2_rd_clk            		(c3_p1_rd_clk                   ),
    .c3_p2_rd_en             		(c3_p1_rd_en                    ),
    .c3_p2_rd_data           		(c3_p1_rd_data                  ),
    .c3_p2_rd_full           		(								),
    .c3_p2_rd_empty          		(								),
    .c3_p2_rd_count          		(c3_p1_rd_count    		        ),

    .c3_p3_cmd_clk           		('d0							),
    .c3_p3_cmd_en            		('d0							),
    .c3_p3_cmd_bl            		('d0							),
    .c3_p3_cmd_byte_addr     		('d0							),
    .c3_p3_cmd_empty         		(								),
    .c3_p3_cmd_full          		(								),
    .c3_p3_rd_clk            		('d0							),
    .c3_p3_rd_en             		('d0							),
    .c3_p3_rd_data           		(								),
    .c3_p3_rd_full           		(								),
    .c3_p3_rd_empty          		(								),
    .c3_p3_rd_count                 (								)

);

ddr3_drive ddr3_drive_inst(
    //System Interfaces
    .rst_n                   		(init_calib_complete			    ),
    //DDR3 Interfaces           	
    .c3_p0_cmd_clk           		(c3_p0_cmd_clk           			),
    .c3_p0_cmd_en            		(c3_p0_cmd_en            			),
    .c3_p0_cmd_instr         		(c3_p0_cmd_instr         			),
    .c3_p0_cmd_byte_addr     		(c3_p0_cmd_byte_addr     			),
    .c3_p0_cmd_bl            		(c3_p0_cmd_bl            			),
    .c3_p0_wr_clk            		(c3_p0_wr_clk            			),
    .c3_p0_wr_en             		(c3_p0_wr_en             			),
    .c3_p0_wr_mask           		(c3_p0_wr_mask           			),
    .c3_p0_wr_data           		(c3_p0_wr_data           			),
    .c3_p0_wr_count          		(c3_p0_wr_count          			),

    .c3_p1_cmd_clk           		(c3_p1_cmd_clk           			),
    .c3_p1_cmd_en            		(c3_p1_cmd_en            			),
    .c3_p1_cmd_instr         		(c3_p1_cmd_instr         			),
    .c3_p1_cmd_byte_addr     		(c3_p1_cmd_byte_addr     			),
    .c3_p1_cmd_bl            		(c3_p1_cmd_bl            			),
    .c3_p1_rd_clk            		(c3_p1_rd_clk            			),
    .c3_p1_rd_en             		(c3_p1_rd_en             			),
    .c3_p1_rd_data           		(c3_p1_rd_data           			),
    .c3_p1_rd_count          		(c3_p1_rd_count          			),
    //Write DDR3
    .clk_24m                        (clk_125m                           ),
    .data_wr_en                     (data_wr_en                         ),
    .data_wr                        (data_wr                            ),
    ////Read DDR3
    .USB_clk                        (USB_clk                            ),
    .wr_n                           (data_req                           ),
    .data_in                        (data_in                            )
);

gbit_top gbit_top_inst(
    //System Interfaces
    .clk_50m                        (clk_50m                            ),
    .clk_125m                       (clk_125m                           ),
    .rst_n                          (locked                             ),
    //Gigbit Interfaces
    .phy_rst_n                      (phy_rst_n                          ),
    .rx_data                        (rx_data                            ),
    .rx_ctrl                        (rx_ctrl                            ),
    .rx_clk                         (rx_clk                             ),
    //Communication Interfaces
    .image_data                     (image_data                         ),
    .image_data_en                  (image_data_en                      ),
    .rlst                           (rlst                               ),
    .rlst_flag                      (rlst_flag                          )
);

conver_bit conver_bit_inst(
    //System Interfaces
    .sclk                           (clk_125m                           ),
    .rst_n                          (locked                             ),
    //Gigbit Interfaces
    .image_data                     (image_data                         ),
    .image_data_en                  (image_data_en                      ),
    //Communication Interfaces
    .rgb_data                       ({
   
   data_wr[15:8],data_wr[23:16],data_wr[31:24],data_wr[7:0]}     ),
    .rgb_data_en                    (data_wr_en                         ),
    .x_min                          (x_min                              ),
    .x_max                          (x_max                              ),
    .y_min                          (y_min                              ),
    .y_max                          (y_max                              ),
    .po_flag                        (po_flag                            )
); 


//sensor_data_gen sensor_data_gen_inst(
//    .clk                            (clk_24m                            ),
//    .rst_n                          (init_calib_complete                ),
//    .rgb                            ({data_wr[15:0],data_wr[31:16]}     ),
//    .de                             (data_wr_en                         ),
//    .vsync                          (                                   ),
//    .hsync                          (                                   )
//);
//lways @(posedge clk_24m)
//   if(init_calib_complete == 1'b0)
//       data_wr_en      <=      1'b0;
//   else  
//       data_wr_en      <=      1'b1;

//lways @(posedge clk_24m)
//   if(init_calib_complete == 1'b0)
//       data_wr         <=      32'd0;
//   else if(data_wr_en == 1'b1) 
//       data_wr         <=      data_wr + 1'b1;
    

usb3_drive usb3_drive_inst(
    //System Interfaces
    .rst_n                          (init_calib_complete                ),
    //USB3 Interfaces
    .USBSS_EN                       (USBSS_EN                           ),
    .sclk                           (USB_clk                            ),
    .data                           (data                                ),
    .be                             (be                                 ),
    .rxf_n                          (rxf_n                              ),
    .txf_n                          (txf_n                              ),
    .oe_n                           (oe_n                               ),
    .wr_n                           (wr_n                               ),
    .siwu_n                         (siwu_n                             ),
    .rd_n                           (rd_n                               ),
    .wakeup                         (wakeup                             ),
    .gpio                           (gpio                               ),
    //Communication Interfaces
    .data_in                        (data_in                            ),
    .data_req                       (data_req                           ),
    .x_min                          (x_min                              ),
    .x_max                          (x_max                              ),
    .y_min                          (y_min                              ),
    .y_max                          (y_max                              ),
    .po_flag                        (po_flag                            )              
);
 


endmodule

ddr3_top模块:

`timescale 1ns / 1ps
// *********************************************************************************
// Project Name : OSXXXX
// Author       : zhangningning
// Email        : nnzhang1996@foxmail.com
// Website      : 
// Module Name  : ddr3_top.v
// Create Time  : 2020-02-27 23:16:16
// Editor       : sublime text3, tab size (4)
// CopyRight(c) : All Rights Reserved
//
// *********************************************************************************
// Modification History:
// Date             By              Version                 Change Description
// -----------------------------------------------------------------------
// XXXX       zhangningning          1.0                        Original
//  
// *********************************************************************************

module ddr3_top(
    //System Interfaces
    input                       rst_n                   ,
    input                       locked                  ,
    input                       clk_200m                , 
    //DDR3 Interfaces           
    output  wire    [13:0]      ddr3_addr               ,
    output  wire    [ 2:0]      ddr3_ba                 ,
    output  wire                ddr3_cas_n              ,
    output  wire                ddr3_ck_n               ,
    output  wire                ddr3_ck_p               ,
    output  wire                ddr3_cke                ,
    output  wire                ddr3_ras_n              ,
    output  wire                ddr3_reset_n            ,
    output  wire                ddr3_we_n               ,
    inout           [31:0]      ddr3_dq                 ,
    inout           [ 3:0]      ddr3_dqs_n              ,
    inout           [ 3:0]      ddr3_dqs_p              ,
    output  wire    [ 0:0]      ddr3_cs_n               ,
    output  wire    [ 3:0]      ddr3_dm                 ,
    output  wire    [ 0:0]      ddr3_odt                ,
    //User Interfaces
    output  wire                init_calib_complete     , 
    input                       c3_p0_cmd_clk           ,
    input                       c3_p0_cmd_en            ,
    input           [ 6:0]      c3_p0_cmd_bl            ,
    input           [27:0]      c3_p0_cmd_byte_addr     ,
    output  wire                c3_p0_cmd_empty         ,
    output  wire                c3_p0_cmd_full          ,
    input                       c3_p0_wr_clk            ,
    input                       c3_p0_wr_en             ,
    input           [31:0]      c3_p0_wr_mask           ,
    input           [255:0]     c3_p0_wr_data           ,
    output  wire                c3_p0_wr_full           ,
    output  wire                c3_p0_wr_empty          ,
    output  wire    [10:0]      c3_p0_wr_count          ,

    input                       c3_p1_cmd_clk           ,
    input                       c3_p1_cmd_en            ,
    input            [ 6:0]     c3_p1_cmd_bl            ,
    input            [27:0]     c3_p1_cmd_byte_addr     ,
    output  wire                c3_p1_cmd_empty         ,
    output  wire                c3_p1_cmd_full          ,
    input                       c3_p1_wr_clk            ,
    input                       c3_p1_wr_en             ,
    input            [31:0]     c3_p1_wr_mask           ,
    input            [255:0]    c3_p1_wr_data           ,
    output  wire                c3_p1_wr_full           ,
    output  wire                c3_p1_wr_empty          ,
    output  wire     [10:0]     c3_p1_wr_count          ,

    input                       c3_p2_cmd_clk           ,
    input                       c3_p2_cmd_en            ,
    input            [ 6:0]     c3_p2_cmd_bl            ,
    input            [27:0]     c3_p2_cmd_byte_addr     ,
    output  wire                c3_p2_cmd_empty         ,
    output  wire                c3_p2_cmd_full          ,
    input                       c3_p2_rd_clk            ,
    input                       c3_p2_rd_en             ,
    output 	wire     [255:0]    c3_p2_rd_data           ,
    output  wire                c3_p2_rd_full           ,
    output  wire                c3_p2_rd_empty          ,
    output  wire     [10:0]     c3_p2_rd_count          ,

    input                       c3_p3_cmd_clk           ,
    input                       c3_p3_cmd_en            ,
    input            [ 6:0]     c3_p3_cmd_bl            ,
    input            [27:0]     c3_p3_cmd_byte_addr     ,
    output  wire                c3_p3_cmd_empty         ,
    output  wire                c3_p3_cmd_full          ,
    input                       c3_p3_rd_clk            ,
    input                       c3_p3_rd_en             ,
    output 	wire     [255:0]    c3_p3_rd_data           ,
    output  wire                c3_p3_rd_full           ,
    output  wire                c3_p3_rd_empty          ,
    output  wire     [10:0]     c3_p3_rd_count          

);
 
//========================================================================================\
//**************Define Parameter and  Internal Signals**********************************
//========================================================================================/
//mig_7series_0_inst  
wire                [27:0]      app_addr                ;
wire                [ 2:0]      app_cmd                 ;
wire                            app_en                  ;
wire                [255:0]     app_wdf_data            ;
wire                            app_wdf_end             ;
wire                            app_wdf_wren            ;
wire                [255:0]     app_rd_data             ;
wire                            app_rd_data_end         ;
wire                            app_rd_data_valid       ;
wire                            app_rdy                 ;
wire                            app_wdf_rdy             ;
wire                [31:0]      app_wdf_mask            ;
wire                            ui_clk                  ;
wire                            ui_clk_sync_rst         ;
//a7_wr_ctrl_inst1
wire                            app_en_wr1              ;
wire                [ 3:0]      app_cmd_wr1             ;
wire                [27:0]      app_addr_wr1            ;
wire                            app_wdf_wren_wr1        ;
wire                [255:0]     app_wdf_data_wr1        ;
wire                [31:0]      app_wdf_mask_wr1        ;
wire                            app_wdf_end_wr1         ;
wire                            a7_wr_start_wr1         ;
wire                [ 6:0]      a7_wr_bl_wr1             ;        
wire                [27:0]      a7_wr_init_addr_wr1      ; 
wire                [255:0]     a7_wr_data_wr1           ;      
wire                [31:0]      a7_wr_mask_wr1           ;      
wire                            a7_wr_end_wr1            ;       
wire                            a7_wr_req_wr1            ;
//a7_wr_ctrl_inst2   
wire                            app_en_wr2              ;
wire                [ 3:0]      app_cmd_wr2             ;
wire                [27:0]      app_addr_wr2            ;
wire                            app_wdf_wren_wr2        ;
wire                [255:0]     app_wdf_data_wr2        ;
wire                [31:0]      app_wdf_mask_wr2        ;
wire                            app_wdf_end_wr2         ;
wire                            a7_wr_start_wr2         ;
wire                [ 6:0]      a7_wr_bl_wr2             ;        
wire                [27:0]      a7_wr_init_addr_wr2      ; 
wire                [255:0]     a7_wr_data_wr2           ;      
wire                [31:0]      a7_wr_mask_wr2           ;      
wire                            a7_wr_end_wr2            ;       
wire                            a7_wr_req_wr2            ; 
//a7_rd_ctrl_inst1
wire                            app_en_rd1              ;
wire                [ 3:0]      app_cmd_rd1             ;
wire                [27:0]      app_addr_rd1            ;
wire                            app_rd_data_valid_rd1   ;
wire                            a7_rd_start_rd1         ;
wire                [ 6:0]      a7_rd_bl_rd1            ;
wire                [27:0]      a7_rd_init_addr_rd1     ;
wire                [255:0]     a7_rd_data_rd1          ;
wire                            a7_rd_data_valid_rd1    ;
wire                            a7_rd_end_rd1           ;
//a7_rd_ctrl_inst2
wire                            app_en_rd2              ;
wire                [ 3:0]      app_cmd_rd2             ;
wire                [27:0]      app_addr_rd2            ;
wire                            app_rd_data_valid_rd2   ;
wire                            a7_rd_start_rd2         ;
wire                [ 6:0]      a7_rd_bl_rd2            ;
wire                [27:0]      a7_rd_init_addr_rd2     ;
wire                [255:0]     a7_rd_data_rd2          ;
wire                            a7_rd_data_valid_rd2    ;
wire                            a7_rd_end_rd2           ;
//arbit_inst
//wire                            c3_p0_cmd_empty         ;
//wire                            c3_p1_cmd_empty         ;
//wire                            c3_p2_cmd_empty         ;
//wire                            c3_p3_cmd_empty         ;

//rst delay
reg                 [ 5:0]      rst_cnt                 ;

      
//========================================================================================\
//**************     Main      Code        **********************************
//========================================================================================/

always @(posedge clk_200m or negedge rst_n)
    if(rst_n == 1'b0)
        rst_cnt             <=      6'b0;
    else if(locked == 1'b0) 
        rst_cnt             <=      6'b0;
    else if(rst_cnt[5] == 1'b0)
        rst_cnt             <=      rst_cnt + 1'b1;

mig_7series_0 mig_7series_0_inst (
    // Memory interface ports
    .ddr3_addr                      (ddr3_addr                      ),  // output [13:0]      ddr3_addr
    .ddr3_ba                        (ddr3_ba                        ),  // output [2:0]     ddr3_ba
    .ddr3_cas_n                     (ddr3_cas_n                     ),  // output            ddr3_cas_n
    .ddr3_ck_n                      (ddr3_ck_n                      ),  // output [0:0]       ddr3_ck_n
    .ddr3_ck_p                      (ddr3_ck_p                      ),  // output [0:0]       ddr3_ck_p
    .ddr3_cke                       (ddr3_cke                       ),  // output [0:0]        ddr3_cke
    .ddr3_ras_n                     (ddr3_ras_n                     ),  // output            ddr3_ras_n
    .ddr3_reset_n                   (ddr3_reset_n                   ),  // output          ddr3_reset_n
    .ddr3_we_n                      (ddr3_we_n                      ),  // output         ddr3_we_n
    .ddr3_dq                        (ddr3_dq                        ),  // inout [31:0]     ddr3_dq
    .ddr3_dqs_n                     (ddr3_dqs_n                     ),  // inout [3:0]       ddr3_dqs_n
    .ddr3_dqs_p                     (ddr3_dqs_p                     ),  // inout [3:0]       ddr3_dqs_p
    .init_calib_complete            (init_calib_complete            ),  // output           init_calib_complete
    .ddr3_cs_n                      (ddr3_cs_n                      ),  // output [0:0]       ddr3_cs_n
    .ddr3_dm                        (ddr3_dm                        ),  // output [3:0]     ddr3_dm
    .ddr3_odt                       (ddr3_odt                       ),  // output [0:0]        ddr3_odt
    // Application interface ports
    .app_addr                       (app_addr                       ),  // input [27:0]        app_addr
    .app_cmd                        (app_cmd                        ),  // input [2:0]      app_cmd
    .app_en                         (app_en                         ),  // input             app_en
    .app_wdf_data                   (app_wdf_data                   ),  // input [255:0]       app_wdf_data
    .app_wdf_end                    (app_wdf_end                    ),  // input                app_wdf_end
    .app_wdf_wren                   (app_wdf_wren                   ),  // input               app_wdf_wren
    .app_rd_data                    (app_rd_data                    ),  // output [255:0]       app_rd_data
    .app_rd_data_end                (app_rd_data_end                ),  // output           app_rd_data_end
    .app_rd_data_valid              (app_rd_data_valid              ),  // output         app_rd_data_valid
    .app_rdy                        (app_rdy                        ),  // output           app_rdy
    .app_wdf_rdy                    (app_wdf_rdy                    ),  // output           app_wdf_rdy
    .app_sr_req                     (1'b0                           ),  // input         app_sr_req
    .app_ref_req                    (1'b0                           ),  // input            app_ref_req
    .app_zq_req                     (1'b0                           ),  // input         app_zq_req
    .app_sr_active                  (                               ),  // output         app_sr_active
    .app_ref_ack                    (                               ),  // output           app_ref_ack
    .app_zq_ack                     (                               ),  // output            app_zq_ack
    .ui_clk                         (ui_clk                         ),  // output            ui_clk
    .ui_clk_sync_rst                (ui_clk_sync_rst                ),  // output           ui_clk_sync_rst
    .app_wdf_mask                   (app_wdf_mask                   ),  // input [31:0]        app_wdf_mask
    // System Clock Ports
    .sys_clk_i                      (clk_200m                       ),
    .sys_rst                        (locked                         ) // input sys_rst
);
arbit arbit_inst(
    //System Interfaces
    .rst_n                          (init_calib_complete            ),
    //DDR3 Interfaces   
    .ui_clk                         (ui_clk                         ),
    .app_addr                       (app_addr                       ),
    .app_cmd                        (app_cmd                        ),
    .app_en                         (app_en                         ),
    .app_wdf_data                   (app_wdf_data                   ),
    .app_wdf_end                    (app_wdf_end                    ),
    .app_wdf_wren                   (app_wdf_wren                   ),
    .app_rd_data_valid              (app_rd_data_valid              ),
    .app_wdf_mask                   (app_wdf_mask                   ),
    //a7_wr_ctrl_inst1  
    .app_en_wr1                     (app_en_wr1                     ),
    .app_cmd_wr1                    (app_cmd_wr1                    ),
    .app_addr_wr1                   (app_addr_wr1                   ),
    .app_wdf_wren_wr1               (app_wdf_wren_wr1               ),
    .app_wdf_data_wr1               (app_wdf_data_wr1               ),
    .app_wdf_mask_wr1               (app_wdf_mask_wr1               ),
    .app_wdf_end_wr1                (app_wdf_end_wr1                ),
    .a7_wr_start_w1                 (a7_wr_start_wr1                 ),
    .a7_wr_end_wr1                  (a7_wr_end_wr1                  ),
    .c3_p0_cmd_empty                (c3_p0_cmd_empty                ),
    //a7_wr_ctrl_inst1  
    .app_en_wr2                     (app_en_wr2                     ),
    .app_cmd_wr2                    (app_cmd_wr2                    ),
    .app_addr_wr2                   (app_addr_wr2                   ),
    .app_wdf_wren_wr2               (app_wdf_wren_wr2               ),
    .app_wdf_data_wr2               (app_wdf_data_wr2               ),
    .app_wdf_mask_wr2               (app_wdf_mask_wr2               ),
    .app_wdf_end_wr2                (app_wdf_end_wr2                ),
    .a7_wr_start_w2                 (a7_wr_start_wr2                 ),
    .a7_wr_end_wr2                  (a7_wr_end_wr2                  ),
    .c3_p1_cmd_empty                (c3_p1_cmd_empty                ),
    //a7_rd_ctrl_inst1  
    .app_en_rd1                     (app_en_rd1                     ),
    .app_cmd_rd1                    (app_cmd_rd1                    ),
    .app_addr_rd1                   (app_addr_rd1                   ),
    .app_rd_data_valid_rd1          (app_rd_data_valid_rd1          ), 
    .a7_rd_start_rd1                (a7_rd_start_rd1                ),
    .a7_rd_end_rd1                  (a7_rd_end_rd1                  ), 
    .c3_p2_cmd_empty                (c3_p2_cmd_empty                ),           
    //a7_rd_ctrl_inst2  
    .app_en_rd2                     (app_en_rd2                     ),
    .app_cmd_rd2                    (app_cmd_rd2                    ),
    .app_addr_rd2                   (app_addr_rd2                   ),
    .app_rd_data_valid_rd2          (app_rd_data_valid_rd2          ), 
    .a7_rd_start_rd2                (a7_rd_start_rd2                ),
    .a7_rd_end_rd2                  (a7_rd_end_rd2                  ),
    .c3_p3_cmd_empty                (c3_p3_cmd_empty                ) 
);


a7_wr_ctrl a7_wr_ctrl_inst1(
    //System Interfaces
    .rst_n                          (init_calib_complete            ),
    //DDR3 Interfaces
    .ui_clk                         (ui_clk                         ),
    .app_rdy                        (app_rdy                        ),
    .app_wdf_rdy                    (app_wdf_rdy                    ),
    .app_en                         (app_en_wr1                     ),
    .app_cmd                        (app_cmd_wr1                    ),
    .app_addr                       (app_addr_wr1                   ),
    .app_wdf_wren                   (app_wdf_wren_wr1               ),
    .app_wdf_data                   (app_wdf_data_wr1               ),
    .app_wdf_mask                   (app_wdf_mask_wr1               ),
    .app_wdf_end                    (app_wdf_end_wr1                ),
    //Communication Interfaces
    .a7_wr_start                    (a7_wr_start_wr1                ),
    .a7_wr_bl                       (a7_wr_bl_wr1                    ),
    .a7_wr_init_addr                (a7_wr_init_addr_wr1             ),
    .a7_wr_data                     (a7_wr_data_wr1                  ),
    .a7_wr_mask                     (a7_wr_mask_wr1                  ),
    .a7_wr_end                      (a7_wr_end_wr1                   ),
    .a7_wr_req                      (a7_wr_req_wr1                   )           
);

fifo_generator_0 cmd_wr1_fifo (
    .rst                            (~init_calib_complete 			),        // input wire rst
    .wr_clk                         (c3_p0_cmd_clk                  ),  // input wire wr_clk
    .rd_clk                         (ui_clk                         ),  // input wire rd_clk
    .din                            ({
   
   c3_p0_cmd_bl,c3_p0_cmd_byte_addr}),        // input wire [38 : 0] din
    .wr_en                          (c3_p0_cmd_en                   ),    // input wire wr_en
    .rd_en                          (a7_wr_start_wr1                ),    // input wire rd_en
    .dout                           ({
   
   a7_wr_bl_wr1,a7_wr_init_addr_wr1}),      // output wire [38 : 0] dout
    .full                           (c3_p0_cmd_full                 ),      // output wire full
    .empty                          (c3_p0_cmd_empty                )
);  

fifo_generator_1 data_wr1_fifo (
	.rst 							(~init_calib_complete 			),                      // input wire rst
	.wr_clk							(c3_p0_wr_clk					),                // input wire wr_clk
	.rd_clk							(ui_clk 						),                // input wire rd_clk
	.din 							({
   
   c3_p0_wr_mask,c3_p0_wr_data}	),                      // input wire [287 : 0] din
	.wr_en							(c3_p0_wr_en 					),                  // input wire wr_en
	.rd_en							(a7_wr_req_wr1 					),                  // input wire rd_en
	.dout							({
   
   a7_wr_mask_wr1,a7_wr_data_wr1}),                    // output wire [287 : 0] dout
	.full							(c3_p0_wr_full 					),                    // output wire full
	.empty 							(c3_p0_wr_empty 				),                  // output wire empty
	.wr_data_count 					(c3_p0_wr_count 				)  // output wire [10 : 0] wr_data_count
);   


a7_wr_ctrl a7_wr_ctrl_inst2(
    //System Interfaces
    .rst_n                          (init_calib_complete            ),
    //DDR3 Interfaces
    .ui_clk                         (ui_clk                         ),
    .app_rdy                        (app_rdy                        ),
    .app_wdf_rdy                    (app_wdf_rdy                    ),
    .app_en                         (app_en_wr2                     ),
    .app_cmd                        (app_cmd_wr2                    ),
    .app_addr                       (app_addr_wr2                   ),
    .app_wdf_wren                   (app_wdf_wren_wr2               ),
    .app_wdf_data                   (app_wdf_data_wr2               ),
    .app_wdf_mask                   (app_wdf_mask_wr2               ),
    .app_wdf_end                    (app_wdf_end_wr2                ),
    //Communication Interfaces
    .a7_wr_start                    (a7_wr_start_wr2                ),
    .a7_wr_bl                       (a7_wr_bl_wr2                    ),
    .a7_wr_init_addr                (a7_wr_init_addr_wr2             ),
    .a7_wr_data                     (a7_wr_data_wr2                  ),
    .a7_wr_mask                     (a7_wr_mask_wr2                  ),
    .a7_wr_end                      (a7_wr_end_wr2                   ),
    .a7_wr_req                      (a7_wr_req_wr2                   )           
);

fifo_generator_0 cmd_wr2_fifo (
    .rst                            (~init_calib_complete 			),        // input wire rst
    .wr_clk                         (c3_p1_cmd_clk                  ),  // input wire wr_clk
    .rd_clk                         (ui_clk                         ),  // input wire rd_clk
    .din                            ({
   
   c3_p1_cmd_bl,c3_p1_cmd_byte_addr}),        // input wire [38 : 0] din
    .wr_en                          (c3_p1_cmd_en                   ),    // input wire wr_en
    .rd_en                          (a7_wr_start_wr2                ),    // input wire rd_en
    .dout                           ({
   
   a7_wr_bl_wr2,a7_wr_init_addr_wr2}),      // output wire [38 : 0] dout
    .full                           (c3_p1_cmd_full                 ),      // output wire full
    
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值