wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4830|回復: 2
打印 上一主題 下一主題
收起左側(cè)

俄羅斯方塊Verilog HDL程序設(shè)計

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:704585 發(fā)表于 2021-3-19 17:37 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
通過此次項目,完成以下目的:
  • 熟悉Xilinx FPGA的架構(gòu)及開發(fā)流程
  • 設(shè)計一個功能完整的系統(tǒng)掌握FSM + Datapath的設(shè)計方法。
實驗內(nèi)容
  • 項目介紹
本項目主要在FPGA上實現(xiàn)了一個經(jīng)典小游戲“俄羅斯方塊”。本項目基本解決方案是,使用Xilinx Zynq系列開發(fā)板ZedBoard作為平臺,實現(xiàn)主控模塊,通過VGA接口來控制屏幕進行顯示。
  • 系統(tǒng)框架
整個系統(tǒng)由四部分組成,按鍵輸入處理模塊、控制模塊、數(shù)據(jù)路徑模塊以及VGA顯示接口模塊。整個系統(tǒng)的結(jié)構(gòu)如下圖所示:
圖1:系統(tǒng)框圖
下面分別對四個模塊進行介紹:
  • 按鍵輸入處理模塊
按鍵處理模塊的主要功能是對輸入系統(tǒng)的up,down,left,right四個控制信號進行消抖處理,并對其進行上升沿檢測。
消抖模塊采用上課所提出的結(jié)構(gòu),采用了一個4位的移位寄存器,先將輸入信號延遲4個時鐘周期,再對其以一個較低的時鐘頻率進行采用。消抖模塊的結(jié)構(gòu)如下圖所示:
圖2:消抖模塊結(jié)構(gòu)示意圖
為了簡化控制系統(tǒng),在本系統(tǒng)的設(shè)計過程中,不考慮長時間按鍵產(chǎn)生連按效果。因而,需要對按鍵進行上升沿檢測。上升沿檢測的基本實現(xiàn)方案是加入一組寄存器,對前一個的按鍵信號進行暫存,將暫存的值與當前值進行比較,當上一個值為0而當前值為1時,即認為其檢測到了一個上升沿。
  • 控制模塊
控制模塊采用FSM的方式進行控制。在控制模塊中,定義了10個狀態(tài):
S_idle:上電復位后進入的空狀態(tài),當start信號為1時進入S_new狀態(tài)
S_new:用于產(chǎn)生新的俄羅斯方塊。
S_hold:保持狀態(tài)。在這個狀態(tài)中進行計時,當時間到達一定間隔時,轉(zhuǎn)到S_down狀態(tài);或者等待輸入信號(up,down,left,right)時,轉(zhuǎn)到S_down(按鍵為down)或者S_move(up,left,right)狀態(tài)。
S_down:判斷當前俄羅斯塊能否下移一格。如果可以,則轉(zhuǎn)到S_remove_1狀態(tài),如果不行,則轉(zhuǎn)到S_shift狀態(tài)。
S_move:判斷當前俄羅斯塊能夠按照按鍵信號指定的指令進行移動,如果可以,則轉(zhuǎn)到S_shift狀態(tài),如果不可以,則轉(zhuǎn)到S_remove_1狀態(tài)。
S_shift:更新俄羅斯方塊的坐標信息。返回S_hold。
S_remove_1:更新整個屏幕的矩陣信息。轉(zhuǎn)移到S_remove_2狀態(tài)。
S_remove_2:判斷是否可以消除,將可以消除的行消除,并將上面的行下移一行。重復此過程,直到?jīng)]有可消除的行為止。跳轉(zhuǎn)到S_isdie狀態(tài)
S_isdie:判斷是否游戲結(jié)束。如果結(jié)束,則跳轉(zhuǎn)到S_stop狀態(tài)。如果沒有,則跳轉(zhuǎn)到S_new狀態(tài),生成新的俄羅斯方塊。
S_stop:清楚整個屏幕,并跳轉(zhuǎn)到S_idle狀態(tài)。
整個控制過程的ASMD圖如下圖所示:
圖3: 控制模塊ASMD圖
  • 數(shù)據(jù)路徑
數(shù)據(jù)路徑模塊主要功能是,根據(jù)控制模塊給出的信號,對俄羅斯方塊當前的邏輯狀態(tài)進行判斷,更新背景矩陣。具體如下:
方塊:
方塊分為非活動方塊與活動方塊。非活動方塊為:(1)之前下落的方塊;(2)下落后方塊消除之后的結(jié)果。由背景矩陣表示。活動方塊為當前下落中的方塊,由活動方塊坐標與方塊類型表示(后簡稱方塊)。
背景矩陣:
reg [9:0] R [23:0];
背景矩陣R是24行10列的寄存器組,負責保存非活動方塊坐標,即R中任一位置,如方塊存在,則該位置1,否則為0。
活動方塊坐標:
output reg [4:0] n,
output reg [3:0] m,
n, m分別為當前活動方塊的行、列指針,指向方塊固定點位置。方塊固定點為方塊旋轉(zhuǎn)時不變的格點,依據(jù)方塊種類決定,下文方塊模型中詳述。
方塊類型:
output reg [6:0] BLOCK,
BLOCK代表方塊類型,由7位編碼構(gòu)成。
數(shù)據(jù)交換:
Datapath與其余模塊的數(shù)據(jù)交換分為兩部分:(1)與control_unit間的狀態(tài)指令交互;(2)控制merge,間接實現(xiàn)對VGA的控制。
方塊模型:
俄羅斯方塊共有7中形狀的方塊(O,L,J,I,T,Z,S),每種方塊有1-4種不同的旋轉(zhuǎn)變形方式。為方便起見,將方塊定位A-G,旋轉(zhuǎn)編號為1-4,將方塊編碼成A_1-G_2的19種,如  下圖:
圖中,深色方塊是該種方塊的固定點。
圖4: 方塊模型示意圖
              方塊運動:
產(chǎn)生:
方塊產(chǎn)生由一個簡單的偽隨機過程決定。系統(tǒng)采用一個3位的計數(shù)器產(chǎn)生隨機數(shù),進入S_new,BLOCK的值被NEW_BLOCK覆蓋,方塊坐標n<=1;m<=5;同時,根據(jù)計數(shù)器,NEW_BLOCK的值刷新為A_1,B_1,…,G_1中的一種,作為下一次方塊。
移動:
方塊移動分為四種:旋轉(zhuǎn),下落,向左,向右,由鍵盤KEYBOARD=[UP, DOWN, LEFT, RIGHT]控制。移動分兩步進行:(1)判斷;(2)轉(zhuǎn)換。
判斷過程包含S_down,S_move。判斷分兩步:首先,判斷變換后方塊坐標是否合法,即變換后是否會造成方塊越界。然后,判斷變換后方塊可能占據(jù)的新位置是否有背景矩陣方塊存在。兩步判斷通過后返回成功信號,否則失敗。因判斷代碼量較多,僅舉一例說明:
判斷D_1向右運動(MOVE_ABLE初值為0):
if (m<=8)
if (!((R[n-1][m+1])|(R[n][m+1])|(R[n+1][m+1])|(R[n+2][m+1])))
MOVE_ABLE=1;
else MOVE_ABLE=0;
              轉(zhuǎn)換過程(S_shift)進行方塊的移動或變形。根據(jù)KEYBOARD,移動時,改變方塊坐標;變形時,方塊按類別變換,如:A_1→A_1;B_1→B_2; B_2→B_3; B_4→B_1;
停止與消除:
方塊停止與消除由兩個狀態(tài)完成:S_remove1,S_remove2。
前一狀態(tài)中,根據(jù)BLOCK, n, m,將活動方塊位置覆蓋至R,變?yōu)榉腔顒臃綁K。
后一狀態(tài)中,根據(jù)行滿狀態(tài),進行行的消除與平移,具體如下:
顯然,俄羅斯方塊能影響的最大行數(shù)為4,因此,在REMOVE_2中,僅對R[n-1],R[n],R[n+1],R[n+2]四行依次進行處理。處理過程為:如果該行(k)滿,則由k行開始,至1行結(jié)束,逐行向下平移,當前平移位置由計數(shù)器REMOVE_2_C控制,當前行消除截止由標志位SIG確認。
每行處理完后,將REMOVE_FINISH[3:0]中相應(yīng)位置1,REMOVE_FINISH全1時,REMOVE_2完成。
死亡判定:
R中的0-3行位于屏幕上方,不進行顯示,僅有新生成的方塊坐標會進入這一區(qū)域。因而,當消除完成后,如R[3]不為空,游戲結(jié)束。
  • 顯示部分
輸出結(jié)果通過VGA接口接入顯示屏顯示。VGA(Video Graphics Array)視頻圖形陣列是IBM于1987年提出的一個使用模擬信號的電腦顯示標準。VGA接口即電腦采用VGA標準輸出數(shù)據(jù)的專用接口。VGA接口共有15針,分成3排,每排5個孔,顯卡上應(yīng)用最為廣泛的接口類型,絕大多數(shù)顯卡都帶有此種接口。它傳輸紅、綠、藍模擬信號以及同步信號(水平和垂直信號)。
使用Verilog HDL語言對VGA進行控制一般只需控制行掃描信號、列掃描信號和紅綠藍三色信號輸出即可。
VGA輸出可分為四個模塊:時鐘分頻模塊、數(shù)據(jù)組織模塊、接口控制模塊和頂層模塊。以下進行分塊描述。
時鐘模塊分頻模塊對FPGA系統(tǒng)時鐘進行分頻。由于使用的顯示屏參數(shù)為640*480*60Hz,其真實屏幕大小為800*525,因此所需時鐘頻率為800*525*60Hz=25.175MHz,可近似處理為25MHz。FPGA系統(tǒng)時鐘為100M,因此將其四分頻即可基本滿足顯示要求。
數(shù)據(jù)組織模塊是將預備輸出的數(shù)據(jù)組織為可以通過VGA接口控制的數(shù)據(jù)形式,本次設(shè)計中因接口已經(jīng)協(xié)調(diào),數(shù)據(jù)可不經(jīng)過此模塊進行組織,故可忽略該模塊。
接口控制模塊通過VGA接口對顯示屏進行控制。VGA的掃描順序是從左到右,從上到下。例如在640X480的顯示模式下,從顯示器的左上角開始往右掃描,直到640個像素掃完,再回到最左邊,開始第二行的掃描,如此往復,到第480行掃完時即完成一幀圖像的顯示。這時又回到左上角,開始下一幀圖像的掃描。如果每秒能完成60幀,則稱屏幕刷新頻率為60Hz。宏觀上,一幀屏幕由480個行和640個列填充而成,而實際上,一幀屏幕除了顯示區(qū),還包含其他未顯示部分,作為邊框或者用來同步。具體而言,一個完整的行同步信號包含了左邊框、顯示區(qū)、右邊框還有返回區(qū)四個部分,總共800個像素,其分配如下:
圖5: VGA行掃描時序
同樣的,一個完整的垂直同步信號也分為四個區(qū)域,總共525個像素,分配如下:
圖6:VGA場掃描時序
模塊通過組織輸出行掃描信號、列掃描信號和三原色信號對顯示屏實現(xiàn)控制。
實驗結(jié)果
實驗結(jié)果圖如下:
圖7:實驗結(jié)果圖
實驗總結(jié)



    • 完成情況
本次項目我們完成了既定目標,即完成一個經(jīng)典小游戲“俄羅斯方塊”的核心功能。在本次實驗過程中,我們通過采用分工合作的方式,通過對系統(tǒng)功能的分析,確定解決方案,完成了對一個系統(tǒng)自上而下的設(shè)計,并嘗試采用控制單元+數(shù)據(jù)路徑這樣的方式來處理核心模塊。



    • 不足與改進之處
由于時間倉促,加之對俄羅斯方塊邏輯復雜度估計不足,到最后展示之前我們才完成了對核心模塊的調(diào)試。因此,在用戶界面上沒有做過多的調(diào)整。另外,由于在進行模塊劃分時,一些接口沒有事先定義好,導致在最后系統(tǒng)整合時,不得不進行修改與調(diào)整,由此而造成了一部分時間的浪費。
總的來說,通過這個項目,小組成員對于硬件設(shè)計“并行”的特點有了比較直接的認識,同時也在調(diào)試的過程中掌握了一些硬件調(diào)試常用的方法,也認識到了仿真的重要意義所在。另外就是關(guān)于團隊協(xié)作方面的一個教訓,在系統(tǒng)劃分時要注意把接口定義好,以免造成不必要的代價。
實驗代碼
KeyBoard模塊
  1. `timescale 1ns / 1ps
  2. module key(
  3.     input clk,
  4.     input rst_n,
  5.     input UP_KEY,
  6.     input LEFT_KEY,
  7.     input RIGHT_KEY,
  8.     input DOWN_KEY,
  9.     output reg rotate,
  10.     output reg left,
  11.     output reg right,
  12.     output reg down
  13.     );

  14.     reg [3:0] shift_up;
  15.     reg [3:0] shift_left;
  16.     reg [3:0] shift_right;
  17.     reg [3:0] shift_down;

  18.     always @(posedge clk or negedge rst_n)
  19.     begin
  20.         if (!rst_n)
  21.             shift_up <= 0;
  22.         else
  23.             shift_up <= {shift_up[2:0], UP_KEY};
  24.     end

  25.     always @(posedge clk or negedge rst_n)
  26.     begin
  27.         if (!rst_n)
  28.             shift_right <= 0;
  29.         else
  30.             shift_right <= {shift_right[2:0], RIGHT_KEY};
  31.     end

  32.     always @(posedge clk or negedge rst_n)
  33.     begin
  34.         if (!rst_n)
  35.             shift_left <= 0;
  36.         else
  37.             shift_left <= {shift_left[2:0], LEFT_KEY};
  38.     end

  39.     always @(posedge clk or negedge rst_n)
  40.     begin
  41.         if (!rst_n)
  42.             shift_down <= 0;
  43.         else
  44.             shift_down <= {shift_down[2:0], DOWN_KEY};
  45.     end


  46. reg clk_div;
  47. reg [7:0] clk_cnt;
  48. always @ (posedge clk or negedge rst_n)
  49. begin
  50.     if (!rst_n)
  51.     begin
  52.         clk_cnt <= 0;
  53.         clk_div <= 0;
  54.     end
  55.     else if (clk_cnt <= 8'd49)
  56.     begin
  57.         clk_cnt <= clk_cnt + 1;
  58.         clk_div <= clk_div;
  59.     end
  60.     else
  61.     begin
  62.         clk_cnt <= 0;
  63.         clk_div <= ~clk_div;
  64.     end
  65. end

  66. always @(posedge clk_div or negedge rst_n)
  67. begin
  68.     if (!rst_n)
  69.     begin
  70.         rotate <= 0;
  71.         left <= 0;
  72.         right <= 0;
  73.         down <= 0;
  74.     end
  75.     else
  76.     begin
  77.         rotate <= shift_up[3];
  78.         left <= shift_left[3];
  79.         right <= shift_right[3];
  80.         down <= shift_down[3];
  81.     end
  82. end

  83. endmodule


  84. 控制模塊程序
  85. module game_control_unit (
  86.     input clk,
  87.     input rst_n,
  88.     input rotate,
  89.     input left,
  90.     input right,
  91.     input down,
  92.     input start,
  93.     output reg [3:0] opcode,
  94.     output reg gen_random,
  95.     output reg hold,
  96.     output reg shift,
  97.     output reg move_down,
  98.     output reg remove_1,
  99.     output reg remove_2,
  100.     output reg stop,
  101.     output reg move,
  102.     output reg isdie,
  103.     output reg auto_down,
  104.     input shift_finish,
  105.     input remove_2_finish,
  106.     input down_comp,
  107.     input move_comp,
  108.     input die
  109.     );

  110.     reg left_reg;
  111.     reg right_reg;
  112.     reg up_reg;
  113.     reg down_reg;

  114.     always @(posedge clk or negedge rst_n)
  115.     begin
  116.         if (!rst_n)
  117.         begin
  118.             left_reg <= 0;
  119.             right_reg <= 0;
  120.             up_reg <= 0;
  121.             down_reg <= 0;
  122.         end
  123.         else
  124.         begin
  125.             left_reg <= left;
  126.             right_reg <= right;
  127.             up_reg <= rotate;
  128.             down_reg <=  down;
  129.         end
  130.     end

  131.     reg auto_down_reg;
  132.     always @ (posedge clk or negedge rst_n)
  133.     begin
  134.         if (!rst_n)
  135.             auto_down_reg <= 0;
  136.         else if (time_cnt == time_val)
  137.             auto_down_reg <= 1;
  138.         else
  139.             auto_down_reg <= 0;
  140.     end

  141.     always @ (posedge clk or negedge rst_n)
  142.     begin
  143.         if (!rst_n)
  144.             auto_down <= 0;
  145.         else
  146.             auto_down <= auto_down_reg;
  147.     end

  148.     parameter time_val = 26'd25000001;
  149.     reg [25:0] time_cnt;

  150.     localparam  S_idle      = 4'd0,
  151.                 S_new       = 4'd1,
  152.                 S_hold      = 4'd2,
  153.                 S_move      = 4'd3,
  154.                 S_shift     = 4'd4,
  155.                 S_down      = 4'd5,
  156.                 S_remove_1  = 4'd6,
  157.                 S_remove_2  = 4'd7,
  158.                 S_isdie     = 4'd8,
  159.                 S_stop      = 4'd9;

  160.     reg [3:0] state, next_state;

  161.     always @(posedge clk or negedge rst_n)
  162.     begin
  163.         if (!rst_n)
  164.             state <= S_idle;
  165.         else
  166.             state <= next_state;
  167.     end



  168.     always @ (posedge clk or negedge rst_n)
  169.     begin
  170.         if (!rst_n)
  171.             time_cnt <= 0;
  172.         else if (hold == 0 && time_cnt < time_val)
  173.             time_cnt <= time_cnt + 1;
  174.         else if (move_down == 1)
  175.             time_cnt <= 0;
  176.         else begin
  177.             time_cnt <= time_cnt;
  178.         end
  179.     end
  180.     always @ (posedge clk or negedge rst_n)
  181.     begin
  182.         if (!rst_n) opcode<=0;
  183.         else opcode<={right, left, down, rotate};
  184.     end


  185.     always @ (*)
  186.     begin
  187.         next_state = S_idle;
  188.         hold = 1;
  189.         gen_random = 0;
  190.         //opcode = 4'b0000;
  191.         shift = 0;
  192.         move_down = 0;
  193.         remove_1 = 0;
  194.         remove_2 = 0;
  195.         stop = 0;
  196.         move = 0;
  197.         isdie = 0;
  198.         case (state)
  199.         S_idle:
  200.         begin
  201.             if (start)
  202.                 next_state = S_new;
  203.             else
  204.                 next_state = S_idle;
  205.         end
  206.         S_new:
  207.         begin
  208.             gen_random = 1;
  209.             next_state = S_hold;
  210.         end
  211.         S_hold:
  212.         begin
  213.             hold = 0;
  214.             if (time_cnt == time_val)
  215.             begin
  216.                 next_state = S_down;
  217.             end
  218.             else if ((down_reg == 0) && (down == 1))
  219.             begin
  220.                next_state = S_down;
  221.             end
  222.             else if ((left_reg == 0 && left == 1)|| ( right_reg == 0 && right == 1)||(up_reg == 0 && rotate == 1))
  223.             begin
  224.                 next_state = S_move;
  225.             end
  226.             else
  227.                 next_state = S_hold;
  228.         end
  229.         S_move:
  230.         begin
  231.             move = 1;
  232.             if (move_comp)
  233.                 next_state = S_shift;
  234.             else
  235.                 next_state = S_hold;
  236.         end
  237.         S_shift:
  238.         begin
  239.             shift = 1;
  240.             next_state = S_hold;
  241.         end
  242.         S_down:
  243.         begin
  244.             move_down = 1;
  245.             if (down_comp)
  246.                 next_state = S_shift;
  247.             else
  248.                 next_state = S_remove_1;               
  249.         end
  250.         S_remove_1:
  251.         begin
  252.             remove_1 = 1;
  253.             next_state = S_remove_2;
  254.         end
  255.         S_remove_2:
  256.         begin
  257.             remove_2 = 1;
  258.             if (remove_2_finish)
  259.                 next_state = S_isdie;
  260.             else
  261.                 next_state = S_remove_2;
  262.         end
  263.         S_isdie:
  264.         begin
  265.             isdie = 1;
  266.             if (die == 1)
  267.                 next_state = S_stop;
  268.             else
  269.                 next_state = S_new;
  270.         end
  271.         S_stop:
  272.         begin
  273.             stop = 1;
  274.             next_state = S_idle;
  275.         end
  276.         default next_state = S_idle;
  277.         endcase
  278.     end

  279. endmodule



  280. 數(shù)據(jù)路徑
  281. module Datapath_Unit #(
  282.     parameter   A_1 = 7'b0001000,
  283.                 B_1 = 7'b0011000,
  284.                 B_2 = 7'b0010100,
  285.                 B_3 = 7'b0010010,
  286.                 B_4 = 7'b0010001,
  287.                 C_1 = 7'b0101000,
  288.                 C_2 = 7'b0100100,
  289.                 C_3 = 7'b0100010,
  290.                 C_4 = 7'b0100001,
  291.                 D_1 = 7'b0111000,
  292.                 D_2 = 7'b0110100,
  293.                 E_1 = 7'b1001000,
  294.                 E_2 = 7'b1000100,
  295.                 E_3 = 7'b1000010,
  296.                 E_4 = 7'b1000001,
  297.                 F_1 = 7'b1011000,
  298.                 F_2 = 7'b1010100,
  299.                 G_1 = 7'b1101000,
  300.                 G_2 = 7'b1100100
  301.     )(
  302.     output reg MOVE_ABLE,SHIFT_FINISH,DOWN_ABLE,DIE_TRUE,
  303.     output     [239:0] M_OUT,
  304.     output reg [4:0] n,
  305.     output reg [3:0] m,
  306.     output reg [6:0] BLOCK,
  307.     //output reg REMOVE_1_FINISH,
  308.     output reg REMOVE_2_FINISH,
  309.     //output reg NEW_BLOCK,

  310.     input clk,rst_n,MOVE,DOWN,DIE,SHIFT,REMOVE_1,REMOVE_2,NEW,STOP,AUTODOWN,
  311.     input [3:0] KEYBOARD
  312.     );
復制代碼

全部資料51hei下載地址:
Verilog設(shè)計.7z (7.57 MB, 下載次數(shù): 33)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發(fā)
ID:306262 發(fā)表于 2021-4-6 09:51 | 只看該作者
牛逼PLUS!感謝樓主分享!
回復

使用道具 舉報

無效樓層,該帖已經(jīng)被刪除
無效樓層,該帖已經(jīng)被刪除
5#
ID:866849 發(fā)表于 2022-6-23 15:06 | 只看該作者
這個是完成了的嗎
回復

使用道具 舉報

6#
無效樓層,該帖已經(jīng)被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
一级黄色大片儿| 嫩草影院入口一二三免费| 精品国产欧美成人夜夜嗨| 国产一区二区三区高清播放| 精品一区二区三区视频在线播放| 97精品人妻一区二区三区| 熟妇人妻无乱码中文字幕真矢织江| 91成人天堂久久成人| 欧美在线你懂得| 粉嫩13p一区二区三区| 亚洲激情播播| 天天干夜夜干| 荫蒂被男人添免费视频| 亚洲2020天天堂在线观看| 婷婷久久综合九色综合绿巨人 | 在线免费观看av的网站| 夜夜嗨av一区二区三区四区 | 欧美xxx视频| 电影天堂最新网址| 外国一级黄色片| 夫妻免费无码v看片| 亚洲精品国产精品国自产在线 | av天堂永久资源网| 97人人模人人爽人人喊38tv| 中文字幕亚洲二区| 国产在线精品不卡| 国产精品一线天粉嫩av| 黑人玩欧美人三根一起进| www.麻豆传媒| 亚洲精品自产拍在线观看app| 天天鲁一鲁摸一摸爽一爽| 在线黄色免费观看| 亚洲高清不卡一区| 国产情人节一区| 性久久久久久久久| 国产精品一区三区| 免费一级欧美在线观看视频| 在线播放你懂得| 男女下面一进一出无遮挡| 色啦啦av综合| 亚洲精品二区| 91香蕉视频在线下载| 欧美日韩xxx| 91精品国产综合久久香蕉麻豆| 国产精品无人区| 麻豆国产精品777777在线| 97久久视频| 亚洲午夜免费| 91精品国产高久久久久久五月天| 亚洲欧洲激情在线乱码蜜桃| wwwwww在线观看| 欧美日韩在线观看一区| 国产91精品视频在线观看| 在线成人免费网站| 亚洲丁香婷深爱综合| 欧美视频中文在线看| 岛国av在线一区| 免费观看亚洲视频大全| 成人亚洲综合天堂| 国产激情二区| 中文字幕人成人乱码亚洲电影| 亚洲精品一区二区三区影院忠贞| 亚洲欧美偷拍另类| 国产综合中文字幕| 公共露出暴露狂另类av| 欧美成人第一页| 亚洲精品一区二区三区在线观看| 色哟哟在线观看一区二区三区| 自拍偷拍欧美精品| 国产亚洲欧美日韩在线一区| 天堂在线一区二区| 亚洲人人精品| 后进极品白嫩翘臀在线播放| eeuss影院www在线观看| 香蕉视频在线观看网站| 台湾十八成人网| 美女在线观看www| 91丨九色丨蝌蚪丨老板| 九九热中文字幕| 中文字幕一二区| 欧美三级免费看| 亚洲一级片在线播放| 极品人妻一区二区三区| 久草视频福利在线| 国产熟女高潮视频| 伊人久久青草| 久久免费精品日本久久中文字幕| 欧美一卡二卡在线| 欧美乱妇一区二区三区不卡视频| 日韩欧美高清在线视频| 亚洲成在人线在线播放| 国内精品伊人久久久久影院对白| 国产成人精品免费视频大全软件| 色欲久久久天天天综合网| 精品国精品国产自在久不卡| 午夜久久久久久久久久影院| 午夜视频网站在线观看| 亚洲天堂中文字幕在线| 91亚洲欧美激情| 99久久婷婷国产一区二区三区| 亚洲第一网站在线观看| 无码一区二区三区在线观看| 日韩xxx视频| 97视频免费在线| 中文字幕av第一页| 中文字幕理论片| 国产精品一级视频| 日韩一区二区三区在线观看视频| 中文字幕乱码av| 国产精品 欧美激情| 久草视频在线观| 亚洲字幕av一区二区三区四区| 国产免费叼嘿网站免费| 日本免费不卡视频| 欧美free性| 51免费午夜啪啪| 粉嫩喷白浆久久| 亚洲日本伦理| 91高清在线观看视频| 亚洲欧洲自拍| 天堂久久午夜av| 国产专区精品| 亚洲国产高清在线观看| 99香蕉久久| 久久在线视频| 国产精品嫩草99av在线| 精品影视av免费| 中国女人久久久| 国产 日韩 欧美大片| 中文字幕日韩一区二区| 亚洲成人你懂的| 国产精品久久久久久久第一福利| 亚洲午夜久久久久中文字幕久| 在线观看三级视频欧美| 亚洲精品电影网站| 日韩视频欧美视频| 91精品国产综合久久香蕉的用户体验 | 中文字幕精品一区二| 日批免费在线观看| h视频免费观看| 影音日韩av| 美女被c网站| 性xxxx丰满孕妇xxxx另类| 色呦呦呦在线观看| 成人日韩av| 91欧美大片| 国产一区91精品张津瑜| 亚洲女人小视频在线观看| 欧美精品v国产精品v日韩精品 | 在线观看h网| 国产精品久久久久久久久久久久久久久 | 国产一区二区激情| 国产成人精品综合久久久| 精品国产一区二区三区四区精华 | 男人舔女人下面高潮视频| 免费日本黄色网址| 亚洲成人第一网站| 精品国内自产拍在线视频| 黄页网站免费在线观看| 手机在线观看av| 人人狠狠综合久久亚洲婷| 久久66热re国产| 日本一区二区三级电影在线观看| 精品magnet| 色琪琪综合男人的天堂aⅴ视频| 国产精品狼人色视频一区| 伊人色综合影院| 艳妇乳肉亭妇荡乳av| jizz国产在线观看| 国产福利一区二区在线精品| www免费在线观看视频| 性欧美ⅴideo另类hd| 色婷婷久久久| 黄色小说综合网站| 91久久国产综合久久| 欧美老少配视频| 午夜精品一区二区三区四区| 日本少妇xxxx软件| 亚洲天堂男人网| 2色视频网站| 麻豆视频在线免费观看| 少妇一区视频| 欧美丝袜激情| 国内外成人在线视频| 一本久久精品一区二区| 久久久久一本一区二区青青蜜月| 日韩中文视频免费在线观看| 老牛影视免费一区二区| 久久99精品久久久久子伦| 一区二区三区国产好的精华液| 美日韩一二三区| 青青草原av| 成人久久网站| 六月丁香婷婷久久| 91久久精品一区二区| 欧美性做爰毛片| 欧美s码亚洲码精品m码| 欧美性猛交xxxxx少妇| 国产二区视频| 嗯啊主人调教在线播放视频 | 中文字幕一区二区三中文字幕| 精品一区二区电影| 欧美一区二区福利| 免费网站在线高清观看| 欧美做a欧美| 欧美日韩在线中文字幕| 天堂综合网久久| 久久久蜜桃精品| 在线播放日韩精品| 日韩xxxx视频| 超碰在线97观看| 欧美一级淫片aaaaaa| yjizz视频网站在线播放| 成人免费看片39| 国产精品乱码一区二区三区软件 | 一道本在线免费视频| 青青草97国产精品麻豆| 日韩欧美理论片| 国产老女人精品毛片久久| 免费中文字幕在线观看| 欧美一区二区麻豆红桃视频| 无码粉嫩虎白一线天在线观看 | 中文在线天堂网| 欧美伊人精品成人久久综合97| www.中文字幕| 香蕉加勒比综合久久| 夜夜骑日日操| 亚瑟一区二区三区四区| 精品久久精品久久| 国产日韩欧美精品一区二区三区| 亚洲欧洲色图综合| 美女av免费看| 国产成人在线观看免费网站| 在线观看国产精品入口男同| 欧美午夜影院在线视频| 看成年女人免费午夜视频| 久久99久久亚洲国产| 你懂的免费在线观看视频网站| 日韩国产欧美区| 欧美二区视频| 一区二区三区美女| 国产成一区二区| 四虎永久免费观看| 亚洲精品久久久久久久久久久久久久| 久草福利在线| 亚洲小说区图片区| 国产一区二区成人久久免费影院 | 成人一区二区| 大荫蒂欧美视频另类xxxx| 亚洲iv一区二区三区| 男女黄床上色视频| 丰满湿润大白屁股bbw按摩| 91欧美极品| 亚洲欧美日韩国产综合| 国产精品欧美久久久| 亚洲av综合一区二区| h在线观看免费| 国产成人三级| 色久优优欧美色久优优| 精品国产乱码久久久久| 亚洲女人毛茸茸高潮| 久草.com| 日韩午夜电影| 亚洲精品自在久久| 日韩手机在线观看视频| 四虎影视免费看电影| 国产日韩中文在线中文字幕| 国产精品久久久久影视| 成人网在线免费观看| 欧美做爰爽爽爽爽爽爽| 亚洲有码转帖| 日韩 欧美一区二区三区| 日韩风俗一区 二区| 又粗又黑又大的吊av| 亚洲第一天堂影院| 国产人妖一区| 波多野结衣中文一区| 色噜噜久久综合| 99久热在线精品视频| 久草在线资源网| 日本成人7777| 欧美刺激午夜性久久久久久久| 欧美少妇性生活视频| www.青草| 美女视频一区二区三区| 欧美自拍视频在线| 日韩欧美a级片| 色黄视频在线观看| 婷婷国产v国产偷v亚洲高清| 成人av在线不卡| 日本边添边摸边做边爱的第三级| 伊人成年综合电影网| 久久中文字幕在线视频| 黄色在线观看免费| 日韩不卡免费高清视频| 色婷婷综合久色| 日本成人黄色网| 91福利免费| 成人精品国产免费网站| 国产欧美日韩一区| 嫩草影院永久一二三入口| 围产精品久久久久久久| 欧美xxxx做受欧美| 国产精品美女毛片真酒店| av在线一区不卡| 欧美一区二区三区四区久久| 午夜性福利视频| 婷婷免费在线视频| 亚洲午夜一区二区| youjizzxxxx18| 影音先锋中文一区| 婷婷亚洲综合| 中文日韩在线观看| 九九这里只有精品视频| 中文字幕在线视频网站| 欧美日韩高清一区二区不卡| 台湾佬美性中文| 欧美日韩xx| 午夜国产不卡在线观看视频| 天天摸天天碰天天添| 天堂在线视频| 中文字幕永久在线不卡| 青青草视频在线视频| 97视频网站| 国产欧美精品在线观看| 欧美xxxx吸乳| 成年免费插网| 不卡欧美aaaaa| 亚洲欧美日韩不卡| 老司机aⅴ毛片免费观看| 欧美国产一区二区| 国产乱子伦农村叉叉叉| 欧美写真视频一区| 亚洲欧美日韩国产综合| 欧美日韩在线免费播放| se在线电影| 一本在线高清不卡dvd| yjizz视频| 综合久久2023| 日韩成人av网| 欧美一级高潮片| 美女亚洲一区| 日本精品一区二区三区在线播放视频| www.五月婷婷| 免费在线欧美黄色| 久久精品aaaaaa毛片| 免费看美剧网站| 2023国产一二三区日本精品2022| 91午夜在线观看| 免费在线黄色电影| 91久久精品一区二区三| 欧美图片第一页| 日本在线成人| 欧美激情性做爰免费视频| 亚洲成人一级片| 久久久久免费| 亚洲欧洲在线一区| 一级在线观看| 日本久久精品电影| 欧美激情久久久久久久| 91蝌蚪精品视频| 欧日韩在线观看| 九色porny丨精品自拍视频| 国产精品一区二区x88av| www成人免费| 精品国产丝袜高跟鞋| 精品动漫一区二区三区在线观看| 好吊操这里只有精品| 婷婷精品进入| 国内精品久久久久久久果冻传媒| 天天噜噜噜噜噜噜| 亚洲一区二区精品久久av| 97人妻精品一区二区免费| 国产精品香蕉| 国产精品第1页| 美女裸体自慰在线观看| 国产精品色在线观看| 亚洲911精品成人18网站| 亚洲视频自拍| 午夜精品福利在线观看| 国内精品久久久久久不卡影院| 久久久久久电影| aaa黄色大片| 香港久久久电影| 国产精品美女主播| h视频在线看| 无吗不卡中文字幕| 日韩欧美123区| 中国成人一区| 亚洲7777| 国产成人无吗| 三级精品视频久久久久| 亚洲av成人精品日韩在线播放| 亚洲电影成人| 先锋影音欧美| 国产最新在线| www.久久色.com| 九九99精品| 亚洲一区二区成人在线观看| 午夜精品久久久久99蜜桃最新版|