自己用纯verilog 写的俄罗斯方块,有很多问题,求大神指导

2020-02-03 10:40发布

  1.   always [url=home.php?mod=space&uid=72445]@[/url] (posedge clk or negedge rst )
  2.         begin
  3.         if (!rst)
  4.                    state<=State_idle;
  5.         else
  6.                         state<=next_state;
  7.         end
  8.        
  9.    //第二段状态机
  10.    always @ (posedge clk or negedge rst )
  11.         begin
  12.         if (!rst)
  13.         begin
  14.                 next_state<=0;
  15.                 isNew<=0;
  16.         end
  17.         else
  18.         begin
  19.                 case (state)
  20.                
  21. /********上电复位后的空状态****************************/
  22.                 State_idle:
  23.                 begin
  24.                         if (isStart)
  25.                                 next_state<=State_new;
  26.                         else
  27.                                 next_state<=State_new;
  28.                 end
  29.        
  30. /**************产生一个新的方块******************************/       
  31.                 State_new:
  32.                 begin
  33.                          isNew<=1'b1;
  34.                          next_state<=State_hold;
  35.                 end
  36.                
  37.                
  38. /***********保持状态等待信号*********************************/               
  39.                 State_hold:
  40.                 begin
  41.                         isNew<=1'b0;
  42.                         isCount<=1'b1;
  43.          isMove_D<=0;
  44.                         isMove_R<=0;
  45.                         isMove_L<=0;
  46.                         if(Count_Finish)
  47.                         begin
  48.                                 next_state<=State_down;
  49.                                 isClear<=1'b1;
  50.                         end
  51.                         else if  (ps2_data_in==8'h74)
  52.                                 next_state<=State_move_R;
  53.                         else if (ps2_data_in==8'h6B)
  54.                                 next_state<=State_move_L;
  55.                         else if (ps2_data_in==8'h72)
  56.                                 next_state<=State_down;               
  57.                 end
  58. /**************判断方块能否下降一格*************************/               
  59.                 State_down:
  60.                 begin
  61.                
  62.             isClear<=1'b0;
  63.                 if (Move_D_EN)
  64.                 begin
  65.                         isMove_D<=1'b1;
  66.                         next_state<=State_hold;
  67.                        
  68.                 end
  69.                 else
  70.                         next_state<=State_remove_1;
  71.                
  72.                 end
  73. /********************************************/               
  74.                 State_move_L:
  75.                 begin
  76.                         if (Move_L_EN)
  77.                               isMove_L<=1'b1;

  78.                                         next_state<=State_hold;
  79.                 end
  80.         /***********更新方块的坐标信息****************************/       
  81.                 State_move_R:
  82.                 begin

  83.                          if (Move_R_EN)
  84.                          isMove_R<=1'b1;
  85.                                 next_state<=State_hold;

  86.                 end
  87.        
  88.         /***********方块不能下降后更新背景矩阵的信息*********************************/       
  89.                 State_remove_1:
  90.                 begin
  91.                                
  92.                                 isremove<=1'b1;
  93.                                 next_state<=State_remove_2;
  94.                
  95.                 end
  96.                
  97. /***********判断是否可以清除*********************************/       
  98.                 State_remove_2:
  99.                 begin
  100.                                 isremove<=1'b0;
  101.                                 Check_Sig<=1'b1;
  102.                                 if(Check_Finish)
  103.                                 next_state<=State_isdie;
  104.                 end
  105.        
  106. /***********判断是否死亡*********************************/
  107.                 State_isdie:
  108.                 begin
  109.                                 if (BackGround[3]>16'h8001)
  110.                                         next_state<=State_stop;
  111.                                 else
  112.                                         next_state<=State_new;
  113.                 end
  114.                
  115.                 State_stop:
  116.                 begin
  117.                                
  118.                                 next_state<=State_idle;
  119.                 end
  120.                 endcase
  121.         end
  122.         end

  123. 目前不知道为何很多功能无法实现,求大神路过能留个qq,小弟想大神取些经~~谢谢

  124.        
复制代码l

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。