AX7A200教程(9): ov5640摄像头输出显示720p视频

一,功能框图

ov5640摄像头视频通过ddr3缓存后,最后使用hdmi接口进行输出显示

二,摄像头硬件说明

2.1,像头硬件管脚

如下图所示,一共18个管脚

2.2,摄像头电源初始化时序

因这个ov5640摄像头是买的老摄像头,所以需要对Reset和PWDN的电源上电进行控制,控制时序如下图所示。

2.3,电源初始化程序

其中cmos_pwdn和cmos_rst_n为电源初始化管脚,初始化完成后,power_done会输出高电平

2.3,摄像头硬件实物

 开发板摄像头硬件连接三,摄像头初始化配置

摄像头初始化配置如下图所示,这里将摄像头的分辨率设置为720p输出显示,注意这里摄像头初始化配置是等摄像头电源配置完成后开始摄像头初始化配置,只有当power_done拉高后开始初始化配置。

摄像头720p配置文件 

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/12/17 16:03:26
// Design Name: 
// Module Name: lut_ov5640_rgb565_1280_720
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module lut_ov5640_rgb565_1280_720(
	input[9:0]             lut_index,   //Look-up table address
	output reg[31:0]       lut_data     //Device address (8bit I2C address), register address, register data
);

always@(*)
begin
	case(lut_index)			  
		10'd0:   lut_data <= {8'h78 , 24'h310311};
		10'd1:   lut_data <= {8'h78 , 24'h300882};
		10'd2:   lut_data <= {8'h78 , 24'h300842};
		10'd3:   lut_data <= {8'h78 , 24'h310303};
		10'd4:   lut_data <= {8'h78 , 24'h3017ff};
		10'd5:   lut_data <= {8'h78 , 24'h3018ff};
		10'd6:   lut_data <= {8'h78 , 24'h30341A};
		10'd7:   lut_data <= {8'h78 , 24'h303713};
		10'd8:   lut_data <= {8'h78 , 24'h310801};
		10'd9:   lut_data <= {8'h78 , 24'h363036};
		10'd10:  lut_data <= {8'h78 , 24'h36310e};
		10'd11:  lut_data <= {8'h78 , 24'h3632e2};
		10'd12:  lut_data <= {8'h78 , 24'h363312};
		10'd13:  lut_data <= {8'h78 , 24'h3621e0};
		10'd14:  lut_data <= {8'h78 , 24'h3704a0};
		10'd15:  lut_data <= {8'h78 , 24'h37035a};
		10'd16:  lut_data <= {8'h78 , 24'h371578};
		10'd17:  lut_data <= {8'h78 , 24'h371701};
		10'd18:  lut_data <= {8'h78 , 24'h370b60};
		10'd19:  lut_data <= {8'h78 , 24'h37051a};
		10'd20:  lut_data <= {8'h78 , 24'h390502};
		10'd21:  lut_data <= {8'h78 , 24'h390610};
		10'd22:  lut_data <= {8'h78 , 24'h39010a};
		10'd23:  lut_data <= {8'h78 , 24'h373112};
		10'd24:  lut_data <= {8'h78 , 24'h360008};
		10'd25:  lut_data <= {8'h78 , 24'h360133};
		10'd26:  lut_data <= {8'h78 , 24'h302d60};
		10'd27:  lut_data <= {8'h78 , 24'h362052};
		10'd28:  lut_data <= {8'h78 , 24'h371b20};
		10'd29:  lut_data <= {8'h78 , 24'h471c50};
		10'd30:  lut_data <= {8'h78 , 24'h3a1343};
		10'd31:  lut_data <= {8'h78 , 24'h3a1800};
		10'd32:  lut_data <= {8'h78 , 24'h3a19f8};
		10'd33:  lut_data <= {8'h78 , 24'h363513};
		10'd34:  lut_data <= {8'h78 , 24'h363603};
		10'd35:  lut_data <= {8'h78 , 24'h363440};
		10'd36:  lut_data <= {8'h78 , 24'h362201};
		10'd37:  lut_data <= {8'h78 , 24'h3c0134};
		10'd38:  lut_data <= {8'h78 , 24'h3c0428};
		10'd39:  lut_data <= {8'h78 , 24'h3c0598};
		10'd40:  lut_data <= {8'h78 , 24'h3c0600};
		10'd41:  lut_data <= {8'h78 , 24'h3c0708};
		10'd42:  lut_data <= {8'h78 , 24'h3c0800};
		10'd43:  lut_data <= {8'h78 , 24'h3c091c};
		10'd44:  lut_data <= {8'h78 , 24'h3c0a9c};
		10'd45:  lut_data <= {8'h78 , 24'h3c0b40};
		10'd46:  lut_data <= {8'h78 , 24'h381000};
		10'd47:  lut_data <= {8'h78 , 24'h381110};
		10'd48:  lut_data <= {8'h78 , 24'h381200};
		10'd49:  lut_data <= {8'h78 , 24'h370864};
		10'd50:  lut_data <= {8'h78 , 24'h400102};
		10'd51:  lut_data <= {8'h78 , 24'h40051a};
		10'd52:  lut_data <= {8'h78 , 24'h300000};
		10'd53:  lut_data <= {8'h78 , 24'h3004ff};
		10'd54:  lut_data <= {8'h78 , 24'h300e58};
		10'd55:  lut_data <= {8'h78 , 24'h302e00};
		10'd56:  lut_data <= {8'h78 , 24'h430060};
		10'd57:  lut_data <= {8'h78 , 24'h501f01};
		10'd58:  lut_data <= {8'h78 , 24'h440e00};
		10'd59:  lut_data <= {8'h78 , 24'h5000a7};
		10'd60:  lut_data <= {8'h78 , 24'h3a0f30};
		10'd61:  lut_data <= {8'h78 , 24'h3a1028};
		10'd62:  lut_data <= {8'h78 , 24'h3a1b30};
		10'd63:  lut_data <= {8'h78 , 24'h3a1e26};
		10'd64:  lut_data <= {8'h78 , 24'h3a1160};
		10'd65:  lut_data <= {8'h78 , 24'h3a1f14};
		10'd66:  lut_data <= {8'h78 , 24'h580023};
		10'd67:  lut_data <= {8'h78 , 24'h580114};
		10'd68:  lut_data <= {8'h78 , 24'h58020f};
		10'd69:  lut_data <= {8'h78 , 24'h58030f};
		10'd70:  lut_data <= {8'h78 , 24'h580412};
		10'd71:  lut_data <= {8'h78 , 24'h580526};
		10'd72:  lut_data <= {8'h78 , 24'h58060c};
		10'd73:  lut_data <= {8'h78 , 24'h580708};
		10'd74:  lut_data <= {8'h78 , 24'h580805};
		10'd75:  lut_data <= {8'h78 , 24'h580905};
		10'd76:  lut_data <= {8'h78 , 24'h580a08};
		10'd77:  lut_data <= {8'h78 , 24'h580b0d};
		10'd78:  lut_data <= {8'h78 , 24'h580c08};
		10'd79:  lut_data <= {8'h78 , 24'h580d03};
		10'd80:  lut_data <= {8'h78 , 24'h580e00};
		10'd81:  lut_data <= {8'h78 , 24'h580f00};
		10'd82:  lut_data <= {8'h78 , 24'h581003};
		10'd83:  lut_data <= {8'h78 , 24'h581109};
		10'd84:  lut_data <= {8'h78 , 24'h581207};
		10'd85:  lut_data <= {8'h78 , 24'h581303};
		10'd86:  lut_data <= {8'h78 , 24'h581400};
		10'd87:  lut_data <= {8'h78 , 24'h581501};
		10'd88:  lut_data <= {8'h78 , 24'h581603};
		10'd89:  lut_data <= {8'h78 , 24'h581708};
		10'd90:  lut_data <= {8'h78 , 24'h58180d};
		10'd91:  lut_data <= {8'h78 , 24'h581908};
		10'd92:  lut_data <= {8'h78 , 24'h581a05};
		10'd93:  lut_data <= {8'h78 , 24'h581b06};
		10'd94:  lut_data <= {8'h78 , 24'h581c08};
		10'd95:  lut_data <= {8'h78 , 24'h581d0e};
		10'd96:  lut_data <= {8'h78 , 24'h581e29};
		10'd97:  lut_data <= {8'h78 , 24'h581f17};
		10'd98:  lut_data <= {8'h78 , 24'h582011};
		10'd99:  lut_data <= {8'h78 , 24'h582111};
		10'd100: lut_data <= {8'h78 , 24'h582215};
		10'd101: lut_data <= {8'h78 , 24'h582328};
		10'd102: lut_data <= {8'h78 , 24'h582446};
		10'd103: lut_data <= {8'h78 , 24'h582526};
		10'd104: lut_data <= {8'h78 , 24'h582608};
		10'd105: lut_data <= {8'h78 , 24'h582726};
		10'd106: lut_data <= {8'h78 , 24'h582864};
		10'd107: lut_data <= {8'h78 , 24'h582926};
		10'd108: lut_data <= {8'h78 , 24'h582a24};
		10'd109: lut_data <= {8'h78 , 24'h582b22};
		10'd110: lut_data <= {8'h78 , 24'h582c24};
		10'd111: lut_data <= {8'h78 , 24'h582d24};
		10'd112: lut_data <= {8'h78 , 24'h582e06};
		10'd113: lut_data <= {8'h78 , 24'h582f22};
		10'd114: lut_data <= {8'h78 , 24'h583040};
		10'd115: lut_data <= {8'h78 , 24'h583142};
		10'd116: lut_data <= {8'h78 , 24'h583224};
		10'd117: lut_data <= {8'h78 , 24'h583326};
		10'd118: lut_data <= {8'h78 , 24'h583424};
		10'd119: lut_data <= {8'h78 , 24'h583522};
		10'd120: lut_data <= {8'h78 , 24'h583622};
		10'd121: lut_data <= {8'h78 , 24'h583726};
		10'd122: lut_data <= {8'h78 , 24'h583844};
		10'd123: lut_data <= {8'h78 , 24'h583924};
		10'd124: lut_data <= {8'h78 , 24'h583a26};
		10'd125: lut_data <= {8'h78 , 24'h583b28};
		10'd126: lut_data <= {8'h78 , 24'h583c42};
		10'd127: lut_data <= {8'h78 , 24'h583dce};
		10'd128: lut_data <= {8'h78 , 24'h5180ff};
		10'd129: lut_data <= {8'h78 , 24'h5181f2};
		10'd130: lut_data <= {8'h78 , 24'h518200};
		10'd131: lut_data <= {8'h78 , 24'h518314};
		10'd132: lut_data <= {8'h78 , 24'h518425};
		10'd133: lut_data <= {8'h78 , 24'h518524};
		10'd134: lut_data <= {8'h78 , 24'h518609};
		10'd135: lut_data <= {8'h78 , 24'h518709};
		10'd136: lut_data <= {8'h78 , 24'h518809};
		10'd137: lut_data <= {8'h78 , 24'h518975};
		10'd138: lut_data <= {8'h78 , 24'h518a54};
		10'd139: lut_data <= {8'h78 , 24'h518be0};
		10'd140: lut_data <= {8'h78 , 24'h518cb2};
		10'd141: lut_data <= {8'h78 , 24'h518d42};
		10'd142: lut_data <= {8'h78 , 24'h518e3d};
		10'd143: lut_data <= {8'h78 , 24'h518f56};
		10'd144: lut_data <= {8'h78 , 24'h519046};
		10'd145: lut_data <= {8'h78 , 24'h5191f8};
		10'd146: lut_data <= {8'h78 , 24'h519204};
		10'd147: lut_data <= {8'h78 , 24'h519370};
		10'd148: lut_data <= {8'h78 , 24'h5194f0};
		10'd149: lut_data <= {8'h78 , 24'h5195f0};
		10'd150: lut_data <= {8'h78 , 24'h519603};
		10'd151: lut_data <= {8'h78 , 24'h519701};
		10'd152: lut_data <= {8'h78 , 24'h519804};
		10'd153: lut_data <= {8'h78 , 24'h519912};
		10'd154: lut_data <= {8'h78 , 24'h519a04};
		10'd155: lut_data <= {8'h78 , 24'h519b00};
		10'd156: lut_data <= {8'h78 , 24'h519c06};
		10'd157: lut_data <= {8'h78 , 24'h519d82};
		10'd158: lut_data <= {8'h78 , 24'h519e38};
		10'd159: lut_data <= {8'h78 , 24'h548001};
		10'd160: lut_data <= {8'h78 , 24'h548108};
		10'd161: lut_data <= {8'h78 , 24'h548214};
		10'd162: lut_data <= {8'h78 , 24'h548328};
		10'd163: lut_data <= {8'h78 , 24'h548451};
		10'd164: lut_data <= {8'h78 , 24'h548565};
		10'd165: lut_data <= {8'h78 , 24'h548671};
		10'd166: lut_data <= {8'h78 , 24'h54877d};
		10'd167: lut_data <= {8'h78 , 24'h548887};
		10'd168: lut_data <= {8'h78 , 24'h548991};
		10'd169: lut_data <= {8'h78 , 24'h548a9a};
		10'd170: lut_data <= {8'h78 , 24'h548baa};
		10'd171: lut_data <= {8'h78 , 24'h548cb8};
		10'd172: lut_data <= {8'h78 , 24'h548dcd};
		10'd173: lut_data <= {8'h78 , 24'h548edd};
		10'd174: lut_data <= {8'h78 , 24'h548fea};
		10'd175: lut_data <= {8'h78 , 24'h54901d};
		10'd176: lut_data <= {8'h78 , 24'h53811e};
		10'd177: lut_data <= {8'h78 , 24'h53825b};
		10'd178: lut_data <= {8'h78 , 24'h538308};
		10'd179: lut_data <= {8'h78 , 24'h53840a};
		10'd180: lut_data <= {8'h78 , 24'h53857e};
		10'd181: lut_data <= {8'h78 , 24'h538688};
		10'd182: lut_data <= {8'h78 , 24'h53877c};
		10'd183: lut_data <= {8'h78 , 24'h53886c};
		10'd184: lut_data <= {8'h78 , 24'h538910};
		10'd185: lut_data <= {8'h78 , 24'h538a01};
		10'd186: lut_data <= {8'h78 , 24'h538b98};
		10'd187: lut_data <= {8'h78 , 24'h558006};
		10'd188: lut_data <= {8'h78 , 24'h558340};
		10'd189: lut_data <= {8'h78 , 24'h558410};
		10'd190: lut_data <= {8'h78 , 24'h558910};
		10'd191: lut_data <= {8'h78 , 24'h558a00};
		10'd192: lut_data <= {8'h78 , 24'h558bf8};
		10'd193: lut_data <= {8'h78 , 24'h501d40};
		10'd194: lut_data <= {8'h78 , 24'h530008};
		10'd195: lut_data <= {8'h78 , 24'h530130};
		10'd196: lut_data <= {8'h78 , 24'h530210};
		10'd197: lut_data <= {8'h78 , 24'h530300};
		10'd198: lut_data <= {8'h78 , 24'h530408};
		10'd199: lut_data <= {8'h78 , 24'h530530};
		10'd200: lut_data <= {8'h78 , 24'h530608};
		10'd201: lut_data <= {8'h78 , 24'h530716};
		10'd202: lut_data <= {8'h78 , 24'h530908};
		10'd203: lut_data <= {8'h78 , 24'h530a30};
		10'd204: lut_data <= {8'h78 , 24'h530b04};
		10'd205: lut_data <= {8'h78 , 24'h530c06};
		10'd206: lut_data <= {8'h78 , 24'h502500};
		10'd207: lut_data <= {8'h78 , 24'h300802};
		10'd208: lut_data <= {8'h78 , 24'h303511};
		10'd209: lut_data <= {8'h78 , 24'h303646};
		10'd210: lut_data <= {8'h78 , 24'h3c0708};
		10'd211: lut_data <= {8'h78 , 24'h382041};
		10'd212: lut_data <= {8'h78 , 24'h382100};
		10'd213: lut_data <= {8'h78 , 24'h381431};
		10'd214: lut_data <= {8'h78 , 24'h381531};
		10'd215: lut_data <= {8'h78 , 24'h380000};
		10'd216: lut_data <= {8'h78 , 24'h380100};
		10'd217: lut_data <= {8'h78 , 24'h380200};
		10'd218: lut_data <= {8'h78 , 24'h380304};
		10'd219: lut_data <= {8'h78 , 24'h38040a};
		10'd220: lut_data <= {8'h78 , 24'h38053f};
		10'd221: lut_data <= {8'h78 , 24'h380607};
		10'd222: lut_data <= {8'h78 , 24'h38079b};
		10'd223: lut_data <= {8'h78 , 24'h380803};
		10'd224: lut_data <= {8'h78 , 24'h380920};
		10'd225: lut_data <= {8'h78 , 24'h380a02};
		10'd226: lut_data <= {8'h78 , 24'h380b58};
		10'd227: lut_data <= {8'h78 , 24'h380c07};
		10'd228: lut_data <= {8'h78 , 24'h380d68};
		10'd229: lut_data <= {8'h78 , 24'h380e03};
		10'd230: lut_data <= {8'h78 , 24'h380fd8};
		10'd231: lut_data <= {8'h78 , 24'h381306};
		10'd232: lut_data <= {8'h78 , 24'h361800};
		10'd233: lut_data <= {8'h78 , 24'h361229};
		10'd234: lut_data <= {8'h78 , 24'h370952};
		10'd235: lut_data <= {8'h78 , 24'h370c03};
		10'd236: lut_data <= {8'h78 , 24'h3a0217};
		10'd237: lut_data <= {8'h78 , 24'h3a0310};
		10'd238: lut_data <= {8'h78 , 24'h3a1417};
		10'd239: lut_data <= {8'h78 , 24'h3a1510};
		10'd240: lut_data <= {8'h78 , 24'h400402};
		10'd241: lut_data <= {8'h78 , 24'h30021c};
		10'd242: lut_data <= {8'h78 , 24'h3006c3};
		10'd243: lut_data <= {8'h78 , 24'h471303};
		10'd244: lut_data <= {8'h78 , 24'h440704};
		10'd245: lut_data <= {8'h78 , 24'h460b35};
		10'd246: lut_data <= {8'h78 , 24'h460c22};
		10'd247: lut_data <= {8'h78 , 24'h483722};
		10'd248: lut_data <= {8'h78 , 24'h382402};
		10'd249: lut_data <= {8'h78 , 24'h5001a3};
		10'd250: lut_data <= {8'h78 , 24'h350300};
		10'd251: lut_data <= {8'h78 , 24'h303521};
		10'd252: lut_data <= {8'h78 , 24'h303669};
		10'd253: lut_data <= {8'h78 , 24'h3c0707};
		10'd254: lut_data <= {8'h78 , 24'h382047};
		10'd255: lut_data <= {8'h78 , 24'h382100};
		10'd256: lut_data <= {8'h78 , 24'h381431};
		10'd257: lut_data <= {8'h78 , 24'h381531};
		10'd258: lut_data <= {8'h78 , 24'h380000};
		10'd259: lut_data <= {8'h78 , 24'h380100};
		10'd260: lut_data <= {8'h78 , 24'h380200};
		10'd261: lut_data <= {8'h78 , 24'h3803fa};
		10'd262: lut_data <= {8'h78 , 24'h38040a};
		10'd263: lut_data <= {8'h78 , 24'h38053f};
		10'd264: lut_data <= {8'h78 , 24'h380606};
		10'd265: lut_data <= {8'h78 , 24'h3807a9};
		10'd266: lut_data <= {8'h78 , 24'h380805};
		10'd267: lut_data <= {8'h78 , 24'h380900};
		10'd268: lut_data <= {8'h78 , 24'h380a02};
		10'd269: lut_data <= {8'h78 , 24'h380bd0};
		10'd270: lut_data <= {8'h78 , 24'h380c07};
		10'd271: lut_data <= {8'h78 , 24'h380d64};
		10'd272: lut_data <= {8'h78 , 24'h380e02};
		10'd273: lut_data <= {8'h78 , 24'h380fe4};
		10'd274: lut_data <= {8'h78 , 24'h381304};
		10'd275: lut_data <= {8'h78 , 24'h361800};
		10'd276: lut_data <= {8'h78 , 24'h361229};
		10'd277: lut_data <= {8'h78 , 24'h370952};
		10'd278: lut_data <= {8'h78 , 24'h370c03};
		10'd279: lut_data <= {8'h78 , 24'h3a0202};
		10'd280: lut_data <= {8'h78 , 24'h3a03e0};
		10'd281: lut_data <= {8'h78 , 24'h3a0800};
		10'd282: lut_data <= {8'h78 , 24'h3a096f};
		10'd283: lut_data <= {8'h78 , 24'h3a0a00};
		10'd284: lut_data <= {8'h78 , 24'h3a0b5c};
		10'd285: lut_data <= {8'h78 , 24'h3a0e06};
		10'd286: lut_data <= {8'h78 , 24'h3a0d08};
		10'd287: lut_data <= {8'h78 , 24'h3a1402};
		10'd288: lut_data <= {8'h78 , 24'h3a15e0};
		10'd289: lut_data <= {8'h78 , 24'h400402};
		10'd290: lut_data <= {8'h78 , 24'h30021c};
		10'd291: lut_data <= {8'h78 , 24'h3006c3};
		10'd292: lut_data <= {8'h78 , 24'h471303};
		10'd293: lut_data <= {8'h78 , 24'h440704};
		10'd294: lut_data <= {8'h78 , 24'h460b37};
		10'd295: lut_data <= {8'h78 , 24'h460c20};
		10'd296: lut_data <= {8'h78 , 24'h483716};
		10'd297: lut_data <= {8'h78 , 24'h382404};
		10'd298: lut_data <= {8'h78 , 24'h5001a3};
		10'd299: lut_data <= {8'h78 , 24'h350300};
		10'd300: lut_data <= {8'h78 , 24'h301602};
		10'd301: lut_data <= {8'h78 , 24'h3b070a};		
		//10'd251: lut_data <= {8'h78 , 24'h503d80};
		//10'd252: lut_data <= {8'h78 , 24'h474101};
		10'd302: lut_data <= {8'hff , 24'hffffff};
		default:lut_data <= {8'h00,16'h0000,8'h00};
	endcase
end


endmodule 

 四,摄像头分辨率设置

下面是摄像头可以设置的分辨率,我们这个摄像头设置的1280*720p这个分辨率

五,摄像头数据采集

我们这个工程设置的输出为RGB565格式,,可以看出如果抓取16位数据,刚好是两个8位数据合成,也就是两个D[2]~D[9]需要舍弃低两位D[0]和D[1],所以我们采集数据是由两个8位组合为一个十六位数据。 

 数据转换模块,将两个8位输入数据转为16位输出

六,DDR配置

 ddr具体配置,请参考上一个章节AX7A200教程(8): HDMI输入和输出显示1080p视频,本章节不再做详细介绍。

七,HDMI输出配置 

hdmi输出配置和摄像头配置采用同样的iic模块配置,只是配置文件有所不同

八,输出显示顶层模块和硬件连接

 摄像头显示顶层

`timescale 1ps/1ps

module top
(
	inout                              hdmi_scl,
	inout                              hdmi_sda,
    output                             hdmi_nreset_v10,//HDMI reset compatibility for version 1.0 and 1.1
    output                             hdmi_nreset,  //HDMI reset compatibility for version 1.0 and 1.1
	
	inout                              cmos_scl,          //cmos i2c clock
	inout                              cmos_sda,          //cmos i2c data
	input                              cmos_vsync,        //cmos vsync
	input                              cmos_href,         //cmos hsync refrence,data valid
	input                              cmos_pclk,         //cmos pxiel clock
	input   [7:0]                      cmos_db,           //cmos data
	output                             cmos_rst_n,        //cmos reset	
	output                             cmos_pwdn,
	output                             cmos_xclk,
	
	output                             vout_clk,
	output                             vout_hs,
	output                             vout_vs,
	output                             vout_de,
	output[23:0]                       vout_data,
	inout [31:0]                       ddr3_dq,
	inout [3:0]                        ddr3_dqs_n,
	inout [3:0]                        ddr3_dqs_p,
	output [14:0]                      ddr3_addr,
	output [2:0]                       ddr3_ba,
	output                             ddr3_ras_n,
	output                             ddr3_cas_n,
	output                             ddr3_we_n,
	output                             ddr3_reset_n,
	output [0:0]                       ddr3_ck_p,
	output [0:0]                       ddr3_ck_n,
	output [0:0]                       ddr3_cke,
	output [0:0]                       ddr3_cs_n,
	output [3:0]                       ddr3_dm,
	output [0:0]                       ddr3_odt,
	//Differential system clocks
	input                              sys_clk_p,
	input                              sys_clk_n,
	output[3:0]                        led,
	input                              sys_rst
   );



wire                                   read_req;
wire                                   read_req_ack;
wire                                   read_en;
wire[31:0]                             read_data;
wire                                   write_en;
wire[31:0]                             write_data;
wire                                   write_req;
wire                                   write_req_ack;
wire                                   video_clk;         //video pixel clock
wire                                   hs;
wire                                   vs;
wire                                   de;


wire[9:0]                              lut_index;
wire[31:0]                             lut_data;
wire[9:0]                              cmos_lut_index;
wire[31:0]                             cmos_lut_data;
wire                                   clk_100m;
wire                                   clk_24m;
wire                                   rst_n;
wire                                   locked;
wire                                   power_done;
wire[15:0]                             cmos_16bit_data;
wire                                   cmos_16bit_wr;
wire[31:0]                             cmos_write_data;

wire                                   sys_clk_w;
wire                                   init_calib_complete;
wire                                   start_en;
wire                                   clk_out2;
assign vout_hs = hs;
assign vout_vs = vs;
assign vout_de = de;
assign vout_clk = video_clk;


assign rst_n = locked;
assign hdmi_nreset_v10 = locked;
assign hdmi_nreset = locked;

assign cmos_xclk = (power_done)? clk_24m:1'b0;
assign cmos_write_data = {8'd0,cmos_16bit_data[4:0],3'd0,cmos_16bit_data[10:5],2'd0,cmos_16bit_data[15:11],3'd0};
/*****************************************pll*******************************************/

IBUFDS sys_clk_ibufgds
(
	.O  (sys_clk_w),
	.I  (sys_clk_p),
	.IB (sys_clk_n)
);

  clk_wiz_0 instance_name
   (
    // Clock out ports
    .clk_out1(clk_100m),     // output clk_out1
    .clk_out2(clk_out2),     // output clk_out2
    .clk_out3(video_clk),     // output clk_out3
    .clk_out4(clk_24m),     // output clk_out4
    // Status and control signals
    .resetn(sys_rst), // input reset
    .locked(locked),       // output locked
   // Clock in ports
    .clk_in1(sys_clk_w));      // input clk_in1

/***********************************ov5640_power***************************************/    
power_ctrl  power_ctrl_inst(
        // system signals
     .i_clk                     (clk_100m               ),// 100MHz
     .rst_n                     (rst_n                  ),       
     .ov5640_pwdn               (cmos_pwdn              ),       
     .ov5640_rst_n              (cmos_rst_n             ),       
     .power_done				(power_done             )
);    
/***********************************ov5640_config***************************************/
//I2C master controller
i2c_config i2c_config_m1(
	.rst                        (~power_done              ),
	.clk                        (clk_100m                 ),
	.clk_div_cnt                (16'd200                  ),
	.i2c_addr_2byte             (1'b1                     ),
	.lut_index                  (cmos_lut_index                ),
	.lut_dev_addr               (cmos_lut_data[31:24]          ),
	.lut_reg_addr               (cmos_lut_data[23:8]           ),
	.lut_reg_data               (cmos_lut_data[7:0]            ),
	.error                      (                         ),
	.done                       (                         ),
	.i2c_scl                    (cmos_scl                 ),
	.i2c_sda                    (cmos_sda                 )
);
//configure look-up table
lut_ov5640_rgb565_1280_720 lut_ov5640_m1(
	.lut_index                  (cmos_lut_index                ),
	.lut_data                   (cmos_lut_data                 )
);    
    
/***********************************hdmi_out_config***************************************/
//I2C master controller
i2c_config i2c_config_m0(
	.rst                        (~rst_n                   ),
	.clk                        (clk_100m                 ),
	.clk_div_cnt                (16'd500                  ),
	.i2c_addr_2byte             (1'b0                     ),
	.lut_index                  (lut_index                ),
	.lut_dev_addr               (lut_data[31:24]          ),
	.lut_reg_addr               (lut_data[23:8]           ),
	.lut_reg_data               (lut_data[7:0]            ),
	.error                      (                         ),
	.done                       (                         ),
	.i2c_scl                    (hdmi_scl                 ),
	.i2c_sda                    (hdmi_sda                 )
);
//configure look-up table
lut_hdmi lut_hdmi_m0(
	.lut_index                  (lut_index                ),
	.lut_data                   (lut_data                 )
);
/**********************************cmos_data****************************************************/
//CMOS sensor 8bit data is converted to 16bit data
cmos_8_16bit cmos_8_16bit_m0(
	.rst                        (~rst_n                  ),
	.pclk                       (cmos_pclk               ),
	.pdata_i                    (cmos_db                 ),
	.de_i                       (cmos_href               ),
	.pdata_o                    (cmos_16bit_data         ),
	.hblank                     (                        ),
	.de_o                       (cmos_16bit_wr           )
);
/***********************************hdmi_out_en***************************************/
vs_count vs_count_inst(
    .clk(clk_100m),
    .rst(init_calib_complete),
    .vs_in(cmos_vsync),//cmos_vsync
    .start_en(start_en)
    );

/**************************************ddr*************************************/
wire        read_fifo_empty;
wire        read_valid;


    
  ddr_test ddr_test_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
	.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
    .init_calib_complete            (init_calib_complete),
    // System Clock Ports
    .sys_clk_i                      (clk_out2),
    .sys_rst                        (rst_n), // input sys_rst
   //fifo
    .wr_clk                         (cmos_pclk),
    .rd_clk                         (video_clk),
    .write_fifo_wr_en               (cmos_16bit_wr),
    .write_fifo_din                 (cmos_write_data),
    .read_fifo_rd_en                (read_en),
    .read_fifo_dout                 (read_data),
    .read_fifo_empty                (read_fifo_empty),
    .read_valid                     (read_valid),
    .ddr_rd_en                      (start_en),
    .vin_vs                         (cmos_vsync),
    .vout_vs                        (read_req),
    .rd_reset                       (read_req_ack)    

    ); 

	

//video output timing generator and generate a frame read data request
video_timing_data video_timing_data_m0
(
	.video_clk                  (video_clk                ),
	.rst                        (~read_valid                   ),
	.read_req                   (read_req                 ),
	.read_req_ack               (read_req_ack             ),
	.read_en                    (read_en                  ),
	.read_data                  (read_data                ),
	.hs                         (hs                       ),
	.vs                         (vs                       ),
	.de                         (de                       ),
	.vout_data                  (vout_data                )
);	

ila_0 ila_0_name (
	.clk(clk_out2), // input wire clk


	.probe0(read_en), // input wire [0:0]  probe0  
	.probe1(read_valid), // input wire [0:0]  probe1 
	.probe2(start_en), // input wire [0:0]  probe2 
	.probe3(read_req), // input wire [0:0]  probe3 
	.probe4(read_data), // input wire [0:0]  probe4 
	.probe5(vout_clk), // input wire [0:0]  probe5 
	.probe6(vout_hs), // input wire [0:0]  probe6 
	.probe7(vout_vs), // input wire [0:0]  probe7 
	.probe8(vout_de), // input wire [0:0]  probe8 
	.probe9(vout_data) // input wire [0:0]  probe9
);

endmodule

 vivado工程截图,可以看到有很多模块,这里不一一截图提供代码   

抓取的hdmi输出管脚波形  摄像头输出显示硬件连接

九,摄像头输出显示效果

如若转载,请注明出处 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/255084.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

制造企业MES管理系统可以和AI结合应用吗

在当今的数字化时代&#xff0c;人工智能AI和MES生产管理系统的结合将成为制造企业发展的重要趋势。这种结合可以为制造企业带来许多优势&#xff0c;如提高生产效率、降低成本、优化资源利用等。本文将探讨MES管理系统和AI的结合以及它们在制造企业中的应用&#xff0c;并分析…

【JavaWeb学习笔记】11 - WEB工程路径专题

一、工程路径问题 1.引入该问题 通过这几个去访问很麻烦 二、工程路径解决方案 1.相对路径 1.说明:使用相对路径来解决&#xff0c;一 个非常重要的规则:页面所有的相对路径&#xff0c;在默认情况下&#xff0c;都会参考当前浏览器地址栏的路径http:/ /ip:port/工程名/来进…

BM61 矩阵最长递增路径

题目 矩阵最长递增路径 给定一个 n 行 m 列矩阵 matrix &#xff0c;矩阵内所有数均为非负整数。 你需要在矩阵中找到一条最长路径&#xff0c;使这条路径上的元素是递增的。并输出这条最长路径的长度。 这个路径必须满足以下条件&#xff1a; 1. 对于每个单元格&#xff0c;你…

【基于APB总线的DES实现】

基于APB总线的DES实现 本文内容摘要APB介绍仿真结果整体仿真写入数据DES加密部分DES加密读出密文 整体代码 本文内容摘要 本文是设计一个可兼容APB总线的DES加密协处理器&#xff0c;用来将DES加密模块与APB总线进行对接&#xff0c;使总线发送来的数据可以正常写入并进行加密后…

十四、YARN核心架构

1、目标 &#xff08;1&#xff09;掌握YARN的运行角色和角色之间的关系 &#xff08;2&#xff09;理解使用容器做资源分配和隔离 2、核心架构 &#xff08;1&#xff09;和HDFS架构的对比 HDFS架构&#xff1a; YARN架构&#xff1a;&#xff08;主从模式&#xff09; &…

分类预测 | Matlab实现AOA-SVM算术优化支持向量机的数据分类预测【23年新算法】

分类预测 | Matlab实现AOA-SVM算术优化支持向量机的数据分类预测【23年新算法】 目录 分类预测 | Matlab实现AOA-SVM算术优化支持向量机的数据分类预测【23年新算法】分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现AOA-SVM算术优化支持向量机的数据分类预测…

Note3---初阶二叉树~~

目录​​​​​​​ 前言&#x1f344; 1.树概念及结构☎️ 1.1 树的概念&#x1f384; 1.2 树的相关概念&#x1f99c; 1.2.1 部分概念的加深理解&#x1f43e; 1.2.2 树与非树&#x1fab4; 1.3 树的表示&#x1f38b; 1.4 树在实际中的运用&#xff08;表示文件系统…

Leetcode—11.盛最多水的容器【中等】

2023每日刷题&#xff08;六十三&#xff09; Leetcode—11.盛最多水的容器 实现代码 #define MAX(a, b) ((a) > (b) ? (a) : (b)) #define MIN(a, b) ((a) < (b) ? (a) : (b)) int maxArea(int* height, int heightSize) {int left 0, right heightSize - 1;int m…

屏幕超时休眠-Android13

屏幕超时休眠-Android13 1、设置界面1.2 属性值1.2.1 默认值1.2.2 最小值限制 1.3 属性值疑问 Settings.System.SCREEN_OFF_TIMEOUT 2、超时灭屏2.1 锁定屏幕的超时2.2 屏幕灭屏的超时 3、永不休眠* 关键日志 1、设置界面 packages/apps/Settings/src/com/android/settings/dis…

八.创建和管理表

目录 1. 基础知识1.1 一条数据存储的过程1.2 标识符命名规则1.3 MySQL中的数据类型 2. 创建和管理数据库2.2 使用数据库2.3 修改数据库 3. 创建表3.1 创建方式13.2 创建方式23.4 查看数据表结构 4. 修改表4.1 追加一个列4.2 修改一个列4.3 重命名一个列4.4 删除一个列 5. 重命名…

【Docker五】使用Harbor搭建Docker私有仓库

目录 一、harbor概述 1、harbor概念&#xff1a; 2、harbor的特性 3、harbor的组件&#xff1a; 二、harbor实验&#xff1a; 1、搭建harbor 2、远程主机使用docker-harbor&#xff1a; 3、镜像同步&#xff1a; 一、harbor概述 1、harbor概念&#xff1a; harbor&…

计网01 计算机网络基础

一、计算机网络基本概念 1、什么是计算机网络 网络&#xff1a;由两台或多台计算机通过网络设备串联&#xff08;网络设备通过传输介质串联&#xff09;而形成的网络网络设备&#xff1a;计算机、路由交换、防火墙、上网行为管理等传输介质&#xff1a;双绞线&#xff08;网线…

Eclipse 一直提示 loading descriptor for 的解决方法

启动eclipse之后&#xff0c;进行相关操作时&#xff0c;弹出界面&#xff0c;提示&#xff1a;loading descriptor for xxx 解决方法&#xff1a; 在Eclipse左侧的Project Explorer 最右上角有一个小钮,鼠标移上去时提示"View Menu". 你点一下,在弹出的上下文菜单中…

JAVA主流日志框架梳理学习及使用

前言&#xff1a;目前市面上有挺多JAVA的日志框架&#xff0c;比如JUL(JDK自带的日志框架),Log4j,Logback,Log4j2等&#xff0c;有人可能有疑问说还有slf4j&#xff0c;不过slf4j不是一种日志框架的具体实现&#xff0c;而是一种日志门面&#xff08;日志门面可以理解为是一种统…

Java基于SpringBoot的二次元商城网站系统

简介 二次元商城网站的使用是更为便捷的&#xff0c;互联网的普及在这个社会是非常成功的&#xff0c;小到个人的交际交流&#xff0c;大到公司企业员工的交流&#xff0c;都已经离不开科技&#xff0c;所以&#xff0c;在这么成熟的平台上&#xff0c;各种类型的网站也就应运…

【数据结构复习之路】图(严蔚敏版)两万余字超详细讲解

专栏&#xff1a;数据结构复习之路 复习完上面四章【线性表】【栈和队列】【串】【数组和广义表】【树和二叉树】&#xff0c;我们接着复习 图&#xff0c;这篇文章我写的非常详细且通俗易懂&#xff0c;看完保证会带给你不一样的收获。如果对你有帮助&#xff0c;看在我这么辛…

计网02-计算机网络参考模型

一、OSI七层参考模型 1、分层的思想 分层模型用于网络协议的设计方法&#xff0c;本质是将网络节点间复杂的通信问题分成若干简单的问题逐一解决&#xff0c;通过网络的层次去找问题&#xff0c;将复杂问题简单化。 2、OSI参考模型 由于早期计算机厂商使用的是私有的网络模…

51单片机(STC8) -- 开发环境搭建(Keil C51)

文章目录 STC8H3K系列芯片概述STC8H3K系列芯片选型Keil C51简介Keil C51安装添加C51芯片包工程创建与编译工程烧录 STC8H3K系列芯片概述 文章中所用的芯片选型为STC8H3K64S4&#xff0c;后续STC8案例均以该芯片展开 内核 • 超高速 8051 内核&#xff08;1T&#xff09;&…

SearchWP WordPress高级网站内容搜索插件(包含所有专业扩展)

点击阅读SearchWP WordPress高级网站内容搜索插件(包含所有专业扩展)原文 SearchWP WordPress高级网站内容搜索插件是一个非常强大的工具&#xff0c;可以显着增强您网站的搜索功能。通过向网站访问者提供高度相关和精确的搜索结果&#xff0c;它可以有效地简化他们的搜索过程…

IP地址与实时位置之间的关系

在互联网的普及和信息技术的快速发展中&#xff0c;IP地址作为一种标识符&#xff0c;已经深入到我们的日常生活和工作中。然而&#xff0c;对于IP地址与实时位置的关系&#xff0c;许多人存在误解。本文将对此进行澄清&#xff0c;阐述IP地址与实时位置之间的关系。 首先&…