FPGA statistics camera output-based on md9t112

Source: Internet
Author: User
Tags nets

Fpga hdl source program

FPGA statistics camera output pixels, form sizes, and so on

//----------------------------------------------------------------------------// user_logic.v - module//----------------------------------------------------------------------------//// ***************************************************************************// ** Copyright (c) 1995-2012 Xilinx, Inc.  All rights reserved.            **// **                                                                       **// ** Xilinx, Inc.                                                          **// ** XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS"         **// ** AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND       **// ** SOLUTIONS FOR XILINX DEVICES.  BY PROVIDING THIS DESIGN, CODE,        **// ** OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE,        **// ** APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION           **// ** THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT,     **// ** AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE      **// ** FOR YOUR IMPLEMENTATION.  XILINX EXPRESSLY DISCLAIMS ANY              **// ** WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE               **// ** IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR        **// ** REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF       **// ** INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS       **// ** FOR A PARTICULAR PURPOSE.                                             **// **                                                                       **// ***************************************************************************////----------------------------------------------------------------------------// Filename:          user_logic.v// Version:           1.00.a// Description:       User logic module.// Date:              Fri Jun 13 15:26:29 2014 (by Create and Import Peripheral Wizard)// Verilog Standard:  Verilog-2001//----------------------------------------------------------------------------// Naming Conventions://   active low signals:                    "*_n"//   clock signals:                         "clk", "clk_div#", "clk_#x"//   reset signals:                         "rst", "rst_n"//   generics:                              "C_*"//   user defined types:                    "*_TYPE"//   state machine next state:              "*_ns"//   state machine current state:           "*_cs"//   combinatorial signals:                 "*_com"//   pipelined or register delay signals:   "*_d#"//   counter signals:                       "*cnt*"//   clock enable signals:                  "*_ce"//   internal version of output port:       "*_i"//   device pins:                           "*_pin"//   ports:                                 "- Names begin with Uppercase"//   processes:                             "*_PROCESS"//   component instantiations:              "<ENTITY_>I_<#|FUNC>"//----------------------------------------------------------------------------`uselib lib=unisims_ver`uselib lib=proc_common_v3_00_amodule user_logic(  // -- ADD USER PORTS BELOW THIS LINE ---------------  // --USER ports added here   HREF_IN,  VSYNC_IN,  PCLK_IN,  // -- ADD USER PORTS ABOVE THIS LINE ---------------  // -- DO NOT EDIT BELOW THIS LINE ------------------  // -- Bus protocol ports, do not add to or delete   Bus2IP_Clk,                     // Bus to IP clock  Bus2IP_Resetn,                  // Bus to IP reset  Bus2IP_Data,                    // Bus to IP data bus  Bus2IP_BE,                      // Bus to IP byte enables  Bus2IP_RdCE,                    // Bus to IP read chip enable  Bus2IP_WrCE,                    // Bus to IP write chip enable  IP2Bus_Data,                    // IP to Bus data bus  IP2Bus_RdAck,                   // IP to Bus read transfer acknowledgement  IP2Bus_WrAck,                   // IP to Bus write transfer acknowledgement  IP2Bus_Error                    // IP to Bus error response  // -- DO NOT EDIT ABOVE THIS LINE ------------------); // user_logic// -- ADD USER PARAMETERS BELOW THIS LINE ------------// --USER parameters added here // -- ADD USER PARAMETERS ABOVE THIS LINE ------------// -- DO NOT EDIT BELOW THIS LINE --------------------// -- Bus protocol parameters, do not add to or deleteparameter C_NUM_REG                      = 4;parameter C_SLV_DWIDTH                   = 32;// -- DO NOT EDIT ABOVE THIS LINE --------------------// -- ADD USER PORTS BELOW THIS LINE -----------------// --USER ports added here input VSYNC_IN;input HREF_IN ;input PCLK_IN ;// -- ADD USER PORTS ABOVE THIS LINE -----------------// -- DO NOT EDIT BELOW THIS LINE --------------------// -- Bus protocol ports, do not add to or deleteinput                                     Bus2IP_Clk;input                                     Bus2IP_Resetn;input      [C_SLV_DWIDTH-1 : 0]           Bus2IP_Data;input      [C_SLV_DWIDTH/8-1 : 0]         Bus2IP_BE;input      [C_NUM_REG-1 : 0]              Bus2IP_RdCE;input      [C_NUM_REG-1 : 0]              Bus2IP_WrCE;output     [C_SLV_DWIDTH-1 : 0]           IP2Bus_Data;output                                    IP2Bus_RdAck;output                                    IP2Bus_WrAck;output                                    IP2Bus_Error;// -- DO NOT EDIT ABOVE THIS LINE --------------------//----------------------------------------------------------------------------// Implementation//----------------------------------------------------------------------------  // --USER nets declarations added here, as needed for user logic  // Nets for user logic slave model s/w accessible register example  reg        [C_SLV_DWIDTH-1 : 0]           slv_reg0;  reg        [C_SLV_DWIDTH-1 : 0]           slv_reg1;  reg        [C_SLV_DWIDTH-1 : 0]           slv_reg2;  reg        [C_SLV_DWIDTH-1 : 0]           slv_reg3;  wire       [3 : 0]                        slv_reg_write_sel;  wire       [3 : 0]                        slv_reg_read_sel;  reg        [C_SLV_DWIDTH-1 : 0]           slv_ip2bus_data;  wire                                      slv_read_ack;  wire                                      slv_write_ack;  integer                                   byte_index, bit_index;  // USER logic implementation added here  // ------------------------------------------------------  // Example code to read/write user logic slave model s/w accessible registers  //   // Note:  // The example code presented here is to show you one way of reading/writing  // software accessible registers implemented in the user logic slave model.  // Each bit of the Bus2IP_WrCE/Bus2IP_RdCE signals is configured to correspond  // to one software accessible register by the top level template. For example,  // if you have four 32 bit software accessible registers in the user logic,  // you are basically operating on the following memory mapped registers:  //   //    Bus2IP_WrCE/Bus2IP_RdCE   Memory Mapped Register  //                     "1000"   C_BASEADDR + 0x0  //                     "0100"   C_BASEADDR + 0x4  //                     "0010"   C_BASEADDR + 0x8  //                     "0001"   C_BASEADDR + 0xC  //   // ------------------------------------------------------  assign    slv_reg_write_sel = Bus2IP_WrCE[3:0],    slv_reg_read_sel  = Bus2IP_RdCE[3:0],    slv_write_ack     = Bus2IP_WrCE[0] || Bus2IP_WrCE[1] || Bus2IP_WrCE[2] || Bus2IP_WrCE[3],    slv_read_ack      = Bus2IP_RdCE[0] || Bus2IP_RdCE[1] || Bus2IP_RdCE[2] || Bus2IP_RdCE[3];  // implement slave model register(s)  always @( posedge Bus2IP_Clk )    begin      if ( Bus2IP_Resetn == 1'b0 )        begin          slv_reg0 <= 0;          slv_reg1 <= 0;          slv_reg2 <= 0;          slv_reg3 <= 0;        end      else        case ( slv_reg_write_sel )          4'b1000 :            for ( byte_index = 0; byte_index <= (C_SLV_DWIDTH/8)-1; byte_index = byte_index+1 )              if ( Bus2IP_BE[byte_index] == 1 )                slv_reg0[(byte_index*8) +: 8] <= Bus2IP_Data[(byte_index*8) +: 8];          4'b0100 :            for ( byte_index = 0; byte_index <= (C_SLV_DWIDTH/8)-1; byte_index = byte_index+1 )              if ( Bus2IP_BE[byte_index] == 1 )                slv_reg1[(byte_index*8) +: 8] <= Bus2IP_Data[(byte_index*8) +: 8];          4'b0010 :            for ( byte_index = 0; byte_index <= (C_SLV_DWIDTH/8)-1; byte_index = byte_index+1 )              if ( Bus2IP_BE[byte_index] == 1 )                slv_reg2[(byte_index*8) +: 8] <= Bus2IP_Data[(byte_index*8) +: 8];          4'b0001 :            for ( byte_index = 0; byte_index <= (C_SLV_DWIDTH/8)-1; byte_index = byte_index+1 )              if ( Bus2IP_BE[byte_index] == 1 )                slv_reg3[(byte_index*8) +: 8] <= Bus2IP_Data[(byte_index*8) +: 8];          default : begin            slv_reg0 <= slv_reg0;            slv_reg1 <= slv_reg1;            slv_reg2 <= slv_reg2;            slv_reg3 <= slv_reg3;                    end        endcase    end // SLAVE_REG_WRITE_PROC  // ------------------------------------------------------------  // Example code to drive IP to Bus signals  // ------------------------------------------------------------  assign IP2Bus_Data = (slv_read_ack == 1'b1) ? slv_ip2bus_data :  0 ;  assign IP2Bus_WrAck = slv_write_ack;  assign IP2Bus_RdAck = slv_read_ack;  assign IP2Bus_Error = 0;  wire rst ;   assign rst = slv_reg0[0];reg[3:0] frame_end = 0;reg[31:0] frame_count = 0;  //2 times of framealways @(posedge VSYNC_IN or negedge rst)beginif(1'b0 == rst)beginframe_count <= 32'h0;frame_end   <= 4'b0 ;endelsebeginframe_count <= frame_count + 1'b1;frame_end   <= frame_end   + 1'b1;endendreg[15:0] colum_count = 0;reg[11:0] colum_end  = 0;wire [15:0] colum_count_wire;assign colum_count_wire = ((4'hf != frame_end)&&(4'h1 != frame_end)) ? colum_count : 16'h0;always @(posedge HREF_IN or negedge rst )beginif(1'b0 == rst)begincolum_end<= 12'h0;colum_count <= 16'h0;endelsebeginif((1'b1 == VSYNC_IN)&&(4'h1 == frame_end))begincolum_count <= colum_count + 1'b1;colum_end   <= colum_end + 1'b1;endelse if (4'hf == frame_end)begincolum_count <= 16'h0;colum_end   <= colum_end + 1'b1;endelse begincolum_count <= colum_count;colum_end   <= colum_end + 1'b1;endendendreg[15:0] row_count = 0;wire[15:0] row_count_wire;assign row_count_wire = ((12'hfff != colum_end)&&(12'h02 != colum_end)) ? row_count : 16'h0;always @(posedge PCLK_IN or negedge rst )beginif (1'b0 == rst)beginrow_count  <= 16'h0;endelsebeginif((1'b1 == HREF_IN)&&(12'h02 == colum_end))beginrow_count <= row_count + 1'b1;endelse if (12'hfff == colum_end)beginrow_count <= 16'h00;endelse beginrow_count <= row_count;endendend//statiscal the time of a frame reg[31:0] pixel_count = 0;wire [31:0] pixel_count_wire;assign pixel_count_wire =  ((4'h1  != frame_end)&&(4'hf != frame_end)) ? pixel_count : 31'h0;always @(posedge Bus2IP_Clk or negedge rst)beginif (1'b0 == rst)beginpixel_count <= 32'h0;endelsebeginif(4'h1 == frame_end)beginpixel_count <= pixel_count + 1'b1 ;endelse if (4'hf == frame_end)beginpixel_count <= 31'h0;endelsebeginpixel_count <= pixel_count;endendendwire[31:0] row_colum_count;assign row_colum_count ={ colum_count_wire ,row_count_wire};  // implement slave model register read mux  always @( slv_reg_read_sel or slv_reg0 or slv_reg1 or slv_reg2 or slv_reg3 )    begin       case ( slv_reg_read_sel )        4'b1000 : slv_ip2bus_data <= slv_reg0;        4'b0100 : slv_ip2bus_data <= row_colum_count;        4'b0010 : slv_ip2bus_data <= frame_count;        4'b0001 : slv_ip2bus_data <= pixel_count_wire;        default : slv_ip2bus_data <= 0;      endcase    end // SLAVE_REG_READ_PROC  endmodule
SDK source code
  printf("**********VmodCAM Image Statis Reret******\n");  VMODCAM_STATISTICAL_mWriteSlaveReg0(XPAR_VMODCAM_STATISTICAL_0_BASEADDR,0,0);  DelayMs(50);  VMODCAM_STATISTICAL_mWriteSlaveReg0(XPAR_VMODCAM_STATISTICAL_0_BASEADDR,0,1);  printf("********************end*******************\n");
if(BTNL == Status){    Status = VMODCAM_STATISTICAL_mReadSlaveReg1(XPAR_VMODCAM_STATISTICAL_0_BASEADDR,0);    printf("VMODCAM_STATISTICAL Image Size is               :%d  x  %d\n",Status&0xffff,Status>>16);    Status = VMODCAM_STATISTICAL_mReadSlaveReg2(XPAR_VMODCAM_STATISTICAL_0_BASEADDR,0);    printf("VMODCAM_STATISTICAL Image Frame Num is          :%d      \n",Status);    Status = VMODCAM_STATISTICAL_mReadSlaveReg3(XPAR_VMODCAM_STATISTICAL_0_BASEADDR,0);    printf("VMODCAM_STATISTICAL Every Image Have clk Num is :%d  \n",Status);    printf("VMODCAM_STATISTICAL Every Image Total Time is   :%dms  \n",Status/100000);}

Output rgb565 Analysis

First, set the output mode to rgb565: IIC to set [rx2797] to 0x0020

 

0x33,0x8C,0x27,0x97, // Output format; Context B shadow0x33,0x90,0x00,0x20, // RGB with BT656 codes
0x33,0x8C,0x27,0x07, // Output width; Context B0x33,0x90,0x02,0x80, // 6400x33,0x8C,0x27,0x09, // Output height; Context B0x33,0x90,0x01,0xe0, // 480

 



Note: vmodcam_statistical image size is: 1280x480 is actually the standard 640x480, that is, 480 rows and 640 columns. See

Rgb565, that is, one pixel occupies two odd bytes, each of which is a R7-R3 G7-G5.

Even the bytes are G4-G3 B7-B3, G occupies 6 places

Others are similar.

 

 

 

 

 

Exam:

Datasheet 1/4-inch 2mp System-on-a-chip (SOC) CMOS Digital Image Sensor

Http://blog.csdn.net/xiabodan/article/details/30256297

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

As the lab teacher said, simply revealing the mood of play in the space means that you are not doing things or learning. I just want to say sad for them. I really don't know shame. I thought nobody wanted them to be crazy.

 

FPGA statistics camera output-based on md9t112

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.