当前位置: 首页 > news >正文

Xilinx FPGA MIPI DSI TX Subsystem 仿真笔记

MIPI DSI TX Subsystem IP接口如图。

测试文件:

`timescale 1ns / 100ps

module Parallel2DSI_tb();


parameter periode_1     = 20; 
parameter periode_2     = 20;
parameter periode_3     = 20;
parameter CLKT = 2;

reg rstn;
reg i_clk;

parameter C_M_AXI_ADDR_WIDTH = 7;

//s_axi
  wire    s_axi_awready   ; 
  reg    s_axi_awvalid   ; 
  reg  [C_M_AXI_ADDR_WIDTH-1:0]  s_axi_awaddr   ;  
  wire    s_axi_arready   ; 
  reg    s_axi_arvalid   ; 
  reg  [C_M_AXI_ADDR_WIDTH-1:0]  s_axi_araddr   ; 
  wire    s_axi_wready   ; 
  reg    s_axi_wvalid   ; 
  reg  [31:0]  s_axi_wdata   ; 
  reg  [3:0]  s_axi_wstrb   ; 
  reg    s_axi_rready   ; 
  wire    s_axi_rvalid   ; 
  wire  [31:0]  s_axi_rdata   ; 
  wire  [1:0]  s_axi_rresp   ; 
  reg    s_axi_bready   ; 
  wire    s_axi_bvalid   ; 
  wire  [1:0]  s_axi_bresp   ; 
  
  
//s_axis  
  reg    s_axis_aclk   ; 
  reg    s_axis_aresetn   ; 
  // reg    s_axis_tvalid   ; 
  wire    s_axis_tvalid   ; 
  wire    s_axis_tready   ; 
  reg  [7:0]  s_axis_tdata   ; 
  // reg    s_axis_tlast   ; 
  wire    s_axis_tlast   ; 
  // reg  [95:0]  s_axis_tuser   ; 
  wire  [0:0]  s_axis_tuser   ; 
  reg  [0:0]  s_axis_tkeep   ; 
  reg  [1:0]  s_axis_tdest   ;     
  
  
wire  mipi_phy_if_clk_hs_n;
wire  mipi_phy_if_clk_hs_p;
wire  mipi_phy_if_clk_lp_n;
wire  mipi_phy_if_clk_lp_p;
wire  [3 : 0] mipi_phy_if_data_hs_n;
wire  [3 : 0] mipi_phy_if_data_hs_p;
wire  [3 : 0] mipi_phy_if_data_lp_n;
wire  [3 : 0] mipi_phy_if_data_lp_p;  
  
  
wire interrupt;
wire  s_axi_init_rdy;

   
    initial begin                       
          rstn       = 1'b0; 
        s_axis_aresetn = 0;
        s_axis_tdest = 0;   
        s_axis_aclk = 0;
        s_axis_tdata = 0;   
        s_axis_tkeep = 1'b1; 
        //s_axi_bready = 1'b0; 
                       
                                
      #1600;
      #1600 rstn = 1'b1;  
      
        #90000;
        s_axis_aresetn = 1;        
      
    end

    initial  begin
           s_axi_awaddr    = 7'd0;
           s_axi_araddr    = 7'd0;
           s_axi_awvalid   = 1'b0;
           s_axi_wvalid    = 1'b0;
           s_axi_arvalid   = 1'b0;
           s_axi_rready   = 1'b0;
           s_axi_bready   = 1'b0;
           s_axi_wdata = 32'h0104_15bc;
           s_axi_wstrb = 4'b1001;
       #99000;           
           s_axi_awaddr    = 7'd0;
           s_axi_araddr    = 7'd0;
           s_axi_awvalid   = 1'b1;
           s_axi_wvalid    = 1'b1;
           s_axi_arvalid   = 1'b1;
           s_axi_rready   = 1'b1;
           s_axi_bready   = 1'b1;
           s_axi_wdata = 32'h0104_15bc;
           s_axi_wstrb = 4'b1001;           
           
           
           wait(s_axi_awready == 1'b1) #(20 * 1) s_axi_awvalid = 1'b0;
           
           
    end

    initial  begin
           i_clk    = 1'b0;
    end  


    always i_clk    = #periode_1  ~i_clk;
    always #20  s_axis_aclk = ~s_axis_aclk;
    
  
    
    
//assign s_axis_aresetn = locked;
    
reg [10:0]  cnt_h = 0;
reg [10:0]  cnt_v = 0;

// 128*32
always @(posedge s_axis_aclk)
    if(s_axis_aresetn && s_axi_init_rdy==1 )
    begin
        if(s_axis_tready)
            if(cnt_h==200)
                cnt_h <= 40;
            else
                cnt_h <= cnt_h + 1;
            
        if(cnt_h==200)
            if(cnt_v >= 31)
                cnt_v <= 0;
            else
                cnt_v <= cnt_v + 1;
    end
    
//----------------------------------------------------------------------------------
 
// assign s_axis_tvalid = 0;
assign s_axis_tvalid = (cnt_h >= 73) ? 1:0;
assign s_axis_tuser[0] = (cnt_v==0 && cnt_h==73)? 1 : 0 ;
assign s_axis_tlast = (cnt_h==200)? 1 : 0 ;
// s_axis_tuser[0] = 0;  //Frame start
 
always @(posedge s_axis_aclk)
    if(s_axis_tvalid && s_axis_tready) begin
        s_axis_tdata[7:0]  <= s_axis_tdata[7:0]  + 1;
    end

    
clk_wiz_0 clk_wiz_0inst
(
.clk_in1        (i_clk)       
,.resetn     (rstn) 
,.clk_out1     (dphy_clk_200M)   
,.clk_out2     (txclkesc_in)                           
,.clk_out3     (oserdes_clk_in)   
,.clk_out4     (oserdes_clk90_in)   
,.clk_out5     (txbyteclkhs_in)   
,.locked     (locked)   
);

mipi_dsi_tx_subsystem_0 tx_inst
(
.s_axis_aclk        (s_axis_aclk)       
,.s_axis_aresetn     (s_axis_aresetn) 
,.dphy_clk_200M     (dphy_clk_200M)   
,.txclkesc_out     (txclkesc_out)                           
,.oserdes_clk_out    (oserdes_clk_out)     
,.txbyteclkhs    (txbyteclkhs)     
,.oserdes_clkdiv_out    (oserdes_clkdiv_out)  
,.system_rst_out    (system_rst_out)  
,.mmcm_lock_out    (mmcm_lock_out)  
,.interrupt (interrupt) 
,.s_axi_araddr (s_axi_araddr) 
,.s_axi_arready   (s_axi_arready)   
,.s_axi_arvalid   (s_axi_arvalid)   
,.s_axi_awaddr   (s_axi_awaddr)   
,.s_axi_awready   (s_axi_awready)     
,.s_axi_awvalid   (s_axi_awvalid)   
,.s_axi_bready   (s_axi_bready)   
,.s_axi_bresp   (s_axi_bresp)  
,.s_axi_bvalid   (s_axi_bvalid)  
,.s_axi_rdata   (s_axi_rdata)  
,.s_axi_rready   (s_axi_rready)  
,.s_axi_rresp   (s_axi_rresp)  
,.s_axi_rvalid   (s_axi_rvalid)  
,.s_axi_wdata   (s_axi_wdata)  
,.s_axi_wready   (s_axi_wready)  
,.s_axi_wstrb   (s_axi_wstrb)  
,.s_axi_wvalid   (s_axi_wvalid)  
,.s_axis_tdata   (s_axis_tdata)  
,.s_axis_tlast   (s_axis_tlast)  
,.s_axis_tready   (s_axis_tready)  
,.s_axis_tuser   (s_axis_tuser)  
,.s_axis_tvalid   (s_axis_tvalid)  
,.mipi_phy_if_clk_hs_n   (mipi_phy_if_clk_hs_n)  
,.mipi_phy_if_clk_hs_p   (mipi_phy_if_clk_hs_p)  
,.mipi_phy_if_clk_lp_n   (mipi_phy_if_clk_lp_n)  
,.mipi_phy_if_clk_lp_p   (mipi_phy_if_clk_lp_p)  
,.mipi_phy_if_data_hs_n   (mipi_phy_if_data_hs_n)  
,.mipi_phy_if_data_hs_p   (mipi_phy_if_data_hs_p)  
,.mipi_phy_if_data_lp_n   (mipi_phy_if_data_lp_n)  
,.mipi_phy_if_data_lp_p   (mipi_phy_if_data_lp_p) 
);

endmodule
       
启动仿真后,发现MIPI并没有信号发出来。

查看指导,需要先对MIPI DSI TX Controller Core Registers进行初始化。

初始化后,读寄存器查看Controller ready是否OK。OK后才可以继续操作。

初始化步骤:软件复位Soft Reset,等待Soft Reset释放后Controller readyOK,初始化参数和模式等,最后启动Core Enable,发送视频流。

配置例子:

        按照上面配置后,发送视频流。MIPI接口正常发出MIPI波形。MIPI DSI TX Subsystem可以正常工作。

MIPI  PHY

欢迎讨论交流。

微:moning_hello

相关文章:

  • 【Langchain】构建RAG基本流程
  • QT使用AES加解密,openssl及QCA问题记录
  • 综合笔试知识点
  • 文字转语音
  • 关于汉语普通话元音音位最好归纳为几个的问题
  • 能上Nature封面的idea!强化学习+卡尔曼滤波
  • 【Electron】应用打包教程(包含 C++ 后端 + 前端)
  • Spring AI与Spring Modulith核心技术解析
  • springboot的test模块使用Autowired注入失败
  • 【Linux】Linux进程间通讯-共享内存
  • FSMC扩展外部SRAM
  • Linux Gnome壁纸
  • 言思集交流社区(SpringBoot)
  • Linux中su与sudo命令的区别:权限管理的关键差异解析
  • CMake基础:构建流程详解
  • fast-reid部署
  • Linux 系统、代码与服务器进阶知识深度解析
  • 使用 SAM + YOLO + ResNet 检测工业开关状态:从零到部署
  • CMake检测C编译器标志功能
  • Hash类型
  • 营销型网站建设的价格/网络营销工程师是做什么的
  • 江苏首天建设集团网站/百度移动应用
  • 合肥专业手机网站哪家好/黄页推广
  • 门户网站模板图片/济南百度竞价开户
  • 福州网站制作建设/易搜搜索引擎
  • qq群引流推广网站/手机百度极速版