DDR3 APP接口代码

用了两个FIFO,和我AXI的写法差不多其实。

其他放在Github了。

TOP

module dma_app_topv2 (
    input   wire    I_Rst_n,//SYS RST
    input   wire    I_Clk  ,//SYS CLK

    output wire   [13:0]	ddr3_addr           ,
    output wire   [2:0]	    ddr3_ba             ,
    output wire   		    ddr3_cas_n          ,
    output wire   [0:0]	    ddr3_ck_n           ,
    output wire   [0:0]	    ddr3_ck_p           ,
    output wire   [0:0]	    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            ,
    input  wire             uart_rx             ,
    //hdmi
    output  wire            HDMI_CLK_P          ,
    output  wire            HDMI_CLK_N          ,
    output  wire    [2:0]   HDMI_TX_P           ,
    output  wire    [2:0]   HDMI_TX_N           
);
//------------------------------------------------------------------------------//
    //PLL
    wire                    O_CLK_200MHZ        ;
    wire                    O_CLK_50MHZ         ;
    wire                    O_CLK_100MHZ        ;
    wire                    PLL0_LOCK           ;
    wire                    PLL1_LOCK           ;
    wire                    CLK_PIXEL_BASE      ;
    wire                    CLK_PIXEL_5X        ;
    //DDR3
    wire                    ui_clk              ;
    wire          [31:0]    app_wdf_mask        ;
    //app
    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    			    app_sr_req          ;        
    wire    			    app_ref_req         ;        
    wire    			    app_zq_req          ;        
    wire    			    app_sr_active       ;                
    wire    			    app_ref_ack         ;                
    wire    			    app_zq_ack          ; 
    //wr ctrl
    wire                    ex_wr_start         ;
    wire          [27:0]    ex_wr_addr          ;
    wire          [2:0]     ex_wr_cmd           ;
    wire          [7:0]     ex_wr_burst_len     ;
    wire          [255:0]   ex_wr_data          ;
    wire          [31:0]    ex_wr_wdf_mask      ;

    wire          [27:0]	wr_app_addr         ;        
    wire          [2:0]		wr_app_cmd          ;    
    wire         			wr_app_en           ;  
    //wr aribe
    wire                    ex_wr_burst_start   ;
    wire                    ex_wr_burst_end     ;
    //wr fifo
    wire                    ex_wr_rd_en         ;
    //rd ctrl
    wire                    ex_rd_start         ;
    wire          [27:0]    ex_rd_addr          ;
    wire          [2:0]     ex_rd_cmd           ;
    wire          [7:0]     ex_rd_burst_len     ;
    wire          [255:0]   ex_rd_data          ;
    //rd fifo
    wire                    ex_rd_wr_en         ;
    //rd aribe
    wire                    ex_rd_burst_start   ;
    wire                    ex_rd_burst_end     ;

    wire          [27:0]	rd_app_addr         ;        
    wire          [2:0]		rd_app_cmd          ;    
    wire         			rd_app_en           ; 

    //uart
    wire          [7:0]     uart_rx_data        ;
    wire                    uart_rx_vaild       ;
    //hdmi
    wire                    O_Pre_De            ;
    wire                    O_Pre_Vsync         ;
    wire                    O_Pre_Hsync         ;
    wire                    I_Post_De           ;
    wire                    I_Post_Vsync        ;
    wire                    I_Post_Hsync        ;
    wire          [15:0]    hdmi_rd_data        ;

//------------------------------------------------------------------------------//
//tmp
    // wr data fifo
    wire                    wr_fifo_wclk        ;
    wire          [255:0]   wr_fifo_wdata       ;
    wire                    wr_fifo_wren        ;
    // rd data fifo
    wire                    rd_fifo_rclk        ;
    wire                    rd_fifo_rden        ;
    wire          [255:0]   rd_fifo_rdata       ;
//pre
    wire                    Pre_wren            ;
    wire          [255:0]   Pre_wdata           ;
    wire                    rd_start_rl         ;

//------------------------------------------------------------------------------//
    wire                    rd_fifo_req         ;
    wire                    wr_fifo_req         ;
    wire                    display_start       ;

    assign  app_sr_req   = 1'b0;
    assign  app_ref_req  = 1'b0;
    assign  app_zq_req   = 1'b0;
    assign  ex_wr_wdf_mask = 32'b0;

    assign  app_addr = rd_app_addr|wr_app_addr;
    assign  app_en   = rd_app_en|wr_app_en;
    assign  app_cmd  = (wr_app_en)?(wr_app_cmd):(rd_app_cmd);

    assign  rd_fifo_rclk = CLK_PIXEL_BASE;
    assign  wr_fifo_wclk = O_CLK_50MHZ   ;

//------------------------------------------------------------------------------//

  PLL_0_APP PLL_0_APP
   (
    // Clock out ports
    .O_CLK_200MHZ( O_CLK_200MHZ ),     // output O_CLK_200MHZ
    .O_CLK_50MHZ ( O_CLK_50MHZ  ),     // output O_CLK_50MHZ 
    .O_CLK_100MHZ( O_CLK_100MHZ ),
    // Status and control signals
    .resetn     ( I_Rst_n       ),     // input resetn
    .locked     ( PLL0_LOCK     ),     // output locked
   // Clock in ports
    .I_CLK_50MHZ( I_Clk         )      // input I_CLK_50MHZ
);
  PLL_1 PLL_1
   (
    // Clock out ports
    .CLK_PIXEL_BASE ( CLK_PIXEL_BASE  ), // output CLK_PIXEL_BASE
    .CLK_PIXEL_5X   ( CLK_PIXEL_5X    ), // output CLK_PIXEL_5X
    // Status and control signals
    .resetn         ( PLL0_LOCK       ), // input resetn
    .locked         ( PLL1_LOCK       ), // output locked
   // Clock in ports
    .clk_in1        ( O_CLK_100MHZ    )  // input clk_in1
);

rx_teach Uart_Rx(
    .Sys_clk                 ( O_CLK_50MHZ         ),
    .Rst_n                   ( PLL0_LOCK           ),
    .data_in                 ( uart_rx             ),
    .data_receive            ( uart_rx_data        ),
    .rx_done                 ( uart_rx_vaild       )
);

uart_buff #(
    .IW ( 8    ),
    .OW ( 256  ))
 u_uart_buff (
    .sys_clk                 ( O_CLK_50MHZ       ),
    .rst_n                   ( PLL0_LOCK         ),
    .uart_rx_vaild           ( uart_rx_vaild     ),
    .uart_rx_data            ( uart_rx_data      ),

    .uart_8to256_data        ( wr_fifo_wdata     ),
    .uart_8to256_vaild       ( wr_fifo_wren      )
);

// hdmi_top
hdmi_top #(
    .H_ActiveSize ( 1024                   ),
    .H_SyncStart  ( 1024 + 24              ),
    .H_SyncEnd    ( 1024 + 24 + 136        ),
    .H_FrameSize  ( 1024 + 24 + 136 + 160  ),
    .V_ActiveSize ( 768                    ),
    .V_SyncStart  ( 768 + 3                ),
    .V_SyncEnd    ( 768 + 3 + 6            ),
    .V_FrameSize  ( 768 + 3 + 6 + 29       ))
 HDMI_TOP (
    .Pixl_CLK                ( CLK_PIXEL_BASE   ),
    .Pixl_5xCLK              ( CLK_PIXEL_5X     ),
    .Rst_n                   ( PLL1_LOCK && init_calib_complete && display_start),
    .I_Pixel_Data            ( hdmi_rd_data     ),
    .I_PLL_LOCK              ( PLL1_LOCK        ),

    .HDMI_CLK_P              ( HDMI_CLK_P       ),
    .HDMI_CLK_N              ( HDMI_CLK_N       ),
    .HDMI_TX_P               ( HDMI_TX_P        ),
    .HDMI_TX_N               ( HDMI_TX_N        ),
    .O_Pre_De                ( O_Pre_De         ),
    .O_Pre_Vsync             ( O_Pre_Vsync      ),
    .O_Pre_Hsync             ( O_Pre_Hsync      ),
    .I_Post_De               ( I_Post_De        ),
    .I_Post_Vsync            ( I_Post_Vsync     ),
    .I_Post_Hsync            ( I_Post_Hsync     )
);

hdmi_buff #(
    .Iw ( 256 ),
    .Ow ( 16  ))
 HDMI_Buff (
    .rst_n                   ( PLL1_LOCK && init_calib_complete && display_start),
    .hdmi_clk                ( CLK_PIXEL_BASE           ),
    .hdmi_Pre_de             ( O_Pre_De                 ),
    .hdmi_Pre_hsync          ( O_Pre_Hsync              ),
    .hdmi_Pre_vsync          ( O_Pre_Vsync              ),
    .fifo_rd_data            ( rd_fifo_rdata            ),// rd fifo rd data

    .hdmi_Post_en            ( I_Post_De                ),
    .hdmi_Post_hsync         ( I_Post_Hsync             ),
    .hdmi_Post_vsync         ( I_Post_Vsync             ),
    .hdmi_rd_data            ( hdmi_rd_data             ),
    .fifo_rd_en              ( rd_fifo_rden             )// rd fifo rd en
);

app_arbit  app_arbit_inst0 (
    .I_clk                   ( ui_clk              ),
    .I_Rst_n                 ( init_calib_complete ),
    //rd
    .I_ch0_req               ( rd_fifo_req         ),
    .I_ch0_start             ( ex_rd_burst_start   ),
    .I_ch0_end               ( ex_rd_burst_end     ),
    //wr
    .I_ch1_req               ( wr_fifo_req         ),
    .I_ch1_start             ( ex_wr_burst_start   ),
    .I_ch1_end               ( ex_wr_burst_end     ),
    //vaild
    .O_ch0_vaild             ( ex_rd_start         ),
    .O_ch1_vaild             ( ex_wr_start         )
);

 app_dma_wr  app_dma_wr_inst0 (
     .I_sys_clk               ( ui_clk              ),
     .I_Rst_n                 ( init_calib_complete ),
     .ex_wr_start             ( ex_wr_start         ),
     .ex_wr_addr              ( ex_wr_addr          ),
     .ex_wr_cmd               ( ex_wr_cmd           ),
     .ex_wr_burst_len         ( ex_wr_burst_len     ),
     .ex_wr_data              ( ex_wr_data          ),
     .ex_wr_wdf_mask          ( ex_wr_wdf_mask      ),
     .app_rdy                 ( app_rdy             ),
     .app_wdf_rdy             ( app_wdf_rdy         ),
  
     .ex_wr_burst_start       ( ex_wr_burst_start   ),
     .ex_wr_burst_end         ( ex_wr_burst_end     ),
     .ex_wr_rd_en             ( ex_wr_rd_en         ),
     .app_addr                ( wr_app_addr         ),
     .app_cmd                 ( wr_app_cmd          ),
     .app_en                  ( wr_app_en           ),
     .app_wdf_data            ( app_wdf_data        ),
     .app_wdf_end             ( app_wdf_end         ),
     .app_wdf_wren            ( app_wdf_wren        ),
     .app_wdf_mask            ( app_wdf_mask        )
 );

app_dma_rd  app_dma_rd_inst0 (
    .I_sys_clk               ( ui_clk              ),
    .I_Rst_n                 ( init_calib_complete ),
    .ex_rd_start             ( ex_rd_start         ),
    .ex_rd_addr              ( ex_rd_addr          ),
    .ex_rd_cmd               ( ex_rd_cmd           ),
    .ex_rd_burst_len         ( ex_rd_burst_len     ),
    .app_rd_data             ( app_rd_data         ),
    .app_rd_data_end         ( app_rd_data_end     ),
    .app_rd_data_valid       ( app_rd_data_valid   ),
    .app_rdy                 ( app_rdy             ),

    .ex_rd_data              ( ex_rd_data          ),
    .ex_rd_wr_en             ( ex_rd_wr_en         ),
    .ex_rd_burst_start       ( ex_rd_burst_start   ),
    .ex_rd_burst_end         ( ex_rd_burst_end     ),
    .app_addr                ( rd_app_addr         ),
    .app_cmd                 ( rd_app_cmd          ),
    .app_en                  ( rd_app_en           )
);


fifo_ctrl #(
    .wr_base_addr    ( 0               ),
    .rd_base_addr    ( 0               ),
    .wr_burst_length ( 'd64            ),
    .rd_burst_length ( 'd64            ),
    .IW              ( 'd1024          ),
    .IH              ( 'd768           ),
    .Pixel_wd        ( 'd2             ))
 u_fifo_ctrl (
    .rst_n                   ( init_calib_complete          ),
    .rd_start                ( display_start                ),
    //wr data wr
    .wr_fifo_rst_n           ( init_calib_complete          ),
    .wr_fifo_wclk            ( wr_fifo_wclk                 ),
    .wr_fifo_wdata           ( wr_fifo_wdata                ),
    .wr_fifo_wren            ( wr_fifo_wren                 ),
    //wr data rd                
    .wr_fifo_rclk            ( ui_clk                       ),
    .wr_fifo_rden            ( ex_wr_rd_en                  ),
    .wr_cmd_rden             ( ex_wr_burst_start            ),
    //rd data wr
    .rd_fifo_rst_n           ( init_calib_complete          ),
    .rd_fifo_wclk            ( ui_clk                       ),
    .rd_fifo_wdata           ( ex_rd_data                   ),
    .rd_fifo_wren            ( ex_rd_wr_en                  ),
    //rd data rd
    .rd_fifo_rclk            ( rd_fifo_rclk                 ),
    .rd_fifo_rden            ( rd_fifo_rden                 ),
    .rd_cmd_rden             ( ex_rd_burst_start            ),
    //output
    //wr data rd
    .wr_fifo_rdata           ( ex_wr_data                   ),
    .wr_data_req             ( wr_fifo_req                  ),//req 
    //wr cmd rd
    .wr_cmd_rdcmd            ( ex_wr_cmd                    ),
    .wr_cmd_rdbl             ( ex_wr_burst_len              ),
    .wr_cmd_rdaddr           ( ex_wr_addr                   ),
    //rd data rd
    .rd_fifo_rdata           ( rd_fifo_rdata                ),
    .rd_data_req             ( rd_fifo_req                  ),//req
    //rd cmd rd
    .rd_cmd_rdcmd            ( ex_rd_cmd                    ),
    .rd_cmd_rdbl             ( ex_rd_burst_len              ),
    .rd_cmd_rdaddr           ( ex_rd_addr                   )
);

  mig_7series_0 MIG_APP (
    // 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                     ( app_sr_req         ),  // input			app_sr_req
    .app_ref_req                    ( app_ref_req        ),  // input			app_ref_req
    .app_zq_req                     ( app_zq_req         ),  // input			app_zq_req
    .app_sr_active                  ( app_sr_active      ),  // output			app_sr_active     
    .app_ref_ack                    ( app_ref_ack        ),  // output			app_ref_ack       
    .app_zq_ack                     ( app_zq_ack         ),  // output			app_zq_ack        
    //Ui 
    .ui_clk                         ( ui_clk             ),  // output			ui_clk
    .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                      ( O_CLK_200MHZ      ),
    .sys_rst                        ( PLL0_LOCK         ) // input sys_rst
    );
endmodule

相关推荐

  1. DDR3 APP接口代码

    2024-03-17 22:56:01       38 阅读
  2. DDR3 NATIVE接口

    2024-03-17 22:56:01       37 阅读
  3. 3dsr代码①测试

    2024-03-17 22:56:01       34 阅读
  4. 3dsr代码②训练

    2024-03-17 22:56:01       36 阅读
  5. 认识DDR3

    2024-03-17 22:56:01       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-17 22:56:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-17 22:56:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-17 22:56:01       87 阅读
  4. Python语言-面向对象

    2024-03-17 22:56:01       96 阅读

热门阅读

  1. AIGC赋能,天猫精灵、华米科技“抢跑”智能穿戴

    2024-03-17 22:56:01       39 阅读
  2. C语言经典面试题目(七)

    2024-03-17 22:56:01       41 阅读
  3. UDP协议

    UDP协议

    2024-03-17 22:56:01      43 阅读
  4. C语言如何引⽤⼆维数组元素?

    2024-03-17 22:56:01       47 阅读
  5. 24计算机考研调剂 | 南昌航空大学

    2024-03-17 22:56:01       45 阅读
  6. 什么是区块链,如何学习区块链

    2024-03-17 22:56:01       41 阅读
  7. 线程的通俗解释

    2024-03-17 22:56:01       43 阅读
  8. Jupyter Notebook 怎么在虚拟环境之间切换

    2024-03-17 22:56:01       40 阅读
  9. Winform编程详解十三:OpenFileDialog 打开文件对话框

    2024-03-17 22:56:01       37 阅读
  10. 接入DDoS高防后如何设置源站保护

    2024-03-17 22:56:01       52 阅读
  11. Android 11存储权限兼容

    2024-03-17 22:56:01       37 阅读
  12. lqb省赛日志[11/37] -[dfs]

    2024-03-17 22:56:01       36 阅读
  13. 用python制作专属生日蛋糕

    2024-03-17 22:56:01       39 阅读