99在线精品免费视频九九视-99在线精品视频-99在线精品视频免费观里-99在线精品视频在线观看-99在线免费播放



官方論壇
官方淘寶
官方博客
微信公眾號(hào)
點(diǎn)擊聯(lián)系吳工 點(diǎn)擊聯(lián)系周老師
您的當(dāng)前位置:主頁(yè) > 高級(jí)實(shí)訓(xùn)案例 >

【至簡(jiǎn)設(shè)計(jì)案例系列】基于FPGA的SDRAM控制器設(shè)計(jì)(三)讀寫

發(fā)布時(shí)間:2020-03-18   作者:admin 瀏覽量:

本文為明德?lián)P原創(chuàng)及錄用文章,轉(zhuǎn)載請(qǐng)注明出處!


SDRAM控制器設(shè)計(jì)的主要功能是能對(duì)SDRAM進(jìn)行讀寫操作,本工程實(shí)現(xiàn)了SDRAM的初始化、自動(dòng)刷新、讀、寫等功能。


初始化功能和刷新功能在前一章的分享中已經(jīng)進(jìn)行了比較詳細(xì)的描述,感興趣的同學(xué)可以搜索學(xué)習(xí)下,這里不再贅述。今天我們主要討論SDRAM讀寫的功能以及實(shí)現(xiàn)。


一、原理功能


1、讀寫突發(fā)模式



在初始化里的模式寄存器配置中我們將讀寫的突發(fā)長(zhǎng)度(BL)設(shè)置為4,列選通潛伏期(CL)設(shè)為3,突發(fā)類型為順序模式(每一次突發(fā)只給出起始地址即可)。對(duì)于預(yù)充電選擇(Auto Precharge)自動(dòng)預(yù)充電,即外部不需要發(fā)送預(yù)充電命令


2、讀、寫時(shí)序圖


null

                                                圖表1寫時(shí)序圖

null

                                                      圖表2讀時(shí)序圖

3、時(shí)序圖解讀

由時(shí)序圖可知,讀寫模塊采用線性序列機(jī)設(shè)計(jì)比較簡(jiǎn)單。在每次讀寫突發(fā)之前都需要發(fā)送ACTIVE命令,同時(shí)給出bank地址和row地址,2拍后發(fā)出讀或?qū)懨?,同時(shí)將A10拉高并給出col地址。對(duì)于寫操作沒有潛伏期,由于DQ是雙向端口,所以需要一個(gè)三態(tài)門控制DQ總線方向,當(dāng)寫操作時(shí)為輸出方向,讀操作時(shí)為輸入方向。對(duì)于讀操作,發(fā)出讀命令后會(huì)有CL拍的潛伏期,本實(shí)驗(yàn)里CL=3,即發(fā)出讀命令后3拍,數(shù)據(jù)才會(huì)出現(xiàn)在DQ總線上。


二、FPGA實(shí)現(xiàn)


1、模塊架構(gòu)


null

注:信號(hào)方向請(qǐng)看箭頭


2、模塊架構(gòu)解讀


要完整實(shí)現(xiàn)SDRAM控制器必須要完成初始化,刷新,讀寫這四部分功能。所以模塊劃分大體依照次為指導(dǎo)。由于SDRAM控制器工作時(shí)鐘為100MHz,且要輸出一個(gè)頻率相同相位相差180°的時(shí)鐘給SDRAM,所以要有一個(gè)鎖相環(huán)模塊。刷新需要計(jì)時(shí)刷新間隔,所以要加入一個(gè)刷新定時(shí)器模塊,由于初始化,刷新,讀,寫等模塊都要輸出sdr_cke,sdr_cs_n,sdr_cas_n,sdr_ras_n,sdr_we_n,sdr_ba,sdr_a等信號(hào)到SDRAM,所以需要一個(gè)選擇模塊。將sdr_cke,sdr_cs_n,sdr_cas_n,sdr_ras_n,sdr_we_n,sdr_ba,sdr_a等信號(hào)組合成bus信號(hào)輸入到選擇模塊。


新加入的信號(hào)說明,其他信號(hào)在前兩篇中已經(jīng)詳細(xì)說明,讀者可以參考。


信號(hào)

功能

說明

頂層



local_data

寫突發(fā)數(shù)據(jù)輸入

外部輸入

local_addr

地址總線

外部輸入

local_q

讀突發(fā)數(shù)據(jù)輸出

輸出

local_wrreq

寫請(qǐng)求

外部輸入

local_rdreq

讀請(qǐng)求

外部輸入

local_reday

可以進(jìn)行讀寫操作信號(hào)

輸出

local_rdata_vaild

輸出數(shù)據(jù)有效信號(hào)

輸出

寫模塊



wr_en

寫使能

仲裁模塊輸出到寫模塊

wr_done

寫完成

寫模塊輸出到仲裁模塊

wr_bus

寫操作總線

寫模塊輸出到選擇模塊

sdr_dq

SDRAM數(shù)據(jù)總線

雙向端口,對(duì)于寫模塊是輸出,讀模塊是輸入

讀模塊



rd_bus

讀操作總線

讀模塊輸出到選擇模塊

rd_en

讀使能

仲裁模塊輸出到讀模塊

rd_done

讀完成

讀模塊輸出到仲裁模塊


新加入了寫模塊和讀模塊。


寫模塊主要是完成一次寫突發(fā)操作,將local_data信號(hào)寫入到SDRAM中的指定地址local_addr中。local_addr主要由bank地址,行地址和列地址組合而成。在讀和寫模塊代碼中均有體現(xiàn),可以參考。


讀模塊主要完成一次讀突發(fā)操作,將SDRAM中指定的地址中的數(shù)據(jù)讀出來,并賦值給local_q信號(hào)。


由于加入了寫模塊和讀模塊,所以仲裁模塊也要做出相應(yīng)的修改,當(dāng)收到刷新請(qǐng)求時(shí),即rt_flag信號(hào)后,在結(jié)束本次讀突發(fā)或者寫突發(fā)后,拉高刷新使能(ref_en)信號(hào),當(dāng)收到寫請(qǐng)求且沒有刷新請(qǐng)求時(shí),拉高寫使能(wr_en)信號(hào),當(dāng)收到讀請(qǐng)求且沒有刷新請(qǐng)求和寫請(qǐng)求時(shí),拉高讀使能(rd_en)信號(hào)。


3、頂層模塊參考代碼


module sdram_top(

   clk   ,

   sys_rst_n ,

   //其他信號(hào),舉例dout

   local_addr,

   local_data,

   local_q,

   local_rdreq,

   local_wrreq,

   local_ready,

   local_rdata_valid,

   init_done,

   sdr_cke,

   sdr_cs_n,

   sdr_ras_n,

   sdr_cas_n,

   sdr_we_n,

   sdr_ba,

   sdr_a,

   sdr_dq,

   sdr_dqm,

   sdr_clk

   );

   

   input clk;

   input sys_rst_n;

   input [24:0] local_addr;

   input [63:0] local_data;

   output [63:0] local_q;

   input local_rdreq;

   input local_wrreq;

   output local_ready;

   output local_rdata_valid;

   output init_done;

   output sdr_cke;

   output sdr_cs_n;

   output sdr_ras_n;

   output sdr_cas_n;

   output sdr_we_n;

   output [1:0] sdr_ba;

   output [12:0] sdr_a;

   inout [15:0] sdr_dq;

   output [1:0] sdr_dqm;

   output sdr_clk;

   

   wire phy_clk;

   wire rst_n;

   wire rt_flag;

   wire rt_clear;

   wire rt_en;

   wire ref_en;

   wire ref_done;

   wire wr_done;

   wire wr_en;

   wire rd_en;

   wire rd_done;

   wire [1:0] sel_sm;

   wire [19:0] sdr_bus;

   wire [19:0] init_bus;

   wire [19:0] ref_bus;

   wire [19:0] wr_bus;

   wire [19:0] rd_bus;

   

   assign {sdr_cke, sdr_cs_n, sdr_ras_n, sdr_cas_n, sdr_we_n, sdr_ba, sdr_a} = sdr_bus;

   assign sdr_dqm = 2'b00;

       

   sdram_init sdram_init_inst(

       .clk           (phy_clk)       ,

       .rst_n         (rst_n)       ,

       //其他信號(hào),舉例dout

       .init_done     (init_done)       ,

       .init_bus      (init_bus)

   );

   

   arbitrate arbitrate_inst(

       .clk(phy_clk),

       .rst_n(rst_n),

       .rt_flag(rt_flag),

       .rt_en(rt_en),

       .rt_clear(rt_clear),

       .ref_done(ref_done),

       .ref_en(ref_en),

       .init_done(init_done),

       .sel_sm(sel_sm),

      .local_rdata_valid(local_rdata_valid),

       .local_ready(local_ready),

       .local_wrreq(local_wrreq),

       .local_rdreq(local_rdreq),

       .wr_done(wr_done),

       .wr_en(wr_en),

       .rd_en(rd_en),

       .rd_done(rd_done)

   );

   

   ref_timer ref_timer_inst(

       .clk(phy_clk),

       .rst_n(rst_n),

       .rt_en(rt_en),

       .rt_clear(rt_clear),

       .rt_flag(rt_flag)

   );

   

   sdram_ref sdram_ref_inst(

       .clk(phy_clk),

       .rst_n(rst_n),

       .ref_en(ref_en),

       .ref_done(ref_done),

       .ref_bus(ref_bus)

   );

   

   sdram_write sdram_write_inst(

       .clk(phy_clk),

       .rst_n(rst_n),

       .wr_en(wr_en),

       .wr_done(wr_done),

       .wr_bus(wr_bus),

       .sdr_dq(sdr_dq),

       .local_data(local_data),

       .local_addr(local_addr)

   );

   

   sdram_read sdram_read_inst(

       .clk(phy_clk),

       .rst_n(rst_n),

       .rd_en(rd_en),

       .rd_done(rd_done),

       .rd_bus(rd_bus),

       .sdr_dq(sdr_dq),

       .local_q(local_q),

       .local_addr(local_addr)

   );

   

   sdram_mux sdram_mux_inst(

       .clk(phy_clk),

       .rst_n(rst_n),

       .init_bus(init_bus),

       .ref_bus(ref_bus),

       .wr_bus(wr_bus),

       .rd_bus(rd_bus),

       .sdr_bus(sdr_bus),

       .sel_sm(sel_sm)

   );

   

   my_pll PLL(

       .areset    (~sys_rst_n)        ,

       .inclk0    (clk)               ,

       .c0        (phy_clk)           ,

       .c1        (sdr_clk)           ,

       .locked    (rst_n)

   );


endmodule


4、模塊功能


PLL模塊,初始化模塊,刷新模塊在前面兩篇文章中已經(jīng)討論過,這里不再描述。


(1)寫模塊


主要完成寫突發(fā),采用線性序列機(jī)設(shè)計(jì),當(dāng)檢測(cè)到wr_en為高電平時(shí),計(jì)數(shù)器開始計(jì)時(shí),并發(fā)出開ACT命令,并將row地址賦值給sdr_a。兩拍之后,發(fā)出寫命令,并將A10拉高,然后開始將數(shù)據(jù)賦值給sdr_dq信號(hào)。然后計(jì)數(shù)到8-1時(shí)將寫完成信號(hào)wr_done拉高。


可以對(duì)照時(shí)序圖閱讀代碼,其代碼如下:


module sdram_write(clk, rst_n, wr_en, wr_done, wr_bus, sdr_dq, local_data, local_addr);


   input clk;

   input rst_n;

   input wr_en;

   output reg wr_done;

   output [19:0] wr_bus;

   inout [15:0] sdr_dq;

   input [63:0] local_data;

   input [24:0] local_addr;

   

   parameter CNT_MAX = 8;

   parameter NOP = 4'b0111;

   parameter ACT = 4'b0011;

   parameter WR  = 4'b0100;

   

   reg [3:0] cnt;

   reg [3:0] sdr_cmd;

   reg [1:0] sdr_ba;

   reg [12:0] sdr_a;

   reg [15:0] temp;

   reg out_en;

   

   wire [9:0] col;

   wire [12:0] row;

   wire [1:0] ba;

   wire sdr_cke;

   wire add_cnt;

   wire end_cnt;

   

   assign {ba, row, col} = local_addr;

   assign sdr_dq = out_en ? temp : 16'dz;

   assign sdr_cke = 1'b1;

   assign wr_bus = {sdr_cke, sdr_cmd, sdr_ba, sdr_a};

   

   always @(posedge clk or negedge rst_n)begin

       if(!rst_n)begin

           cnt <= 0;

       end

       else if(add_cnt)begin

           if(end_cnt)

               cnt <= 0;

           else

               cnt <= cnt + 1;

       end

   end


   assign add_cnt = wr_en;      

   assign end_cnt = add_cnt && cnt==CNT_MAX - 1 ;


   always @ (posedge clk or negedge rst_n)begin

       if(!rst_n)begin

           sdr_cmd <= NOP;

       end

       else if(add_cnt && cnt == 1 - 1)begin

           sdr_cmd <= ACT;

       end

       else if(add_cnt && cnt == 3 - 1)begin

           sdr_cmd <= WR;

       end

       else begin

           sdr_cmd <= NOP;

       end

   end

   

   always @(posedge clk or negedge rst_n)begin

       if(!rst_n)begin

           sdr_ba <= 2'd0;

       end

       else begin

           sdr_ba <= ba;

       end

   end

   

   always @(posedge clk or negedge rst_n)begin

       if(!rst_n)begin

           sdr_a <= 13'd0;

       end

       else if(add_cnt && cnt == 1 - 1)begin

           sdr_a <= row;

       end

       else if(add_cnt && cnt == 3 - 1)begin

           sdr_a <= {2'd0, 1'b1, col};

       end

       else begin

           sdr_a <= 13'd0;

       end

   end

   

   always @(posedge clk or negedge rst_n)begin

       if(!rst_n)begin

           temp <= 16'd0;

       end

       else if(add_cnt && cnt == 4 - 1)begin

           temp <= local_data[15:0];

       end

       else if(add_cnt && cnt == 5 - 1)begin

           temp <= local_data[31:16];

       end

       else if(add_cnt && cnt == 6 - 1)begin

           temp <= local_data[47:32];

       end

       else if(add_cnt && cnt == 7 - 1)begin

           temp <= local_data[63:48];

       end

       else begin

           temp <= 16'd0;

       end

   end

   

   always @(posedge clk or negedge rst_n)begin

       if(!rst_n)begin

           out_en <= 1'b0;

       end

       else if(add_cnt && cnt == 4 - 1)begin

           out_en <= 1'b1;

       end

       else if(add_cnt && cnt == 8 - 1)begin

           out_en <= 1'b0;

       end

       else begin

           out_en <= out_en;

       end

   end

   

   always @(posedge clk or negedge rst_n)begin

       if(!rst_n)begin

           wr_done <= 1'b0;

       end

       else if(add_cnt && cnt == 1 - 1)begin

           wr_done <= 1'b0;

       end

       else if(add_cnt && cnt == 8 - 1)begin

           wr_done <= 1'b1;

       end

       else begin

           wr_done <= wr_done;

       end

   end


endmodule


(2)讀模塊


讀模塊主要完成讀突發(fā),對(duì)于讀模塊來說,sdr_dq信號(hào)是輸入信號(hào),且不是同一時(shí)鐘域信號(hào),所以要加兩級(jí)同步寄存器。當(dāng)檢測(cè)到讀使能rd_en為高時(shí),計(jì)數(shù)器開始計(jì)數(shù),并發(fā)出ACT命令,同時(shí)給出row地址,兩拍之后發(fā)出讀命令,并將A10拉高,由于加入了兩級(jí)同步寄存器且讀潛伏期為3,所以5拍之后才可以采集數(shù)據(jù),即計(jì)數(shù)到9-1時(shí)采集數(shù)據(jù),4拍之后數(shù)據(jù)采集完成,下一拍將讀完成信號(hào)rd_done拉高。


可以對(duì)照時(shí)序圖閱讀代碼,代碼如下


module sdram_read(clk, rst_n, rd_en, rd_done, rd_bus, sdr_dq, local_q, local_addr);


   input clk;

   input rst_n;

   input rd_en;

   output reg rd_done;

   output [19:0] rd_bus;

   input [15:0] sdr_dq;

   output reg [63:0] local_q;

   input [24:0] local_addr;

   

   parameter CNT_MAX = 14;

   parameter NOP = 4'b0111;

   parameter ACT = 4'b0011;

   parameter RD  = 4'b0101;



   reg [3:0] cnt;

   reg [3:0] sdr_cmd;

   reg [1:0] sdr_ba;

   reg [12:0] sdr_a;

   reg [15:0] temp0, temp1;

   

   wire [9:0] col;

   wire [12:0] row;

   wire [1:0] ba;

   wire sdr_cke;

   wire add_cnt;

   wire end_cnt;

   

   assign {ba, row, col} = local_addr;

   assign sdr_cke = 1'b1;

   assign rd_bus = {sdr_cke, sdr_cmd, sdr_ba, sdr_a};

   

   always @(posedge clk)begin

       temp0 <= sdr_dq;

       temp1 <= temp0;

   end

   

   always @(posedge clk or negedge rst_n)begin

       if(!rst_n)begin

           cnt <= 0;

       end

       else if(add_cnt)begin

           if(end_cnt)

               cnt <= 0;

           else

               cnt <= cnt + 1;

       end

   end


   assign add_cnt = rd_en;      

   assign end_cnt = add_cnt && cnt==CNT_MAX - 1 ;

   

   always @ (posedge clk or negedge rst_n)begin

       if(!rst_n)begin

           sdr_cmd <= NOP;

       end

       else if(add_cnt && cnt == 1 - 1)begin

           sdr_cmd <= ACT;

       end

       else if(add_cnt && cnt == 3 - 1)begin

           sdr_cmd <= RD;

       end

       else begin

           sdr_cmd <= NOP;

       end

   end

   

   always @(posedge clk or negedge rst_n)begin

       if(!rst_n)begin

           sdr_ba <= 2'd0;

       end

       else begin

           sdr_ba <= ba;

       end

   end

   

   always @(posedge clk or negedge rst_n)begin

       if(!rst_n)begin

           sdr_a <= 13'd0;

       end

       else if(add_cnt && cnt == 1 - 1)begin

           sdr_a <= row;

       end

       else if(add_cnt && cnt == 3 - 1)begin

           sdr_a <= {2'd0, 1'b1, col};

       end

       else begin

           sdr_a <= 13'd0;

       end

   end

   

   always @(posedge clk or negedge rst_n)begin

       if(!rst_n)begin

           local_q <= 64'd0;

       end

       else if(add_cnt && cnt == 9 - 1)begin

           local_q[15:0] <= temp1;

       end

       else if(add_cnt && cnt == 10 - 1)begin

           local_q[31:16] <= temp1;

       end

       else if(add_cnt && cnt == 11 - 1)begin

           local_q[47:32] <= temp1;

       end

       else if(add_cnt && cnt == 12 - 1)begin

           local_q[63:48] <= temp1;

       end

       else begin

           local_q <= local_q;

       end

   end

   

   always @(posedge clk or negedge rst_n)begin

       if(!rst_n)begin

           rd_done <= 1'b0;

       end

       else if(add_cnt && cnt == 1 - 1)begin

           rd_done <= 1'b0;

       end

       else if(add_cnt && cnt == 13 - 1)begin

           rd_done <= 1'b1;

       end

       else begin

           rd_done <= rd_done;

       end

   end


endmodule


(3)仲裁模塊


由于加入了寫模塊和讀模塊,所以仲裁模塊也要做出相應(yīng)的修改,當(dāng)收到刷新請(qǐng)求時(shí),即rt_flag信號(hào)后,在結(jié)束本次讀突發(fā)或者寫突發(fā)后,拉高刷新使能(ref_en)信號(hào),當(dāng)收到寫請(qǐng)求且沒有刷新請(qǐng)求時(shí),拉高寫使能(wr_en)信號(hào),當(dāng)收到讀請(qǐng)求且沒有刷新請(qǐng)求和寫請(qǐng)求時(shí),拉高讀使能(rd_en)信號(hào)。


主要代碼如下:


module arbitrate(clk, rst_n, rt_flag, rt_en, rt_clear, ref_done,ref_en, init_done, sel_sm, local_rdata_valid,

         local_ready,local_wrreq, local_rdreq, wr_done, wr_en, rd_en, rd_done);

 

         input clk, rst_n;

         input rt_flag;

         output reg rt_en,rt_clear;

         input ref_done;

         output reg ref_en;

         input init_done;

         output reg [1:0]sel_sm;

         output reglocal_rdata_valid;

         output reglocal_ready;

         input local_wrreq,local_rdreq;

         input wr_done;

         output reg wr_en;

         output reg rd_en;

         input rd_done;

        

         localparam SM_INIT =2'd0;

         localparam SM_REF  = 2'd1;

         localparam SM_WR   = 2'd2;

         localparam SM_RD   = 2'd3;

        

         always @(posedge clkor negedge rst_n)begin

                   if(!rst_n)begin

                            rt_en<= 0;

                   end

                   elseif(init_done)begin

                            rt_en<= 1;

                   end

                   else begin

                            rt_en<= rt_en;

                   end

         end

        

         always @(posedge clkor negedge rst_n)begin

                   if(!rst_n)begin

                            rt_clear<= 0;

                   end

                   elseif(ref_en)begin

                            rt_clear<= 1;

                   end

                   elseif(ref_done)begin

                            rt_clear<= 0;

                   end

                   else begin

                            rt_clear<= rt_clear;

                   end

         end

        

         always @(posedge clkor negedge rst_n)begin

                   if(!rst_n)begin

                            ref_en<= 0;

                   end

                   elseif(rt_flag)begin

                            ref_en<= 1;

                   end

                   elseif(ref_done)begin

                            ref_en<= 0;

                   end

                   else begin

                            ref_en<= ref_en;

                   end

         end

        

         always @(posedge clkor negedge rst_n)begin

                   if(!rst_n)begin

                            sel_sm<= SM_INIT;

                   end

                   elseif(!init_done)begin

                            sel_sm<= SM_INIT;

                   end

                   elseif(rt_flag)begin

                            sel_sm<= SM_REF;

                   end

                   elseif(local_wrreq && !rt_flag)begin

                            sel_sm<= SM_WR;

                   end

                   elseif(local_rdreq && !rt_flag)begin

                            sel_sm<= SM_RD;

                   end

                   else begin

                            sel_sm<= sel_sm;

                   end

         end

        

         always @(posedge clkor negedge rst_n)begin

                   if(!rst_n)begin

                            wr_en<= 0;

                   end

                   elseif(local_wrreq && !rt_flag)begin

                            wr_en<= 1;

                   end

                   elseif(wr_done)begin

                            wr_en<= 0;

                   end

                   else begin

                            wr_en<= wr_en;

                   end

         end

        

         always @(posedge clkor negedge rst_n)begin

                   if(!rst_n)begin

                            rd_en<= 0;

                   end

                   elseif(local_rdreq && !local_wrreq && !rt_flag)begin

                            rd_en<= 1;

                   end

                   elseif(rd_done)begin

                            rd_en<= 0;

                   end

                   else begin

                            rd_en<= rd_en;

                   end

         end

        

         always @(posedge clkor negedge rst_n)begin

                   if(!rst_n)begin

                            local_ready<= 1;

                   end

                   elseif(wr_en || rd_en)begin

                            local_ready<= 0;

                   end

                   else begin

                            local_ready<= 1;

                   end

         end

        

         always @(posedge clkor negedge rst_n)begin

                   if(!rst_n)begin

                            local_rdata_valid<= 0;

                   end

                   elseif(rd_done)begin

                            local_rdata_valid<= 1;

                   end

                   else begin

                            local_rdata_valid<= 0;

                   end

         end

 

endmodule



(5)仿真驗(yàn)證


向SDRAM中寫入64’h1122334455667788,然后讀出來。由圖可知SDRAM正確讀出了數(shù)據(jù)。(波形顯示的是十六進(jìn)制,報(bào)告是十進(jìn)制)

null


null

  •   
  •   
  •   
  •  
  • FPGA教育領(lǐng)域第一品牌
  • 咨詢熱線:020-39002701
  • 技術(shù)交流Q群:544453837
主站蜘蛛池模板: 国产美女亚洲精品久久久毛片 | 免费毛片在线视频 | 欧美日本俄罗斯一级毛片 | 久久国产精品免费 | 亚洲国产日韩在线观看 | 国产72av国片精品jk制服 | 亚洲精品国产精品一区二区 | 欧美国产综合 | 91精品国产高清91久久久久久 | 成人免费淫片在线费观看 | 污污的网址 | 国自产拍在线天天更新2019 | 大陆老太交xxxxxhd在线 | eeuss影院www在线观看免费 | 精品国产成人高清在线 | 毛片毛片毛片毛片毛片毛片毛片 | 国产91视频观看 | 一级待一黄aaa大片在线还看 | 日本在线观看一级高清片 | 国产成视频 | 激情综合网婷婷 | 日韩亚洲影院 | 全色黄大色大片免费久久老太 | 日韩成人黄色片 | 高清一区二区 | 免费一级a毛片夜夜看 | 久久精品国产99国产精品澳门 | 欧美在线视频二区 | 91在线播放视频 | 美女黄色一级毛片 | 亚洲视频 在线观看 | 美女大片高清特黄a大片 | 精品国产看高清国产毛片 | 成人国产一区二区三区 | 亚洲精品国产第一区二区三区 | 国产羞羞的视频在线观看免费 | 成人免费的性色视频 | 麻豆成人在线 | 色婷婷综合激情视频免费看 | 免费一级乱子伦片 | 黄色欧美视频在线观看 |