日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

总:基于FPGA的OV7670摄像头显示

發(fā)布時間:2023/12/29 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 总:基于FPGA的OV7670摄像头显示 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

?

前言:

一、整體系統(tǒng)設(shè)計

二、各部分模塊設(shè)計

1、時鐘模塊

2、OV7670初始化模塊

3、DVP協(xié)議數(shù)據(jù)流模塊

4、寫FIFO模塊

5、讀FIFO模塊

6、寫FIFO控制模塊

7、讀FIFO控制模塊

8、SDRAM控制模塊

9、VGA控制模塊

10、頂層模塊

三、仿真測試

四、上板驗證

五、總結(jié)


工程文件下載鏈接:https://download.csdn.net/download/qq_33231534/13010542


前言:

這個專題的博客中寫的都是關(guān)于OV7670攝像頭顯示所需要的模塊,并對每個模塊進行仿真驗證,最后再對每個模塊進行整合,本篇就是對整個攝像頭系統(tǒng)進行整合和匯總。在過程中遇到很多問題,應(yīng)該也會是很多人會遇到的問題,涉及到調(diào)試和代碼的問題,在下邊也會加以講解。

一、整體系統(tǒng)設(shè)計

如下系統(tǒng)框圖:

圖:整體系統(tǒng)框圖

?如圖所示,FPGA中主要模塊包含:時鐘模塊、OV7670初始化模塊、DVP協(xié)議數(shù)據(jù)流模塊、寫FIFO模塊、寫FIFO控制模塊、SDRAM控制模塊、讀FIFO模塊、讀FIFO控制模塊、VGA控制模塊。

其中OV7670初始化模塊、DVP協(xié)議數(shù)據(jù)流模塊和VGA控制模塊都在本專題博客中寫過,這里不再贅述。寫FIFO和讀FIFO模塊使用的IP核,都是寬度16位,長度256,其中讀FIFO使用的是showahead模式。SDRAM控制器漆面的博客也寫過,這邊做了一些改動,添加了一些需要的信號。

其整體流程為:啟動時先對攝像頭進行初始化設(shè)置,初始化完成后,FPGA從攝像頭獲取一幀一幀的圖像數(shù)據(jù),根據(jù)數(shù)據(jù)手冊將ov7670數(shù)據(jù)流轉(zhuǎn)換成我們需要的RGB565數(shù)據(jù)流,隨后存入寫FIFO模塊;(寫控制模塊)當寫FIFO模塊中存儲的數(shù)據(jù)大于等于8時,發(fā)出SDRAM寫請求,SDRAM寫請求通過后,讀取FIFO數(shù)據(jù)存儲起來;(讀FIFO模塊)當讀FIFO數(shù)據(jù)小于等于8時,讀取SDRAM中的數(shù)據(jù)經(jīng)過讀FIFO緩存后送入VGA顯示模塊進行顯示。同時寫控制模塊和讀控制模塊控制SDRAM讀寫地址的增加。

二、各部分模塊設(shè)計

1、時鐘模塊

這里使用PLL的IP核,以50MHz時鐘生成25MHz和100MHz時鐘,其中攝像頭初始化模塊和VGA控制模塊使用的是25MHz,SDRAM控制模塊、寫FIFO控制模塊和讀FIFO控制模塊使用的是100MHz,寫FIFO和讀FIFO模塊都是異步FIFO,使用25MHz和100MHz時鐘。

2、OV7670初始化模塊

前面博客講的很詳細,也沒有改動,這里不再贅述。

3、DVP協(xié)議數(shù)據(jù)流模塊

前面博客講的很詳細,也沒有改動,這里不再贅述。

4、寫FIFO模塊

這里使用的IP核,數(shù)據(jù)寬度為16,長度為256,普通模式。

5、讀FIFO模塊

這里使用的IP核,數(shù)據(jù)寬度為16,長度為256,showahead模式。showahead模式是為了在讀出FIFO數(shù)據(jù)時先出一個數(shù)據(jù),和VGA顯示的數(shù)據(jù)有效信號好對齊。

6、寫FIFO控制模塊

主要實現(xiàn)兩個功能:

(1)當寫FIFO中數(shù)據(jù)大于等于8時,向SDRAM控制器發(fā)出寫請求信號

(2)發(fā)送SDRASM控制器寫地址(行地址和列地址),當SDRAM控制器寫完數(shù)據(jù)后,寫地址進行相應(yīng)變化。

代碼如下:

// Company : // Engineer : // ----------------------------------------------------------------------------- // https://blog.csdn.net/qq_33231534 PHF's CSDN blog // ----------------------------------------------------------------------------- // Create Date : 2020-09-27 12:44:59 // Revise Data : 2020-09-27 12:45:39 // File Name : wr_control.v // Target Devices : XC7Z015-CLG485-2 // Tool Versions : Vivado 2019.2 // Revision : V1.1 // Editor : sublime text3, tab size (4) // Description : 寫FIFO控制模塊module wr_control(input clk ,//100MHzinput rst_n ,//系統(tǒng)復(fù)位input [7:0] rdusedw ,//寫FIFO中數(shù)據(jù)個數(shù)input [9:0] row_addr_max ,//行地址最大input [9:0] col_addr_max ,//列地址最大input sdram_wdata_done,//SDRAM寫數(shù)據(jù)結(jié)束標志input aclr ,//一幀結(jié)束清零信號output reg sdram_wr_en ,//SDRAM寫使能信號output reg [11:0] wr_row_addr ,//SDRAM 行地址output reg [8:0] wr_col_addr //SDRAM 列地址);always @(posedge clk or negedge rst_n) beginif (!rst_n) beginsdram_wr_en <= 0;endelse if (rdusedw>=8) beginsdram_wr_en <= 1;endelse beginsdram_wr_en <= 0;endendalways @(posedge clk or negedge rst_n) beginif (!rst_n) beginwr_col_addr <= 9'd0;endelse if (sdram_wdata_done) beginif (wr_col_addr==col_addr_max-4'd8) beginwr_col_addr <= 9'd0;endelse beginwr_col_addr <= wr_col_addr + 4'd8; endendelse if (aclr) beginwr_col_addr <= 0;endendalways @(posedge clk or negedge rst_n) beginif (!rst_n) beginwr_row_addr <= 12'd0;endelse if (sdram_wdata_done && wr_col_addr==col_addr_max-4'd8) beginif (wr_row_addr==row_addr_max-1) beginwr_row_addr <= 12'd0;endelse beginwr_row_addr <= wr_row_addr + 1'b1;endendelse if (aclr) beginwr_row_addr <= 0;endendendmodule

7、讀FIFO控制模塊

主要實現(xiàn)兩個功能:

(1)當讀FIFO中數(shù)據(jù)小于等于8時,向SDRAM控制器發(fā)出讀請求信號

(2)發(fā)送SDRASM控制器讀地址(行地址和列地址),當SDRAM控制器讀完數(shù)據(jù)后,讀地址進行相應(yīng)變化。

代碼如下:

// Company : // Engineer : // ----------------------------------------------------------------------------- // https://blog.csdn.net/qq_33231534 PHF's CSDN blog // ----------------------------------------------------------------------------- // Create Date : 2020-09-27 16:40:08 // Revise Data : 2020-09-27 16:40:08 // File Name : rd_control.v // Target Devices : XC7Z015-CLG485-2 // Tool Versions : Vivado 2019.2 // Revision : V1.1 // Editor : sublime text3, tab size (4) // Description : 讀FIFO控制模塊module rd_control(input clk ,//時鐘100MHzinput rst_n ,//復(fù)位信號input [7:0] rdusedw ,//讀FIFO中數(shù)據(jù)個數(shù)input [9:0] row_addr_max ,//行地址最大input [9:0] col_addr_max ,//列地址最大input sdram_rdata_done,//SDRAM讀數(shù)據(jù)結(jié)束標志input aclr ,//一幀結(jié)束清零標志output reg sdram_rd_en ,//SDRAM讀使能output reg [11:0] rd_row_addr ,//SDRAM 行地址output reg [8:0] rd_col_addr //SDRAM 列地址);always @(posedge clk or negedge rst_n) beginif (!rst_n) beginsdram_rd_en <= 0;endelse if (rdusedw<=8) beginsdram_rd_en <= 1;endelse beginsdram_rd_en <= 0;endendalways @(posedge clk or negedge rst_n) beginif (!rst_n) beginrd_col_addr <= 9'd0;endelse if (sdram_rdata_done) beginif (rd_col_addr==col_addr_max-4'd8) beginrd_col_addr <= 9'd0;endelse beginrd_col_addr <= rd_col_addr + 4'd8; endendelse if (aclr) beginrd_col_addr <= 0;endend always @(posedge clk or negedge rst_n) beginif (!rst_n) beginrd_row_addr <= 12'd0;endelse if (sdram_rdata_done && rd_col_addr==col_addr_max-4'd8) beginif (rd_row_addr==row_addr_max-1) beginrd_row_addr <= 9'd0;endelse beginrd_row_addr <= rd_row_addr + 1'b1;endendelse if (aclr) beginrd_row_addr <= 0;endendendmodule

8、SDRAM控制模塊

前面有個專題專門講的SDRAM控制器原理和實現(xiàn)方法,這里在原來的代碼上,根據(jù)現(xiàn)在系統(tǒng)的需求,進行了略微的修改,主要功能沒有修改,只是增加幾個外部需要的信號,讀優(yōu)先級還是大于寫優(yōu)先級(寫大于讀也可以)。

這里給出代碼:

// Company : // Engineer : // ----------------------------------------------------------------------------- // https://blog.csdn.net/qq_33231534 PHF's CSDN blog // ----------------------------------------------------------------------------- // Create Date : 2020-09-18 14:20:22 // Revise Data : 2020-10-20 15:30:16 // File Name : SDRAM_control.v // Target Devices : XC7Z015-CLG485-2 // Tool Versions : Vivado 2019.2 // Revision : V1.1 // Editor : sublime text3, tab size (4) // Description : SDRAM控制器,支持讀寫沖突長度為8,cas為3module SDRAM_control(input clk ,//100MHZinput rst_n ,//復(fù)位input wr_en ,//寫使能信號input [15:0] wr_data ,//寫數(shù)據(jù)input rd_en ,//讀使能信號input [1:0] bank_addr ,//bank地址input [11:0] row_addr ,//行地址input [8:0] col_addr ,//列地址output reg fifo_rdreq ,//寫FIFO讀請求信號output reg [15:0] rd_data ,//讀出的數(shù)據(jù)output reg rd_data_vld ,//讀出數(shù)據(jù)有效位output wire wr_data_vld ,//寫入數(shù)據(jù)有效位output wire wdata_done ,//寫數(shù)據(jù)結(jié)束標志output wire rdata_done ,//讀數(shù)據(jù)結(jié)束標志output wire sdram_clk ,//SDRAM時鐘信號output reg [3:0] sdram_commond ,//{cs,ras,cas,we}output wire sdram_cke ,//時鐘使能信號output reg [1:0] sdram_dqm ,//數(shù)據(jù)線屏蔽信號output reg [11:0] sdram_addr ,//SDRAM地址線output reg [1:0] sdram_bank ,//SDRAM bank選取inout wire[15:0] sdram_dq , //SDRAM數(shù)據(jù)輸出輸入總線output wire state_wr_req , //新增,用于讀寫地址判斷output wire state_rd_req //新增,用于讀寫地址判斷);//延時localparam TWAIT_200us = 15'd20000 ;//上電等待時間localparam TRP = 2'd3 ;//預(yù)充電周期localparam TRC = 4'd10 ;//自刷新周期localparam TRSC = 2'd3 ;//加載模式寄存器周期localparam TRCD = 2'd2 ;//激活命令周期localparam TREAD_11 = 4'd11 ;//burst=8,cas=3localparam TWRITE_8 = 4'd8 ;//burst=8localparam AUTO_REF_TIME= 11'd1562 ;//狀態(tài)localparam NOP = 3'd0 ;localparam PRECHARGE = 3'd1 ;localparam REF = 3'd2 ;localparam MODE = 3'd3 ;localparam IDLE = 3'd4 ;localparam ACTIVE = 3'd5 ;localparam WRITE = 3'd6 ;localparam READ = 3'd7 ;//操作命令localparam NOP_CMD = 4'b0111 ;localparam PRECHARGE_CMD= 4'b0010 ;localparam REF_CMD = 4'b0001 ;localparam MODE_CMD = 4'b0000 ;localparam ACTIVE_CMD = 4'b0011 ;localparam WRITE_CMD = 4'b0100 ;localparam READ_CMD = 4'b0101 ;//初始化階段地址線localparam ALL_BANK = 12'b01_0_00_000_0_000;//預(yù)充電地址線localparam MODE_CONFIG = 12'b00_0_00_011_0_011;//配置模式寄存器時地址線wire nop_to_pre_start ;wire pre_to_ref_start ;wire pre_to_idle_start ;wire ref_to_mode_start ;wire ref_to_idle_start ;wire ref_to_ref_start ;wire mode_to_idle_start ;wire idle_to_active_start ;wire idle_to_ref_start ;wire active_to_write_start ;wire active_to_read_start ;wire write_to_pre_start ;wire read_to_pre_start ;reg [2:0] state_c ;reg [2:0] state_n ;wire sdram_dq_en ;wire[15:0] sdram_dq_r ;reg rd_data_vld_ff0 ;reg rd_data_vld_ff1 ;reg rd_data_vld_ff2 ;reg rd_data_vld_ff3 ;reg [10:0] auto_ref_cnt ;wire add_auto_ref_cnt;wire end_auto_ref_cnt;reg ref_req ;wire init_done ;reg init_flag ;reg [14:0] cnt0 ;wire add_cnt0 ;wire end_cnt0 ;reg [14:0] x ;reg [3:0] ref_cnt1 ;wire add_cnt1 ;wire end_cnt1 ;reg flag_rd ; reg flag_wr ; reg fifo_rdreq_f ;reg [2:0] fifo_rdreq_cnt;assign state_wr_req = state_c==IDLE; assign state_rd_req = state_c==IDLE;assign sdram_clk = ~clk;always @(posedge clk or negedge rst_n) beginif (!rst_n) beginstate_c <= NOP; endelse beginstate_c <= state_n;endendalways @(*)begincase(state_c)NOP :beginif (nop_to_pre_start) beginstate_n = PRECHARGE;endelse beginstate_n = state_c;endendPRECHARGE:beginif (pre_to_ref_start) beginstate_n = REF;endelse if (pre_to_idle_start) beginstate_n = IDLE;endelse beginstate_n = state_c;endendREF:beginif (ref_to_mode_start) beginstate_n = MODE;endelse if (ref_to_idle_start) beginstate_n = IDLE;endelse if (ref_to_ref_start) beginstate_n = REF;endelse beginstate_n = state_c;endendMODE:beginif (mode_to_idle_start) beginstate_n = IDLE;endelse beginstate_n =state_c;endendIDLE:beginif (idle_to_active_start) beginstate_n = ACTIVE;endelse if (idle_to_ref_start) beginstate_n = REF;endelse beginstate_n = state_c;endendACTIVE:beginif (active_to_write_start) beginstate_n = WRITE;endelse if (active_to_read_start) beginstate_n = READ;endelse beginstate_n = state_c;endendWRITE:beginif(write_to_pre_start)beginstate_n = PRECHARGE;endelse beginstate_n = state_c;endendREAD:beginif (read_to_pre_start) beginstate_n = PRECHARGE;endelse beginstate_n = state_c;endenddefault:state_n = IDLE;endcaseendassign nop_to_pre_start = (state_c==NOP && end_cnt0);assign pre_to_ref_start = (state_c==PRECHARGE && end_cnt0 && init_flag==1);assign pre_to_idle_start = (state_c==PRECHARGE && end_cnt0 && init_flag==0);assign ref_to_mode_start = (state_c==REF && init_flag==1 && end_cnt1);assign ref_to_idle_start = (state_c==REF && init_flag==0 && end_cnt0);assign ref_to_ref_start = (state_c==REF && init_flag==1 && end_cnt0 && ref_cnt1<7);assign mode_to_idle_start = (state_c==MODE && init_flag==1 && end_cnt0);assign idle_to_active_start = (state_c==IDLE && (wr_en || rd_en) && ref_req==0);assign idle_to_ref_start = (state_c==IDLE && ref_req==1);assign active_to_write_start = (state_c==ACTIVE && end_cnt0 && flag_wr);assign active_to_read_start = (state_c==ACTIVE && end_cnt0 && flag_rd);assign write_to_pre_start = (state_c==WRITE && end_cnt0);assign read_to_pre_start = (state_c==READ && end_cnt0);//命令控制字 sdram_commond = {CS,RAS,CAS,WE};always @(posedge clk or negedge rst_n)beginif (!rst_n) beginsdram_commond <= NOP_CMD;endelse if (nop_to_pre_start || write_to_pre_start || read_to_pre_start) beginsdram_commond <= PRECHARGE_CMD;endelse if (pre_to_ref_start || ref_to_ref_start || idle_to_ref_start) beginsdram_commond <= REF_CMD;endelse if (ref_to_mode_start) beginsdram_commond <= MODE_CMD;endelse if (idle_to_active_start) beginsdram_commond <= ACTIVE_CMD;endelse if (active_to_write_start) beginsdram_commond <= WRITE_CMD;endelse if (active_to_read_start) beginsdram_commond <= READ_CMD;endelse beginsdram_commond <= NOP_CMD;endend//cke信號保持拉高assign sdram_cke = 1;//dqm信號always @(posedge clk or negedge rst_n)beginif(!rst_n)beginsdram_dqm <= 2'b11;endelse if(init_done)beginsdram_dqm <= 2'b00;endend//地址線always @(posedge clk or negedge rst_n)beginif(!rst_n)beginsdram_addr <= 12'b0;endelse if(nop_to_pre_start || write_to_pre_start || read_to_pre_start)beginsdram_addr <= ALL_BANK; endelse if(ref_to_mode_start)beginsdram_addr <= MODE_CONFIG; endelse if(idle_to_active_start)beginsdram_addr <= row_addr; endelse if (active_to_read_start || active_to_write_start) beginsdram_addr <= {3'b000,col_addr};endelse beginsdram_addr <= 12'b0; endend//sdram_bankalways @(posedge clk or negedge rst_n)beginif(!rst_n)beginsdram_bank <= 2'b00;endelse if (idle_to_active_start || active_to_write_start || active_to_read_start) beginsdram_bank <= bank_addr;endelse beginsdram_bank <= 2'b00;endend//sdram_dqassign sdram_dq_en = (state_c==WRITE) ? 1'b1 : 1'b0;assign sdram_dq = sdram_dq_en ? sdram_dq_r : 16'hzzzz;assign sdram_dq_r = wr_data;assign wr_data_vld = state_c==WRITE;assign wdata_done = write_to_pre_start;assign rdata_done = read_to_pre_start;always @(posedge clk or negedge rst_n)beginif (!rst_n) beginrd_data <= 16'd0;endelse beginrd_data <= sdram_dq;endend// assign rd_data = state_c==READ ? sdram_dq:16'hzzzz;//讀有效標志always @(posedge clk or negedge rst_n)beginif (!rst_n) beginrd_data_vld_ff0 <= 0;endelse if (active_to_read_start) beginrd_data_vld_ff0 <= 1;endelse if (state_c==READ && cnt0==TREAD_11-4) beginrd_data_vld_ff0 <= 0;endendalways @(posedge clk or negedge rst_n)beginif (!rst_n) beginrd_data_vld_ff1 <= 0;rd_data_vld_ff2 <= 0;rd_data_vld_ff3 <= 0;rd_data_vld <= 0;endelse beginrd_data_vld_ff1 <= rd_data_vld_ff0;rd_data_vld_ff2 <= rd_data_vld_ff1;rd_data_vld_ff3 <= rd_data_vld_ff2;rd_data_vld <= rd_data_vld_ff3;endend//刷新請求計數(shù)always @(posedge clk or negedge rst_n)beginif (!rst_n) beginauto_ref_cnt <= 0;endelse if (add_auto_ref_cnt) beginif (end_auto_ref_cnt) beginauto_ref_cnt <= 0;endelse beginauto_ref_cnt <= auto_ref_cnt + 1'b1;endendendassign add_auto_ref_cnt = init_flag==0;assign end_auto_ref_cnt = (add_auto_ref_cnt && auto_ref_cnt==AUTO_REF_TIME-1);//ref_req 刷新請求always @(posedge clk or negedge rst_n)beginif (!rst_n) beginref_req <= 0;endelse if (end_auto_ref_cnt) beginref_req <= 1;endelse if (state_c==IDLE && ref_req==1) beginref_req <= 0;endend//初始化標志assign init_done = (state_c==MODE && end_cnt0);always @(posedge clk or negedge rst_n)beginif (!rst_n) begininit_flag <= 1;endelse if (init_done) begininit_flag <= 0;endendalways @(posedge clk or negedge rst_n)beginif (!rst_n) begincnt0 <= 0;endelse if (add_cnt0) beginif (end_cnt0) begincnt0 <= 0;endelse begincnt0 <= cnt0 + 1'b1;endendendassign add_cnt0 = state_c!=IDLE;assign end_cnt0 = add_cnt0 && cnt0==x-1'b1;always @(*)begincase(state_c)NOP : x = TWAIT_200us;PRECHARGE : x = TRP;REF : x = TRC;MODE : x = TRSC;ACTIVE : x = TRCD;WRITE : x = TWRITE_8;READ : x = TREAD_11;default : x = 0;endcaseend//初始化自刷新8個周期計數(shù)always @(posedge clk or negedge rst_n)beginif (!rst_n) beginref_cnt1 <= 0;endelse if (add_cnt1) beginif (end_cnt1) beginref_cnt1 <= 0;endelse beginref_cnt1 <= ref_cnt1 + 1'b1;endendendassign add_cnt1 = (state_c==REF && init_flag==1 && end_cnt0);assign end_cnt1 = (add_cnt1 && ref_cnt1== 8-1);//讀寫信號標志always @(posedge clk or negedge rst_n)beginif (!rst_n) beginflag_rd <= 0;endelse if (state_c==IDLE && rd_en && ref_req==0) beginflag_rd <= 1;endelse if (pre_to_idle_start && flag_rd==1) beginflag_rd <= 0;endendalways @(posedge clk or negedge rst_n)beginif (!rst_n) beginflag_wr <= 0;endelse if (state_c==IDLE && wr_en && rd_en==0 && ref_req==0) begin //讀優(yōu)先級高于寫優(yōu)先級flag_wr <= 1;endelse if (pre_to_idle_start && flag_wr==1) beginflag_wr <= 0;endend//寫FIFO讀請求信號always @(posedge clk or negedge rst_n)beginif (!rst_n) beginfifo_rdreq_f <= 0;endelse if (state_c==IDLE && wr_en && rd_en==0 && ref_req==0) beginfifo_rdreq_f <= 1;endelse if (fifo_rdreq_cnt>=7) beginfifo_rdreq_f <= 0;endendalways @(posedge clk or negedge rst_n)beginif (!rst_n) beginfifo_rdreq_cnt <= 0;endelse if (fifo_rdreq_f) beginif (fifo_rdreq_cnt >= 7) beginfifo_rdreq_cnt <= 0;endelse beginfifo_rdreq_cnt <= fifo_rdreq_cnt + 1'b1;endendend//延遲一拍,時序?qū)Ralways @(posedge clk or negedge rst_n)beginif (!rst_n) beginfifo_rdreq <= 0;endelse beginfifo_rdreq <= fifo_rdreq_f;endendendmodule

9、VGA控制模塊

本專題博客講的很詳細,也沒有改動,這里不再贅述。

10、頂層模塊

// Company : // Engineer : // ----------------------------------------------------------------------------- // https://blog.csdn.net/qq_33231534 PHF's CSDN blog // ----------------------------------------------------------------------------- // Create Date : 2020-09-27 11:04:42 // Revise Data : 2020-09-30 11:11:00 // File Name : camera_ov7670_top.v // Target Devices : XC7Z015-CLG485-2 // Tool Versions : Vivado 2019.2 // Revision : V1.1 // Editor : sublime text3, tab size (4) // Description : module camera_ov7670_top(input clk ,//系統(tǒng)時鐘50MHzinput rst_n ,//系統(tǒng)復(fù)位input vsync ,//OV7670模塊輸入場同步信號input href ,//OV7670模塊輸入行同步信號input [7:0] din ,//OV7670模塊攝像頭數(shù)據(jù)輸入input pclk ,//OV7670模塊像素時鐘輸入output scl ,//OV7670模塊配置SCCB協(xié)議時鐘線inout sda ,//OV7670模塊配置SCCB協(xié)議數(shù)據(jù)線output xclk ,//OV7670模塊輸入時鐘output pwdn ,//OV7670模塊模式選擇 0:工作 1:POWER DOWNoutput reset ,//OV7670模塊初始化所有寄存器到默認值 0:RESET 模式 1:一般模式output wire VGA_clk ,//25MHzoutput wire[23:0] VGA_RGB ,//VGA模塊圖像數(shù)據(jù){R[7:0],G[7:0],B[7:0]}output wire VGA_HS ,//VGA模塊行同步信號output wire VGA_VS ,//VGA模塊場同步信號output wire VGA_BLK ,//VGA模塊消影信號output wire sdram_clk ,//SDRAM時鐘信號output wire[3:0] sdram_commond ,//{cs,ras,cas,we}output wire sdram_cke ,//時鐘使能信號output wire[1:0] sdram_dqm ,//數(shù)據(jù)線屏蔽信號output wire[11:0] sdram_addr ,//SDRAM地址線output wire[1:0] sdram_bank ,//SDRAM bank選取inout wire[15:0] sdram_dq //SDRAM數(shù)據(jù)輸出輸入總線);wire clk_25M ;wire clk_100M ;wire init_done ;wire [15:0] data_rgb565 ;wire data_rgb565_vld ;wire ov7670_vsync ;wire fifo_rdreq ;wire [15:0] wr_data ;wire [7:0] rdusedw ;wire [7:0] rdusedw1 ;wire wdata_done ;wire wr_en ;wire [11:0] wr_row_addr ;wire [8:0] wr_col_addr ;wire rd_en ;reg [11:0] row_addr ;reg [8:0] col_addr ;wire [15:0] rd_data ;wire rd_data_vld ;wire rdata_done ;wire [11:0] rd_row_addr ;wire [8:0] rd_col_addr ;wire dat_act ;wire [15:0] q ;wire wr_addr_req ;wire rd_addr_req ;wire state_wr_req ;wire state_rd_req ;assign xclk = clk_25M;assign pwdn = 0;assign reset = 1;always @(*) beginif (!rst_n) beginrow_addr <= 12'd0;col_addr <= 9'd0;endelse if (wr_addr_req) beginrow_addr <= wr_row_addr;col_addr <= wr_col_addr;endelse if (rd_addr_req) beginrow_addr <= rd_row_addr;col_addr <= rd_col_addr;endelse beginrow_addr <= row_addr;col_addr <= col_addr;endendassign wr_addr_req = (wr_en&&!rd_addr_req&&state_wr_req)?1'b1:1'b0;assign rd_addr_req = (rd_en&&state_rd_req)?1'b1:1'b0;pll inst_pll(.inclk0(clk), .c0(clk_100M), .c1(clk_25M));ov7670_init inst_ov7670_init (.clk(clk_25M), .rst_n(rst_n), .scl(scl), .sda(sda), .init_done(init_done));ov7670_data_16rgb565 inst_ov7670_data_16rgb565(.clk (pclk),.rst_n (rst_n),.vsync (vsync),.href (href),.din (din),.init_done (init_done),.data_rgb565 (data_rgb565),.data_rgb565_vld (data_rgb565_vld),.ov7670_vsync (ov7670_vsync) //用來給寫FIFO清零);async_fifo wr_async_fifo(.aclr (ov7670_vsync),.data (data_rgb565),.rdclk (clk_100M),.rdreq (fifo_rdreq),.wrclk (clk_25M),.wrreq (data_rgb565_vld),.q (wr_data),.rdempty (),.rdusedw (rdusedw),.wrfull ());wr_control inst_wr_control(.clk (clk_100M),.rst_n (rst_n),.rdusedw (rdusedw),.row_addr_max (10'd600),.col_addr_max (10'd512),.sdram_wdata_done (wdata_done),.aclr (ov7670_vsync),.sdram_wr_en (wr_en),.wr_row_addr (wr_row_addr), //.wr_col_addr (wr_col_addr) //);SDRAM_control inst_SDRAM_control(.clk (clk_100M),.rst_n (rst_n),.wr_en (wr_en),.wr_data (wr_data),.rd_en (rd_en),.bank_addr (2'b00),.row_addr (row_addr),.col_addr (col_addr),.fifo_rdreq (fifo_rdreq),.rd_data (rd_data),.rd_data_vld (rd_data_vld),.wr_data_vld (),.wdata_done (wdata_done),.rdata_done (rdata_done),.sdram_clk (sdram_clk),.sdram_commond (sdram_commond),.sdram_cke (sdram_cke),.sdram_dqm (sdram_dqm),.sdram_addr (sdram_addr),.sdram_bank (sdram_bank),.sdram_dq (sdram_dq),.state_wr_req (state_wr_req),.state_rd_req (state_rd_req));rd_control inst_rd_control(.clk (clk_100M),.rst_n (rst_n),.rdusedw (rdusedw1),.row_addr_max (10'd600),.col_addr_max (10'd512),.sdram_rdata_done (rdata_done),.aclr (),.sdram_rd_en (rd_en),.rd_row_addr (rd_row_addr), //.rd_col_addr (rd_col_addr) //);async_fifo_ahead inst_async_fifo_ahead(.aclr (),.data (rd_data),.rdclk (clk_25M),.rdreq (dat_act),.wrclk (clk_100M),.wrreq (rd_data_vld),.q (q),.rdempty (),.rdusedw (rdusedw1),.wrfull ());VGA_ctrl inst_VGA_ctrl (.clk_25M (clk_25M),.rst_n (rst_n),.data_in ({q[15:11],3'b000,q[10:5],2'b00,q[4:0],3'b000}),.VGA_clk (VGA_clk),.VGA_RGB (VGA_RGB),.VGA_HS (VGA_HS),.VGA_VS (VGA_VS),.VGA_BLK (VGA_BLK),.hcount (),.vcount (),.dat_act (dat_act));endmodule

三、仿真測試

仿真的時候沒有加入攝像頭數(shù)據(jù)流部分,從寫FIFO開始,數(shù)據(jù)自己設(shè)置寫入寫FIFO,經(jīng)過SDRAM存儲,這里用SDRAM的仿真模型模擬SDRAM,然后讀出數(shù)據(jù)到讀FIFO中,再從讀FIFO中讀出數(shù)據(jù)。

測試模型的頂層代碼為:

// Company : // Engineer : // ----------------------------------------------------------------------------- // https://blog.csdn.net/qq_33231534 PHF's CSDN blog // ----------------------------------------------------------------------------- // Create Date : 2020-10-20 17:19:56 // Revise Data : 2020-10-20 17:19:56 // File Name : SDRAM_control_tb.v // Target Devices : XC7Z015-CLG485-2 // Tool Versions : Vivado 2019.2 // Revision : V1.1 // Editor : sublime text3, tab size (4) // Description : 】 module SDRAM_control_test(input clk_25M,input clk_100M,input rst_n,input [15:0] data_rgb565,input data_rgb565_vld,input ov7670_vsync,output [15:0] q);reg [11:0] row_addr; reg [8:0] col_addr;wire fifo_rdreq; wire [15:0] wr_data; wire [7:0] rdusedw; wire wdata_done; wire wr_en; wire [11:0] wr_row_addr; wire [8:0] wr_col_addr; wire rd_en; wire [15:0] rd_data; wire rd_data_vld; wire rdata_done; wire sdram_clk; wire [3:0] sdram_commond; wire sdram_cke; wire [1:0] sdram_dqm; wire [11:0] sdram_addr; wire [1:0] sdram_bank; wire [15:0] sdram_dq; wire [7:0] rdusedw1; wire [11:0] rd_row_addr; wire [8:0] rd_col_addr; // wire [15:0] q; wire wr_addr_req ; wire rd_addr_req ; wire state_wr_req ; wire state_rd_req ;//重點出錯 assign row_addr = state_wr_req ? wr_row_addr : rd_row_addr; assign col_addr = state_wr_req ? wr_col_addr : rd_col_addr;async_fifo wr_async_fifo(.aclr (ov7670_vsync),.data (data_rgb565),.rdclk (clk_100M),.rdreq (fifo_rdreq),.wrclk (clk_25M),.wrreq (data_rgb565_vld),.q (wr_data),.rdempty (),.rdusedw (rdusedw),.wrfull ()); wr_control inst_wr_control(.clk (clk_100M),.rst_n (rst_n),.rdusedw (rdusedw),.row_addr_max (10'd600),.col_addr_max (10'd512),.sdram_wdata_done (wdata_done),.aclr (ov7670_vsync),.sdram_wr_en (wr_en),.wr_row_addr (wr_row_addr), //.wr_col_addr (wr_col_addr) //);SDRAM_control inst_SDRAM_control(.clk (clk_100M),.rst_n (rst_n),.wr_en (wr_en),.wr_data (wr_data),.rd_en (rd_en),.bank_addr (2'b00),.row_addr (row_addr),.col_addr (col_addr),.fifo_rdreq (fifo_rdreq),.rd_data (rd_data),.rd_data_vld (rd_data_vld),.wr_data_vld (),.wdata_done (wdata_done),.rdata_done (rdata_done),.sdram_clk (sdram_clk),.sdram_commond (sdram_commond),.sdram_cke (sdram_cke),.sdram_dqm (sdram_dqm),.sdram_addr (sdram_addr),.sdram_bank (sdram_bank),.sdram_dq (sdram_dq),.state_wr_req (state_wr_req),.state_rd_req (state_rd_req));sdram_model_plus #(.addr_bits(12),.data_bits(16),.col_bits(9),.mem_sizes(640*500)) inst_sdram_model_plus (.Dq (sdram_dq),.Addr (sdram_addr),.Ba (sdram_bank),.Clk (sdram_clk),.Cke (sdram_cke),.Cs_n (sdram_commond[3]),.Ras_n (sdram_commond[2]),.Cas_n (sdram_commond[1]),.We_n (sdram_commond[0]),.Dqm (sdram_dqm),.Debug (1'b1));rd_control inst_rd_control(.clk (clk_100M),.rst_n (rst_n),.rdusedw (rdusedw1),.row_addr_max (10'd600),.col_addr_max (10'd512),.sdram_rdata_done (rdata_done),.aclr (),.sdram_rd_en (rd_en),.rd_row_addr (rd_row_addr), //.rd_col_addr (rd_col_addr) //);async_fifo_ahead inst_async_fifo_ahead(.aclr (),.data (rd_data),.rdclk (clk_25M),.rdreq (1'b1),.wrclk (clk_100M),.wrreq (rd_data_vld),.q (q),.rdempty (),.rdusedw (rdusedw1),.wrfull ());endmodule

測試代碼為:發(fā)送兩幀數(shù)據(jù)

`timescale 1ns/1nsmodule SDRAM_control_test_tb (); /* this is automatically generated */reg rst_n;reg clk_100M;reg clk_25M;// (*NOTE*) replace reset, clock, othersreg [15:0] data_rgb565;reg data_rgb565_vld;reg ov7670_vsync;wire [15:0] q;SDRAM_control_test inst_SDRAM_control_test(.clk_25M (clk_25M),.clk_100M (clk_100M),.rst_n (rst_n),.data_rgb565 (data_rgb565),.data_rgb565_vld (data_rgb565_vld),.ov7670_vsync (ov7670_vsync),.q (q));initial clk_25M = 1; always #20 clk_25M = ~clk_25M; initial clk_100M = 1; always #5 clk_100M = ~clk_100M;initial begin#1;rst_n = 0;data_rgb565 = 0;data_rgb565_vld = 0;ov7670_vsync = 0;#200;rst_n = 1;#200;@(posedge inst_SDRAM_control_test.inst_SDRAM_control.mode_to_idle_start)#2000;data_rgb565_vld = 1;repeat(600)beginrepeat(512)begin#40;data_rgb565 = data_rgb565 + 1;endenddata_rgb565_vld = 0;#20000;data_rgb565_vld = 1;repeat(600)beginrepeat(512)begin#40;data_rgb565 = data_rgb565 + 1;endend#200;$stop;endendmodule

仿真后可觀察modelsim控制臺信息,觀察SDRAM數(shù)據(jù)讀寫的記錄,從中觀察是否有錯誤。如圖:

這里容易出錯的地方是SDRAM讀寫地址,仿真中容易在讀數(shù)據(jù)時用的是寫數(shù)據(jù)的行地址,如圖:

SDRAM讀寫地址代碼如下,這里高了挺久,很容易出錯,對時序要求挺高,只能用組合電路實現(xiàn)。

四、上板驗證

剛開始寫好代碼上板圖:

調(diào)好焦距以后(很大部分數(shù)據(jù)錯亂):

一次修改后上板圖(少部分數(shù)據(jù)錯亂):

最終圖(無數(shù)據(jù)丟失錯亂):

?

五、總結(jié)

這個代碼寫好挺久了,但有問題。兩三個星期,然后因為各種事情耽擱了,就一直沒有修改,找問題。一開始出的圖數(shù)據(jù)丟失錯亂嚴重,通過quartus軟件的sjgnal tap logic analyzer工具抓取數(shù)據(jù)分析,由于抓取數(shù)據(jù)有限,根本看不出來哪里的問題,因此后邊做了挺久也沒找到問題在哪。自己分析應(yīng)該是SDRAM控制器寫的有問題,于是就對SDRAM控制器進行了仿真測試,當然測試情況要多一些,然后還是發(fā)現(xiàn)沒什么問題。然后昨天寫了個測試代碼,就是上邊給出來的,仿真測試的時候,在modelsim控制臺輸出信息有sdram讀取數(shù)據(jù)的信息,就發(fā)現(xiàn)讀數(shù)據(jù)時行地址有時候會用上一次讀數(shù)據(jù)的行地址,這個問題從這里就找出來了,通過定位發(fā)現(xiàn),在頂層模塊中,對SDRAM讀寫地址部分代碼寫的有問題,對時序要求較高,才出現(xiàn)問題,這里對這個問題不做細講,第一次修改后明顯圖像好了很多,還是有數(shù)據(jù)錯亂丟失,其實還是這里沒寫好,經(jīng)過修改后就沒有這些問題了。

在代碼出現(xiàn)問題的時候千萬不要嫌麻煩,多動手多測試,問題總會解決的。


工程文件下載鏈接:https://download.csdn.net/download/qq_33231534/13010542


?

總結(jié)

以上是生活随笔為你收集整理的总:基于FPGA的OV7670摄像头显示的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

国产亚洲高清视频 | 狠狠操在线 | 91资源在线播放 | 国产又粗又猛又黄又爽的视频 | 一区中文字幕在线观看 | 蜜桃麻豆www久久囤产精品 | 在线之家官网 | 国产打女人屁股调教97 | 久久久午夜精品福利内容 | 亚洲精品美女 | 久久国产精品视频免费看 | 免费在线播放 | 97免费在线观看视频 | 国产福利精品一区二区 | 国产电影黄色av | av在线免费在线观看 | 少妇视频在线播放 | 97视频中文字幕 | 亚洲精品tv久久久久久久久久 | a成人v | 欧美精品一区二区在线播放 | 69av国产 | 美女一区网站 | 性色av免费看| 黄色三级久久 | 亚洲精品国偷自产在线91正片 | 成人精品视频久久久久 | av不卡免费看 | 国产精品麻豆视频 | 色欧美视频 | av一区二区在线观看中文字幕 | 中文字幕.av.在线 | 日韩精品在线视频免费观看 | 五月在线 | 日日碰狠狠添天天爽超碰97久久 | 亚洲黄色网络 | 国产中文字幕网 | 92精品国产成人观看免费 | 色五月色开心色婷婷色丁香 | 一区二区不卡 | www.操.com| 黄网在线免费观看 | 亚洲午夜精品一区 | 国产一区精品在线观看 | 亚洲国产视频网站 | 亚洲国产精品成人va在线观看 | 亚洲国产日韩精品 | 在线视频 一区二区 | 久久人人艹 | 国产成人在线播放 | 69av久久| 99色精品视频 | 国产精品欧美久久久久三级 | 激情电影影院 | 久久久久久久久久久久影院 | 国产区欧美 | 国产成人一级 | 亚洲国产成人精品在线观看 | 国内精品二区 | 久久天天躁 | 黄色电影小说 | 99久久夜色精品国产亚洲96 | 又黄又爽又色无遮挡免费 | 日日操夜夜操狠狠操 | 99精品视频在线免费观看 | 日韩视频免费在线观看 | 成人四虎影院 | 全黄色一级片 | 国产成人精品久久久久 | 天堂av最新网址 | 三级视频片 | 夜夜天天干 | 精品久久1| www蜜桃视频 | 中文字幕在线播放视频 | 国产69久久久 | 国产伦理剧 | .精品久久久麻豆国产精品 亚洲va欧美 | 日韩在线不卡av | 午夜在线免费观看 | 狠狠色狠狠色综合日日92 | 欧美日韩视频一区二区 | av免费观看在线 | 亚洲精品久久久蜜桃直播 | 色综合久久久久 | 精品亚洲视频在线观看 | 精品女同一区二区三区在线观看 | 亚洲精品乱码久久久久 | 久久9视频| 国产伦精品一区二区三区四区视频 | www.夜夜干.com | 久久国产精品99久久久久久进口 | 国语精品免费视频 | 亚洲精品免费在线观看 | 97免费中文视频在线观看 | 国产区在线视频 | 亚洲无吗天堂 | 国产精品成久久久久 | 国产二区视频在线观看 | 99免费精品视频 | 久久久久久久影视 | 国产精品亚洲片在线播放 | 精品久久久久久综合 | 国产精品综合久久久 | 欧美日韩久久不卡 | www.av在线播放 | 午夜精品成人一区二区三区 | 夜夜操狠狠操 | 九九热中文字幕 | 国产无遮挡又黄又爽馒头漫画 | 成人免费视频网 | 久久91久久久久麻豆精品 | 999成人网| 婷婷www| 欧美性护士 | 亚洲女人天堂成人av在线 | 亚洲美女精品区人人人人 | 日韩有码第一页 | 狠狠干婷婷 | 国语久久| 国产精品久久久久av免费 | 九九久久国产 | 中文字幕视频在线播放 | 免费一级黄色 | 国产高清精品在线观看 | 超碰97国产精品人人cao | 国产精品video爽爽爽爽 | 国产免费专区 | 97超碰在线免费观看 | 欧美 亚洲 另类 激情 另类 | 久久国产视频网 | 国产亚洲精品无 | 欧美一二三区播放 | 亚洲特级毛片 | 国产成人久久av | 中日韩在线视频 | 亚洲精品久久久久58 | 日韩理论片在线观看 | 免费看搞黄视频网站 | 激情网站网址 | 中文字幕av在线不卡 | 精品中文字幕在线播放 | www.黄色片网站 | 色先锋资源网 | 国内精品久久久久久久久久久 | 婷婷色在线播放 | 精品视频在线播放 | 久久亚洲福利 | 久久综合狠狠综合 | 国产免费高清 | 九色视频自拍 | 色偷偷中文字幕 | 国产精品久久久久久久久久99 | 亚洲高清不卡av | 日韩视频www | 成人一级电影在线观看 | 久久国精品 | 色婷婷视频 | 成人在线观看免费视频 | 欧美性性网 | 18久久久久 | 瑞典xxxx性hd极品 | 日韩在线播放欧美字幕 | 久草影视在线 | 精品99视频 | 日日日操 | 国产色拍| 性色在线视频 | 欧美极品一区二区三区 | 亚洲性视频 | 中文欧美字幕免费 | 91麻豆精品国产91久久久久 | 欧美日韩一区二区三区在线观看视频 | 国产精品视频在线看 | 久草在线视频网站 | 久久精品成人热国产成 | 欧美日韩一区二区三区在线观看视频 | 欧美最猛性xxxxx亚洲精品 | 天天射天天干天天插 | 不卡视频国产 | 久久久久久久久久久网站 | 国产高清专区 | 久久五月激情 | 成年人视频免费在线播放 | 97国产大学生情侣白嫩酒店 | 不卡的av在线播放 | 99精品成人 | 欧美日韩视频在线一区 | 日韩 精品 一区 国产 麻豆 | 蜜桃麻豆www久久囤产精品 | 狠狠色丁香 | 99在线精品视频 | 欧美亚洲三级 | 国产高清福利在线 | 黄色午夜| 中文字幕中文字幕中文字幕 | 日韩大片免费在线观看 | 亚洲成av人影院 | 日韩av不卡在线播放 | 在线成人国产 | 久久久999精品视频 国产美女免费观看 | 狠狠干五月天 | 探花系列在线 | 天天插天天 | 超碰在线成人 | 黄色av观看 | 九九久久成人 | 91av欧美| 国产精品免费不卡 | 日韩久久午夜一级啪啪 | 免费看成人片 | 天天曰天天干 | 久久亚洲私人国产精品va | 中文字幕乱偷在线 | 免费能看的黄色片 | 国产小视频你懂的 | 亚洲精品美女在线观看播放 | 久久综合久久久 | 免费久久99精品国产婷婷六月 | 最近乱久中文字幕 | 久久久久精| 亚洲成aⅴ人在线观看 | 丁香花中文在线免费观看 | 成人免费视频观看 | 热久久国产 | 国产成人99久久亚洲综合精品 | 去干成人网 | 黄色小网站免费看 | 特黄一级毛片 | 激情久久五月 | 色视频在线| 青青草国产精品 | 特及黄色片 | 国产免费一区二区三区网站免费 | 日日草视频 | 午夜狠狠干 | 国产一区成人在线 | 麻豆91在线看 | 中文字幕中文中文字幕 | 免费福利在线观看 | 六月丁香久久 | 韩国一区视频 | 免费一级片视频 | 99视频精品免费视频 | 波多野结衣在线观看一区二区三区 | 国产精品区在线观看 | 蜜臀精品久久久久久蜜臀 | 成年人在线免费看视频 | 日韩一三区 | 国产真实在线 | 欧美日韩伦理一区 | 九九视频在线观看视频6 | 国产精品美女免费 | 伊人精品在线 | 日韩电影黄色 | 国产一级免费av | 精品国产一区二区三区在线观看 | 中文字幕日本电影 | 国产一区在线播放 | 亚洲伊人婷婷 | 国产精品区在线观看 | 麻豆激情电影 | 三级黄色片子 | 丰满少妇久久久 | av天天干 | 99色国产 | 91精品久久久久久久99蜜桃 | 日韩精品一区二区电影 | 亚洲国产一区二区精品专区 | 在线91网| 国产在线成人 | 成人a级大片 | 狠狠干夜夜 | 黄色小网站免费看 | 成片视频在线观看 | 成人一级影视 | 午夜成人免费影院 | 9在线观看免费高清完整版 玖玖爱免费视频 | 欧美少妇bbwhd| 亚洲狠狠操 | 在线导航av | 黄色免费网 | 欧美精品中文字幕亚洲专区 | 久久污视频 | 日本在线中文 | 色成人亚洲网 | 最近日本中文字幕 | 成人国产网站 | 蜜臀久久99精品久久久无需会员 | 免费a视频| 免费av高清| 一区二区三区免费播放 | 天天综合色网 | 国产成人久久77777精品 | 在线看片视频 | 久久精品国产一区二区三区 | 麻豆久久久久 | 婷婷丁香六月天 | 在线亚洲精品 | 久久99这里只有精品 | 欧美狠狠操 | 中文字幕av免费在线观看 | 欧美日韩在线第一页 | 国产精品久久一区二区无卡 | 欧美一级免费高清 | 一本色道久久精品 | 亚洲精品美女在线观看播放 | 黄p在线播放 | 97成人超碰 | 伊人中文网 | 毛片网站观看 | 亚洲精品国 | 免费看毛片网站 | 日批在线看 | 成年人视频在线免费播放 | 日韩三级在线 | 黄a在线| 波多野结衣一区二区三区中文字幕 | 色综合天天综合在线视频 | www.xxxx变态.com| 精品国产一区二区三区av性色 | 久久综合免费视频影院 | 91亚洲国产成人久久精品网站 | 91精品国产综合久久婷婷香蕉 | 国产精品国产三级国产aⅴ无密码 | 欧美国产日韩一区二区三区 | 欧亚日韩精品一区二区在线 | 中文字幕乱码日本亚洲一区二区 | 国产精品毛片 | 日韩在线电影 | 国产精品久久在线观看 | 又爽又黄又无遮挡网站动态图 | 91精品办公室少妇高潮对白 | 婷婷九月丁香 | 精品久久久久久久久久久久 | 伊在线视频| 欧美精品乱码久久久久久按摩 | 久精品在线观看 | 在线导航福利 | 丰满少妇麻豆av | 欧美日韩国产综合一区二区 | 在线免费观看涩涩 | 久久精品国产免费看久久精品 | 视频在线亚洲 | 麻豆手机在线 | 九九热精品国产 | 久久97久久97精品免视看 | 国产综合香蕉五月婷在线 | 亚洲 av网站| 色婷婷天天干 | 国产一卡在线 | 六月丁香激情综合 | 成人av午夜 | 日本动漫做毛片一区二区 | 国产麻豆剧果冻传媒视频播放量 | 精品国产成人av | 精品国产一区二区三区在线 | 日韩久久精品一区二区三区 | 五月婷婷久久丁香 | 免费韩国av | 成片视频免费观看 | 国产电影黄色av | 国产精品久久久久久久久久新婚 | 西西444www大胆高清图片 | 午夜性盈盈 | 亚洲一区久久 | 欧美性脚交 | 999国内精品永久免费视频 | 91麻豆精品久久久久久 | 久久精品国产精品亚洲 | 国产精品免费视频久久久 | 久久精品国产精品亚洲精品 | 操久久网| 亚洲最大在线视频 | 91免费高清视频 | 国产精品成人一区二区三区吃奶 | 91在线看片| 国产亚洲资源 | 草久久影院 | 午夜黄色大片 | 久久综合九色99 | 久久艹艹 | 丁香六月激情婷婷 | 激情黄色一级片 | 免费看成人 | 久久99国产综合精品免费 | 国产高清视频在线播放 | 精品v亚洲v欧美v高清v | 在线观看中文字幕网站 | 成人在线免费视频观看 | 国产中年夫妇高潮精品视频 | 国产99久久久精品视频 | 97视频在线观看成人 | 91中文字幕一区 | 成人免费在线网 | 最新中文字幕 | 亚洲美女免费精品视频在线观看 | 在线观看中文字幕 | 国产一级二级在线观看 | 丁五月婷婷 | 国产成人久久久77777 | 午夜国产一区二区三区四区 | 激情综合网五月 | 在线观看中文字幕亚洲 | 亚洲精品国产免费 | 精品久久久久久久久久 | 久久免费国产精品1 | 天天曰天天干 | 亚洲成人在线免费 | 久久无码精品一区二区三区 | 久久专区| 天天天天爽 | 亚洲成人频道 | 日韩精品一二三 | 欧美资源在线观看 | 91字幕| 麻豆免费观看视频 | 91精品网站在线观看 | 亚洲国产日韩欧美在线 | 日本公乱妇视频 | 亚洲精品视频免费看 | 激情视频区 | 麻豆成人精品 | 国产91在线 | 美洲 | 91精品国自产在线偷拍蜜桃 | 天天综合网久久综合网 | 国产亚洲精品久久久网站好莱 | 日韩天天综合 | 精品视频在线视频 | 久草在线在线视频 | 夜夜躁狠狠躁日日躁视频黑人 | 欧美午夜理伦三级在线观看 | 91成人区 | 亚洲伦理一区 | 天天操天天透 | 久热香蕉视频 | 黄色影院在线观看 | 日韩欧美一区二区三区免费观看 | www.777奇米| 国产美女视频免费观看的网站 | 99视频在线精品免费观看2 | 成人污视频在线观看 | 天天操天天综合网 | 亚洲国产小视频在线观看 | 亚洲在线 | 最新av电影网址 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 五月天久久综合 | 中文字幕在线高清 | 91精品视频在线看 | 久久网站免费 | 成人av免费在线播放 | 日韩激情av在线 | 免费福利在线观看 | 黄色小网站免费看 | 久热av | 欧美另类交在线观看 | 狠狠的操狠狠的干 | 美女网站视频久久 | 97成人在线| 精品一区二区三区香蕉蜜桃 | 国产一卡久久电影永久 | 成人综合免费 | 日韩色区 | 免费欧美精品 | 999热视频 | 91看片在线观看 | h网站免费在线观看 | 成人a级黄色片 | 成年性视频| 91专区在线观看 | 午夜精品一区二区三区在线视频 | 性色av免费在线观看 | 久久字幕 | www在线观看国产 | 久久r精品 | 国产 成人 久久 | 蜜臀av夜夜澡人人爽人人 | 九九久久婷婷 | 三级av在线播放 | 国产亚洲精品久久久久久 | 久久综合在线 | 午夜电影久久久 | 日韩高清一二区 | 欧美一区三区四区 | 亚洲国产av精品毛片鲁大师 | 久久99视频 | 99欧美视频 | 婷婷六月综合网 | 一级精品视频在线观看宜春院 | 麻花天美星空视频 | av激情五月| 国产精品亚州 | 婷婷中文字幕综合 | 97夜夜澡人人双人人人喊 | 国产亚洲精品久久久久久电影 | 天天操天天射天天舔 | 免费视频一二三区 | 久久久久 免费视频 | 91人人澡人人爽人人精品 | 久久精品日本啪啪涩涩 | 99久久日韩精品免费热麻豆美女 | 亚洲人片在线观看 | 三级黄色免费片 | a电影免费看 | 久久桃花网 | 97在线精品 | 手机av资源 | 99久久婷婷国产 | 成人观看视频 | 中文字幕在线播放视频 | 久久综合电影 | 麻豆视频免费在线播放 | 一区 在线观看 | 天天射天天艹 | 色播五月激情综合网 | 亚洲国产免费网站 | 91黄色小网站 | 久久伦理 | 中文字幕一二三区 | 伊人va | 西西44人体做爰大胆视频 | 亚洲禁18久人片 | 国产视频在线看 | 2022久久国产露脸精品国产 | 中文一区二区三区在线观看 | 91桃色在线观看视频 | 一区二区三区播放 | 粉嫩av一区二区三区四区在线观看 | 婷婷天天色 | 黄色免费在线视频 | 97超碰资源 | a在线观看国产 | 美女网站色 | 欧美另类重口 | 亚洲最大av在线播放 | 波多野结衣亚洲一区二区 | 中文字幕在线成人 | 日日夜夜天天人人 | 欧美另类xxxx | 韩国视频一区二区三区 | 日韩av一区在线观看 | 日韩成人中文字幕 | 丁香婷婷久久久综合精品国产 | 最新成人av | 日韩激情网 | 亚洲精品视频在线观看免费视频 | 久久久久这里只有精品 | 最新av观看 | 国产精品一区二区在线免费观看 | 操操日日 | 欧美小视频在线观看 | 美女免费视频网站 | 97超碰在线久草超碰在线观看 | 亚洲一区二区天堂 | 99热九九这里只有精品10 | 免费观看成人网 | 久久久午夜影院 | 国产一区福利在线 | 黄色的视频网站 | 日韩手机在线观看 | 成人a大片 | 91在线免费视频观看 | 免费观看www视频 | 二区视频在线观看 | 高清av在线| av中文字幕在线播放 | 国产一区二区影院 | 久久久国产电影 | 在线视频 国产 日韩 | 国产精品久久久久久久久大全 | 亚洲一级黄色片 | 日本在线中文在线 | 丁香导航 | www.五月天激情 | 一本一本久久a久久 | 婷婷中文字幕综合 | 在线免费观看国产 | 99精品久久只有精品 | 在线观看成人毛片 | 99久久久久国产精品免费 | 亚洲黄色av | 高清不卡毛片 | 免费福利在线 | 国产麻豆果冻传媒在线观看 | 中文字幕国内精品 | 亚洲精品动漫在线 | 欧美福利精品 | 亚洲精品综合一区二区 | 玖玖爱免费视频 | 99久久精品久久亚洲精品 | 国产v在线播放 | 51久久成人国产精品麻豆 | 高清av在线免费观看 | 婷婷激情五月 | 激情五月婷婷综合网 | 91精品一区二区三区蜜桃 | 丝袜美腿一区 | 久久久久国 | 综合天天网| 爱爱一区 | 天天看天天干天天操 | 久久国产精品免费观看 | 国产精品观看 | 国产亚洲永久域名 | 在线看v片 | 色在线免费观看 | 99re国产 | 国产免费视频在线 | 国产日本三级 | 国产一线二线三线在线观看 | 日韩特级毛片 | 91久久精品一区二区三区 | 国产在线国产 | 亚洲视频每日更新 | 亚洲国产成人精品久久 | 中文字幕在线国产精品 | 国产精品永久在线 | 最新av免费在线 | 黄色大全在线观看 | 国产精品综合在线 | 久久激情久久 | 中文字幕亚洲国产 | av在线播放亚洲 | 日本中文字幕网 | 日批视频 | 在线蜜桃视频 | 草久久久久久 | 91视频在线 | 日日操夜夜操狠狠操 | 4438全国亚洲精品观看视频 | 国产日韩精品一区二区三区在线 | 99在线免费视频 | 色的网站在线观看 | 亚洲国产日本 | 久久综合九色综合久久久精品综合 | 狠狠操欧美 | 精品国精品自拍自在线 | 亚洲理论片在线观看 | 免费看的av片| 一区二区三区在线不卡 | 亚洲免费国产视频 | 国产精品第三页 | 国产黄视频在线观看 | 69xx视频 | 久久亚洲二区 | 国产亚洲精品久久久久久网站 | 国产高清精 | 日韩综合第一页 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 婷婷伊人网 | www.天天射 | 国精产品一二三线999 | 黄视频网站大全 | 国产亚洲精品成人 | 色姑娘综合天天 | 精品9999| 在线国产高清 | 欧美va天堂va视频va在线 | 亚洲午夜久久久久久久久电影网 | 在线观看涩涩 | 欧美黄在线 | 久久情侣偷拍 | 久久99最新地址 | 天天躁天天操 | 久久久久成人免费 | 免费在线观看黄 | 婷婷综合导航 | 天天综合成人 | 亚洲成av人影院 | 超碰夜夜 | 亚洲理论电影网 | 欧美性色黄大片在线观看 | 人人射人人射 | 国产网站在线免费观看 | av黄色免费在线观看 | 97电影网手机版 | 国产精品久久久久久久久毛片 | 香蕉一区 | 最新国产精品拍自在线播放 | 在线国产不卡 | 久久久久久久久久国产精品 | 又大又硬又黄又爽视频在线观看 | 国产亚洲激情视频在线 | 91在线视频网址 | 人人爱人人射 | 国产小视频在线 | 亚洲国产精品500在线观看 | 黄色免费视频在线观看 | 成人免费在线网 | 国产精品免费久久久久 | 大胆欧美gogo免费视频一二区 | 久久99久久精品 | www黄com| 97超级碰碰 | 日韩综合精品 | 91免费版在线 | 国产福利不卡视频 | 一区二区视频在线免费观看 | 不卡中文字幕av | a天堂最新版中文在线地址 久久99久久精品国产 | 成人欧美一区二区三区黑人麻豆 | 成人午夜剧场在线观看 | 免费成人黄色 | 久草视频在线观 | 日韩免费电影一区二区 | 九七人人干| 欧美精品久久久久久久久免 | 亚洲乱码一区 | 国产精品国产三级国产aⅴ9色 | 国产精品99久久久久久宅男 | 黄色小网站免费看 | 干干夜夜 | 亚洲丁香日韩 | 国产精品99久久久久 | 91精品天码美女少妇 | 色多多视频在线观看 | 国产精品九九久久久久久久 | 性日韩欧美在线视频 | 黄色一级免费网站 | 久久a v视频 | 日韩理论片 | 天天爽人人爽 | 欧美午夜久久久 | 17videosex性欧美 | 国产 欧美 日产久久 | 亚洲国产人午在线一二区 | 成人福利在线 | 深爱激情婷婷网 | 欧美性生活免费 | 欧美日bb| 久久黄色免费观看 | 久久高视频 | 精品国产免费人成在线观看 | 久久久免费少妇 | 91麻豆精品国产91久久久久 | 日韩久久精品一区二区 | 中文字幕久久精品一区 | 中文字幕在线国产 | 国产在线精品视频 | 日韩二区三区在线 | 在线观看亚洲国产 | 久产久精国产品 | 国内精品免费 | 波多野结衣久久精品 | av中文字幕不卡 | 国产在线1区 | 国产高清网站 | 国产成人亚洲在线电影 | 亚洲在线国产 | 国产精品免费视频网站 | 国产小视频在线免费观看 | 国产精品成 | 成人动漫精品一区二区 | 色资源二区在线视频 | 在线观看色网站 | 亚洲一区二区三区毛片 | 久久久久久久久久久综合 | 九九视频精品在线 | 精品国产精品国产偷麻豆 | av成人在线播放 | 深夜男人影院 | 黄色的视频| 久人人 | 久操伊人 | 久久人人爽av | 激情av在线播放 | 久久97视频 | 天天爽天天爽天天爽 | 久久99在线观看 | 久久综合天天 | 国产综合91 | 中文字幕一区二区三区乱码在线 | 精品视频网站 | 亚洲精品视频在线观看视频 | 国产免费又爽又刺激在线观看 | 97超碰人人澡 | 久久久国产电影 | 亚洲在线激情 | 亚洲精品人人 | 日日夜夜天天操 | 制服丝袜欧美 | 成年人免费在线 | 狠狠狠狠狠狠狠 | av在线免费观看黄 | 久久99婷婷 | 免费看黄在线网站 | 在线观看免费一级片 | 亚洲成人免费 | 一区二区三区在线视频111 | www.婷婷com | 亚洲成人av一区二区 | 欧美大片在线观看一区 | 在线看片成人 | 啪啪小视频网站 | 91九色成人蝌蚪首页 | 天天干天天插 | 日韩69视频 | 国产精品12345 | 人人要人人澡人人爽人人dvd | 国产手机视频在线播放 | 亚洲国内精品 | 色偷偷男人的天堂av | 在线岛国av | 精品国产一区二区三区日日嗨 | 日韩国产欧美在线视频 | 四虎国产精品永久在线国在线 | 久久国产一二区 | 最近日本中文字幕a | 中文免费 | 91视视频在线直接观看在线看网页在线看 | 国产精品免费观看网站 | 天天做日日爱夜夜爽 | 国偷自产中文字幕亚洲手机在线 | 99在线视频网站 | 免费在线一区二区 | 欧美日韩国产精品爽爽 | 四虎在线永久免费观看 | 97超碰国产在线 | 久久人人爽人人人人片 | 91九色性视频 | 欧美激情片在线观看 | 中文字幕韩在线第一页 | 2019av在线视频 | 在线观看91网站 | 免费观看的黄色片 | 91精品一区在线观看 | 日韩在线二区 | 99色| 色婷婷丁香 | 国产艹b视频 | 深夜国产福利 | 久久综合网色—综合色88 | 免费亚洲一区二区 | 久久久久久国产精品免费 | 综合色狠狠 | 国产黄免费在线观看 | 国产伦精品一区二区三区高清 | 日韩理论电影在线 | 亚洲三级网 | 成人黄色免费观看 | 99热9| 欧美精品一区二区免费 | 精品伊人久久久 | 国产精品入口麻豆 | 久久69精品 | 免费看v片网站 | 日韩av高清 | 最近更新中文字幕 | 成人在线视频一区 | 国产福利91精品 | 日韩高清免费在线观看 | 在线 成人 | 亚洲九九九在线观看 | 国内视频 | 中文国产字幕 | 午夜精品电影一区二区在线 | 国产在线专区 | 91av资源网 | 最新国产精品久久精品 | 瑞典xxxx性hd极品 | 能在线看的av | 狠狠操狠狠 | 久久久久久免费毛片精品 | 国产资源在线观看 | 在线观看亚洲免费视频 | 国产午夜影院 | 五月婷综合网 | 91在线精品观看 | 在线观看视频99 | 国产欧美高清 | 欧美性网站 | 黄色av电影| 黄色三级免费片 | 久久成人视屏 | 国产123区在线观看 国产精品麻豆91 | 在线观看黄色国产 | 婷婷伊人网| 国产午夜精品一区二区三区四区 | 亚洲精品乱码久久久久久蜜桃91 | 日韩欧美网址 | 91在线你懂的 | 最新在线你懂的 | 国产一二三四在线视频 | 韩国三级在线一区 | 看片一区二区三区 | 国产日韩精品在线观看 | 欧美日韩精品在线视频 | 在线视频日韩欧美 | 日本久久久久 | 91在线区 | 日韩在线小视频 | 人人精久 | 狠狠色噜噜狠狠狠狠 | 国产精品久一 | 国产一区电影在线观看 | av超碰免费在线 | 国产人成精品一区二区三 | 欧美久久久久久久久久 | 在线免费观看视频 | 天天综合五月天 | 91c网站色版视频 | 日p视频 | 欧美成人精品在线 | 国产精品情侣视频 | 玖玖爱在线观看 | 色99中文字幕 | 国产日韩欧美在线一区 | 午夜精品福利一区二区 | 久久午夜精品影院一区 | 国产小视频精品 | 99c视频在线 | 日韩av一区二区在线影视 | 久久精品国产一区 | 美女在线观看av | 麻豆影视网站 | 国产精品一二三 | 国产99久久精品 | 正在播放国产一区 | 国产黄色片在线免费观看 | 97视频在线免费 | 久久免费精品 | 99爱在线观看 | 免费视频一区二区 | 三级黄色在线 | 国产午夜精品在线 | 亚洲午夜久久久久久久久电影网 | 久久久免费电影 | 在线免费观看视频一区二区三区 | 国产精品久久久久永久免费看 | 亚洲精品99久久久久久 | 高清av免费看 | 在线观看黄色国产 | 国产探花 | 五月天婷婷综合 | 中文字幕视频一区 | 在线观看视频一区二区 | 国产视频在线观看一区 | 国产精品免费观看国产网曝瓜 | 探花视频免费在线观看 | 久久久资源 | 国产伦理一区 | 91激情视频在线 | 久久综合免费视频影院 | 97人人模人人爽人人喊中文字 | 欧美a级片网站 | 色就是色综合 | 欧美日韩国产精品一区二区 | 免费黄在线看 | 欧美日韩中文在线视频 | 国产亚洲片 | 国产成人在线观看免费 | av电影av在线| 日韩高清成人在线 | 999久久久久久久久久久 | 亚洲最新在线视频 | 久久久久久久久久久久久久电影 | 五月婷婷一区二区三区 | 日韩影片在线观看 | 深爱激情开心 | 96精品视频 | 亚洲精品久久久久久久不卡四虎 | 九九九热| 久久综合色天天久久综合图片 | 国产精华国产精品 | 日本公妇色中文字幕 | 黄色动态图xx | 亚洲午夜在线视频 | 91精品中文字幕 | 丁香婷婷综合五月 | 五月开心六月婷婷 | 亚洲精品合集 | 五月婷婷免费 | 国产在线播放一区二区三区 | 国产精品一区二区美女视频免费看 | 天天干夜夜想 | 91热精品 | 97精品免费视频 | 91亚洲网站| 玖玖玖精品 | 欧美日韩国产精品一区二区 | 亚洲精品国产精品国自产观看 | 精品日本视频 | 丰满少妇久久久 | 成+人+色综合 | 成人性生活大片 | 午夜影视av | 麻豆视频免费版 | 精品黄色在线观看 | 五月婷婷综合在线视频 | 成人性生交大片免费观看网站 | 中文字幕在线观看不卡 | 激情影音先锋 | 久久99国产精品久久 | 国产精品18久久久久久不卡孕妇 | 人人干网站| 久久影院中文字幕 | 91麻豆精品国产91久久久无限制版 |