Advertisement
Guest User

Untitled

a guest
Dec 14th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 25.41 KB | None | 0 0
  1.  
  2. //Desired start location of drawn sprite
  3.  
  4. logic [9:0] Pac_X_OGstart = 10'd288; // Center position on the X axis
  5. logic [9:0] Pac_Y_OGstart = 10'd300;//131;
  6.  
  7. logic [9:0] Pac_X_start = 10'd288; // Center position on the X axis
  8. logic [9:0] Pac_Y_start = 10'd300;//131; // Center position on the Y axis
  9.  
  10. //Pac to the right
  11.  
  12. parameter [9:0] Pac_X_openMouthRight = 10'd21;
  13. parameter [9:0] Pac_Y_openMouthRight = 10'd90;
  14.  
  15. parameter [9:0] Pac_X_openWideMouthRight = 10'd36; // offset horizontal
  16. parameter [9:0] Pac_Y_openWideMouthRight = 10'd90; // offset vertical
  17.  
  18. //Pac to the left
  19.  
  20. parameter [9:0] Pac_X_openMouthLeft = 10'd52;
  21. parameter [9:0] Pac_Y_openMouthLeft = 10'd90;
  22.  
  23. parameter [9:0] Pac_X_openWideMouthLeft = 10'd68; // offset horizontal
  24. parameter [9:0] Pac_Y_openWideMouthLeft = 10'd90;
  25.  
  26. //Pac to UP
  27.  
  28. parameter [9:0] Pac_X_openMouthUp = 10'd83;
  29. parameter [9:0] Pac_Y_openMouthUp = 10'd92;
  30.  
  31. parameter [9:0] Pac_X_openWideMouthUp = 10'd100; // offset horizontal
  32. parameter [9:0] Pac_Y_openWideMouthUp = 10'd95; // offset vertical
  33.  
  34. //Pac to Down
  35.  
  36. parameter [9:0] Pac_X_openMouthDown = 10'd117;
  37. parameter [9:0] Pac_Y_openMouthDown = 10'd92;
  38.  
  39. parameter [9:0] Pac_X_openWideMouthDown = 10'd134; // offset horizontal
  40. parameter [9:0] Pac_Y_openWideMouthDown = 10'd95;
  41.  
  42.  
  43. //Closed Used by Everyone
  44. parameter [9:0] Pac_X_closed = 10'd4; // offset horizontal
  45. parameter [9:0] Pac_Y_closed = 10'd90; // offset vertical
  46.  
  47.  
  48.  
  49. //For Right
  50. logic [9:0] new_x_openMouthRight; // offset horizontal
  51. logic [9:0] new_y_openMouthRight; // offset vertical
  52.  
  53. logic [9:0] new_x_openWideMouthRight; // offset horizontal
  54. logic [9:0] new_y_openWideMouthRight; // offset vertical
  55.  
  56. //For Left
  57. logic [9:0] new_x_openMouthLeft; // offset horizontal
  58. logic [9:0] new_y_openMouthLeft; // offset vertical
  59.  
  60. logic [9:0] new_x_openWideMouthLeft; // offset horizontal
  61. logic [9:0] new_y_openWideMouthLeft; // offset vertical
  62.  
  63. //For Up
  64. logic [9:0] new_x_openMouthUp; // offset horizontal
  65. logic [9:0] new_y_openMouthUp; // offset vertical
  66.  
  67. logic [9:0] new_x_openWideMouthUp; // offset horizontal
  68. logic [9:0] new_y_openWideMouthUp; // offset vertical
  69.  
  70. //For Down
  71. logic [9:0] new_x_openMouthDown; // offset horizontal
  72. logic [9:0] new_y_openMouthDown; // offset vertical
  73.  
  74. logic [9:0] new_x_openWideMouthDown; // offset horizontal
  75. logic [9:0] new_y_openWideMouthDown; // offset vertical
  76.  
  77.  
  78. //For Everyone
  79.  
  80. logic [9:0] new_x_closed; // offset horizontal
  81. logic [9:0] new_y_closed; // offset vertical
  82.  
  83.  
  84. parameter [9:0] Pac_X_Min = 10'd0; // Leftmost point on the X axis
  85. parameter [9:0] Pac_X_Max = 10'd639; // Rightmost point on the X axis
  86. parameter [9:0] Pac_Y_Min = 10'd0; // Topmost point on the Y axis
  87. parameter [9:0] Pac_Y_Max = 10'd479; // Bottommost point on the Y axis
  88.  
  89. parameter [9:0] Pac_X_Step = 10'd1; // Step size on the X axis
  90. parameter [9:0] Pac_Y_Step = 10'd1; // Step size on the Y axis
  91.  
  92.  
  93.  
  94. parameter [9:0] LeftTunnel_X = 10'd202;
  95. parameter [9:0] LeftTunnel_Y = 10'd114;
  96.  
  97.  
  98. parameter [9:0] RightTunnel_X = 10'd372;
  99. parameter [9:0] RightTunnel_Y = 10'd114;
  100.  
  101.  
  102.  
  103. logic [6:0] flash_counter = 7'b0000000;
  104.  
  105. logic [6:0] counter_TOTAL = 7'b1111111;
  106.  
  107.  
  108.  
  109. ///Update going right
  110. logic [18:0] openMouthRight;
  111. logic [18:0] openWideMouthRight;
  112. logic [18:0] closed;
  113.  
  114. assign new_x_openMouthRight = DrawX - Pac_X_start + Pac_X_openMouthRight;
  115. assign new_y_openMouthRight = DrawY - Pac_Y_start + Pac_Y_openMouthRight;
  116.  
  117. assign new_x_openWideMouthRight = DrawX - Pac_X_start + Pac_X_openWideMouthRight;
  118. assign new_y_openWideMouthRight = DrawY - Pac_Y_start + Pac_Y_openWideMouthRight;
  119.  
  120. ///Update going left
  121. logic [18:0] openMouthLeft;
  122. logic [18:0] openWideMouthLeft;
  123.  
  124.  
  125. assign new_x_openMouthLeft = DrawX - Pac_X_start + Pac_X_openMouthLeft;
  126. assign new_y_openMouthLeft = DrawY - Pac_Y_start + Pac_Y_openMouthLeft;
  127.  
  128. assign new_x_openWideMouthLeft = DrawX - Pac_X_start + Pac_X_openWideMouthLeft;
  129. assign new_y_openWideMouthLeft = DrawY - Pac_Y_start + Pac_Y_openWideMouthLeft;
  130.  
  131.  
  132. ///Update going Up
  133. logic [18:0] openMouthUp;
  134. logic [18:0] openWideMouthUp;
  135.  
  136.  
  137. assign new_x_openMouthUp = DrawX - Pac_X_start + Pac_X_openMouthUp;
  138. assign new_y_openMouthUp = DrawY - Pac_Y_start + Pac_Y_openMouthUp;
  139.  
  140. assign new_x_openWideMouthUp = DrawX - Pac_X_start + Pac_X_openWideMouthUp;
  141. assign new_y_openWideMouthUp = DrawY - Pac_Y_start + Pac_Y_openWideMouthUp;
  142.  
  143. ///Update going Down
  144. logic [18:0] openMouthDown;
  145. logic [18:0] openWideMouthDown;
  146.  
  147.  
  148. assign new_x_openMouthDown = DrawX - Pac_X_start + Pac_X_openMouthDown;
  149. assign new_y_openMouthDown = DrawY - Pac_Y_start + Pac_Y_openMouthDown;
  150.  
  151. assign new_x_openWideMouthDown = DrawX - Pac_X_start + Pac_X_openWideMouthDown;
  152. assign new_y_openWideMouthDown = DrawY - Pac_Y_start + Pac_Y_openWideMouthDown;
  153.  
  154.  
  155.  
  156. //Right Addresses
  157. assign openMouthRight = (new_y_openMouthRight * 538) + new_x_openMouthRight;
  158. assign openWideMouthRight = (new_y_openWideMouthRight * 538) + new_x_openWideMouthRight;
  159.  
  160. //Left Addresses
  161. assign openMouthLeft = (new_y_openMouthLeft * 538) + new_x_openMouthLeft;
  162. assign openWideMouthLeft = (new_y_openWideMouthLeft * 538) + new_x_openWideMouthLeft;
  163.  
  164. //Up Addresses
  165. assign openMouthUp = (new_y_openMouthUp * 538) + new_x_openMouthUp;
  166. assign openWideMouthUp = (new_y_openWideMouthUp * 538) + new_x_openWideMouthUp;
  167.  
  168. //Down Addresses
  169. assign openMouthDown = (new_y_openMouthDown * 538) + new_x_openMouthDown;
  170. assign openWideMouthDown = (new_y_openWideMouthDown * 538) + new_x_openWideMouthDown;
  171.  
  172. //Closed Address
  173. assign new_x_closed = (DrawX - Pac_X_start) + Pac_X_closed;
  174. assign new_y_closed = (DrawY - Pac_Y_start) + Pac_Y_closed;
  175.  
  176.  
  177.  
  178.  
  179. assign closed = (new_y_closed * 538) + new_x_closed;
  180.  
  181.  
  182. always_ff @ (posedge frame_clk)
  183. begin
  184.  
  185.  
  186. flash_counter <= flash_counter + 1'b1;
  187.  
  188.  
  189.  
  190. if(flash_counter == counter_TOTAL)
  191.  
  192. begin
  193.  
  194. flash_counter <= 0;
  195.  
  196. end
  197.  
  198. end
  199.  
  200. logic dead, dead_in;
  201.  
  202.  
  203. always_comb
  204. begin
  205.  
  206.  
  207. if(dead == 1'b1)
  208. begin
  209. if((DrawX >= Pac_X_start) && (DrawX <= Pac_X_start + 13) && (DrawY >= Pac_Y_start) && (DrawY <= Pac_Y_start+13) )
  210. address = closed; //closed
  211. else
  212. address = 19'b0;
  213. end
  214.  
  215. else if(currDirec_in == 4'b0000)
  216. begin
  217. if((DrawX >= Pac_X_start) && (DrawX <= Pac_X_start + 13) && (DrawY >= Pac_Y_start) && (DrawY <= Pac_Y_start+13) )
  218. address = closed; //closed
  219. else
  220. address = 19'd0;
  221.  
  222. end
  223. else if(currDirec == 4'b0010)
  224. begin
  225. if( (DrawX >= Pac_X_start) && (DrawX <= Pac_X_start + 13) && (DrawY >= Pac_Y_start) && (DrawY <= Pac_Y_start+13) && (flash_counter < 7'b0101001 ) )
  226. address = openWideMouthRight; //wide open mouth
  227.  
  228. else if((DrawX >= Pac_X_start) && (DrawX <= Pac_X_start + 13) && (DrawY >= Pac_Y_start) && (DrawY <= Pac_Y_start+13) && (flash_counter < 7'b1010010 ))
  229. address = openMouthRight; //open mouth
  230.  
  231. else if((DrawX >= Pac_X_start) && (DrawX <= Pac_X_start + 13) && (DrawY >= Pac_Y_start) && (DrawY <= Pac_Y_start+13) && (flash_counter > 7'b1010010 ))
  232. address = closed; //closed
  233. else
  234. address = 19'd0;
  235.  
  236. end
  237.  
  238. else if(currDirec == 4'b1000)
  239. begin
  240. if( (DrawX >= Pac_X_start) && (DrawX <= Pac_X_start + 13) && (DrawY >= Pac_Y_start) && (DrawY <= Pac_Y_start+13) && (flash_counter < 7'b0101001 ) )
  241. address = openWideMouthLeft; //wide open mouth
  242.  
  243. else if((DrawX >= Pac_X_start) && (DrawX <= Pac_X_start + 13) && (DrawY >= Pac_Y_start) && (DrawY <= Pac_Y_start+13) && (flash_counter < 7'b1010010 ))
  244. address = openMouthLeft; //open mouth
  245.  
  246. else if((DrawX >= Pac_X_start) && (DrawX <= Pac_X_start + 13) && (DrawY >= Pac_Y_start) && (DrawY <= Pac_Y_start+13) && (flash_counter > 7'b1010010 ))
  247. address = closed; //closed
  248. else
  249. address = 19'd0;
  250. end
  251. else if(currDirec == 4'b0001)
  252. begin
  253. if( (DrawX >= Pac_X_start) && (DrawX <= Pac_X_start + 13) && (DrawY >= Pac_Y_start) && (DrawY <= Pac_Y_start+13) && (flash_counter < 7'b0101001 ) )
  254. address = openWideMouthDown; //wide open mouth
  255.  
  256. else if((DrawX >= Pac_X_start) && (DrawX <= Pac_X_start + 13) && (DrawY >= Pac_Y_start) && (DrawY <= Pac_Y_start+13) && (flash_counter < 7'b1010010 ))
  257. address = openMouthDown; //open mouth
  258.  
  259. else if((DrawX >= Pac_X_start) && (DrawX <= Pac_X_start + 13) && (DrawY >= Pac_Y_start) && (DrawY <= Pac_Y_start+13) && (flash_counter > 7'b1010010 ))
  260. address = closed; //closed
  261. else
  262. address = 19'd0;
  263.  
  264. end
  265. //
  266. else if(currDirec == 4'b0100)
  267. begin
  268. if( (DrawX >= Pac_X_start) && (DrawX <= Pac_X_start + 13) && (DrawY >= Pac_Y_start) && (DrawY <= Pac_Y_start+13) && (flash_counter < 7'b0101001 ) )
  269. address = openWideMouthUp; //wide open mouth
  270.  
  271. else if((DrawX >= Pac_X_start) && (DrawX <= Pac_X_start + 13) && (DrawY >= Pac_Y_start) && (DrawY <= Pac_Y_start+13) && (flash_counter < 7'b1010010 ))
  272. address = openMouthUp; //open mouth
  273.  
  274. else if((DrawX >= Pac_X_start) && (DrawX <= Pac_X_start + 13) && (DrawY >= Pac_Y_start) && (DrawY <= Pac_Y_start+13) && (flash_counter > 7'b1010010 ))
  275. address = closed; //closed
  276. else
  277. address = 19'd0;
  278. end
  279.  
  280. else
  281. address = 19'd0;
  282.  
  283.  
  284.  
  285.  
  286. end
  287.  
  288.  
  289.  
  290. parameter [9:0] Pac_X_map = 10'd202;
  291. parameter [9:0] Pac_Y_map = 10'd4;
  292.  
  293.  
  294. logic [9:0] new_x_to_right; // offset horizontal
  295. logic [9:0] new_y_to_right; // o
  296. logic [18:0] checkWallRight;
  297.  
  298. assign new_x_to_right = (DrawX - Pac_X_start + 14) - Pac_X_map;
  299. assign new_y_to_right = (DrawY - Pac_Y_start) - Pac_Y_map;
  300.  
  301. assign checkWallRight = (new_y_to_right * 184) + new_x_to_right;
  302.  
  303.  
  304.  
  305. logic [9:0] new_x_to_left; // offset horizontal
  306. logic [9:0] new_y_to_left; // o
  307. logic [18:0] checkWallLeft;
  308.  
  309. assign new_x_to_left = (DrawX - Pac_X_start - 1 - Pac_X_map);
  310. assign new_y_to_left = (DrawY - Pac_Y_start - Pac_Y_map) ;
  311.  
  312. assign checkWallLeft = (new_y_to_left * 184) + new_x_to_left;
  313.  
  314.  
  315. logic [9:0] new_x_to_up; // offset horizontal
  316. logic [9:0] new_y_to_up; // o
  317. logic [18:0] checkWallUp;
  318.  
  319. assign new_x_to_up = (DrawX - Pac_X_start) + Pac_X_map ;
  320. assign new_y_to_up = (DrawY - Pac_Y_start -1) + Pac_Y_map ;
  321.  
  322. assign checkWallUp = (new_y_to_up * 184) + new_x_to_up;
  323.  
  324.  
  325.  
  326. logic [9:0] new_x_to_down; // offset horizontal
  327. logic [9:0] new_y_to_down; // o
  328. logic [18:0] checkWallDown;
  329.  
  330. assign new_x_to_down = (DrawX - Pac_X_start) ;
  331. assign new_y_to_down = (DrawY - Pac_Y_start + 14);
  332.  
  333. assign checkWallDown = (new_y_to_down * 184) + new_x_to_down;
  334.  
  335.  
  336.  
  337.  
  338. //
  339. // //////// Do not modify the always_ff blocks. ////////
  340. // Detect rising edge of frame_clk
  341. logic frame_clk_delayed, frame_clk_rising_edge;
  342. always_ff @ (posedge Clk) begin
  343. frame_clk_delayed <= frame_clk;
  344. frame_clk_rising_edge <= (frame_clk == 1'b1) && (frame_clk_delayed == 1'b0);
  345. end
  346.  
  347.  
  348.  
  349.  
  350. logic [9:0] Pac_Y_start_in;
  351. logic [9:0] Pac_X_start_in;
  352. logic [3:0] currDirec;
  353. logic [3:0] currDirec_in;
  354.  
  355. // logic [3:0] currDirec_prev;
  356.  
  357. // Update registers
  358. always_ff @ (posedge Clk)
  359. begin
  360. if (Reset)
  361. begin
  362. Pac_X_start <= Pac_X_OGstart;
  363. Pac_Y_start <= Pac_Y_OGstart;
  364. dead <= 1'b0;
  365. currDirec <= 4'b0000;
  366. end
  367. else
  368. begin
  369.  
  370. Pac_Y_start <= Pac_Y_start_in;
  371. Pac_X_start <= Pac_X_start_in;
  372. //currDirec_prev <= currDirec;
  373. currDirec <= currDirec_in;
  374.  
  375.  
  376. dead <= dead_in;
  377. end
  378. end
  379. //////// Do not modify the always_ff blocks. ////////
  380.  
  381. // You need to modify always_comb block.
  382. always_comb
  383. begin
  384. // By default, keep motion and position unchanged
  385.  
  386. Pac_Y_start_in = Pac_Y_start;
  387. Pac_X_start_in = Pac_X_start;
  388. currDirec_in = currDirec;
  389.  
  390. dead_in = dead;
  391.  
  392. // Update position and motion only at rising edge of frame clock
  393. if (frame_clk_rising_edge)
  394. begin
  395.  
  396.  
  397.  
  398.  
  399. unique case(SW)
  400.  
  401. 8'h1A: // w (up)
  402. begin
  403. currDirec_in = 4'b0100;
  404. // if( mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 )] != 2'd0) //&&
  405. //// mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 1)] != 2'd0 &&
  406. //// mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 2)] != 2'd0 &&
  407. //// mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 3)] != 2'd0 &&
  408. //// mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 4)] != 2'd0 &&
  409. //// mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 5)] != 2'd0 &&
  410. //// mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 6)] != 2'd0 &&
  411. //// mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 7)] != 2'd0 &&
  412. //// mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 8)] != 2'd0 &&
  413. //// mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 9)] != 2'd0 &&
  414. //// mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 10)] != 2'd0 &&
  415. //// mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 11)] != 2'd0 &&
  416. //// mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 12)] != 2'd0 &&
  417. //// mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 13)] != 2'd0)
  418. // begin
  419. // currDirec_in = 4'b0100;
  420. // end
  421. // else
  422. // begin
  423. // dead_in = dead;
  424. // Pac_Y_start_in = Pac_Y_start;
  425. // currDirec_in = currDirec;
  426. // end
  427. end
  428. 8'h07://right
  429. begin
  430. currDirec_in = 4'b0010;
  431. // if((mem_out[(((Pac_Y_start - 4 ) * 184) + (Pac_X_start - 202 + 14))] != 2'd0)) //&&
  432. //// (mem_out[(((Pac_Y_start - 4 + 1) * 184) + (Pac_X_start - 202 + 14))] != 2'd0) &&
  433. //// (mem_out[(((Pac_Y_start - 4 + 2) * 184) + (Pac_X_start - 202 + 14))] != 2'd0) &&
  434. //// (mem_out[(((Pac_Y_start - 4 + 3) * 184) + (Pac_X_start - 202 + 14))] != 2'd0) &&
  435. //// (mem_out[(((Pac_Y_start - 4 + 4) * 184) + (Pac_X_start - 202 + 14))] != 2'd0) &&
  436. //// (mem_out[(((Pac_Y_start - 4 + 5) * 184) + (Pac_X_start - 202 + 14))] != 2'd0) &&
  437. //// (mem_out[(((Pac_Y_start - 4 + 6) * 184) + (Pac_X_start - 202 + 14))] != 2'd0) &&
  438. //// (mem_out[(((Pac_Y_start - 4 + 7) * 184) + (Pac_X_start - 202 + 14))] != 2'd0) &&
  439. //// (mem_out[(((Pac_Y_start - 4 + 8) * 184) + (Pac_X_start - 202 + 14))] != 2'd0) &&
  440. //// (mem_out[(((Pac_Y_start - 4 + 9) * 184) + (Pac_X_start - 202 + 14))] != 2'd0) &&
  441. //// (mem_out[(((Pac_Y_start - 4 + 10) * 184) + (Pac_X_start - 202 + 14))] != 2'd0 ) &&
  442. //// (mem_out[(((Pac_Y_start - 4 + 11) * 184) + (Pac_X_start - 202 + 14))] != 2'd0 ) &&
  443. //// (mem_out[(((Pac_Y_start - 4 + 12) * 184) + (Pac_X_start - 202 + 14))] != 2'd0 ) &&
  444. //// (mem_out[(((Pac_Y_start - 4 + 13) * 184) + (Pac_X_start - 202 + 14))] != 2'd0 ))
  445. // begin
  446. // currDirec_in = 4'b0010;
  447. // end
  448. // else
  449. // begin
  450. // dead_in = dead;
  451. // Pac_Y_start_in = Pac_Y_start;
  452. // currDirec_in = currDirec;
  453. // end
  454.  
  455. end
  456. 8'h16://down
  457. begin
  458. currDirec_in = 4'b0001;
  459. // if(mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 )] != 2'd0 )//&&
  460. //// mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 1)] != 2'd0 &&
  461. //// mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 2)] != 2'd0 &&
  462. //// mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 3)] != 2'd0 &&
  463. //// mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 4)] != 2'd0 &&
  464. //// mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 5)] != 2'd0 &&
  465. //// mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 6)] != 2'd0 &&
  466. //// mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 7)] != 2'd0 &&
  467. //// mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 8)] != 2'd0 &&
  468. //// mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 9)] != 2'd0 &&
  469. //// mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 10)] != 2'd0 &&
  470. //// mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 11)] != 2'd0 &&
  471. //// mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 12)] != 2'd0 &&
  472. //// mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 13)] != 2'd0)
  473. // begin
  474. // currDirec_in = 4'b0001;
  475. // end
  476. // else
  477. // begin
  478. // dead_in = dead;
  479. // Pac_Y_start_in = Pac_Y_start;
  480. // currDirec_in = currDirec;
  481. // end
  482. end
  483. 8'h04://left
  484. begin
  485. currDirec_in = 4'b1000;
  486. // if( mem_out[((Pac_Y_start - 4 ) * 184) + (Pac_X_start - 202 - 1)] != 2'd0) //&&
  487. //// mem_out[((Pac_Y_start - 4 + 1) * 184) + (Pac_X_start - 202 - 1)] != 2'd0 &&
  488. //// mem_out[((Pac_Y_start - 4 + 2) * 184) + (Pac_X_start - 202 - 1)] != 2'd0 &&
  489. //// mem_out[((Pac_Y_start - 4 + 3) * 184) + (Pac_X_start - 202 - 1)] != 2'd0 &&
  490. //// mem_out[((Pac_Y_start - 4 + 4) * 184) + (Pac_X_start - 202 - 1)] != 2'd0 &&
  491. //// mem_out[((Pac_Y_start - 4 + 5) * 184) + (Pac_X_start - 202 - 1)] != 2'd0 &&
  492. //// mem_out[((Pac_Y_start - 4 + 6) * 184) + (Pac_X_start - 202 - 1)] != 2'd0 &&
  493. //// mem_out[((Pac_Y_start - 4 + 7) * 184) + (Pac_X_start - 202 - 1)] != 2'd0 &&
  494. //// mem_out[((Pac_Y_start - 4 + 8) * 184) + (Pac_X_start - 202 - 1)] != 2'd0 &&
  495. //// mem_out[((Pac_Y_start - 4 + 9) * 184) + (Pac_X_start - 202 - 1)] != 2'd0 &&
  496. //// mem_out[((Pac_Y_start - 4 + 10) * 184) + (Pac_X_start - 202 - 1)] != 2'd0 &&
  497. //// mem_out[((Pac_Y_start - 4 + 11) * 184) + (Pac_X_start - 202 - 1)] != 2'd0 &&
  498. //// mem_out[((Pac_Y_start - 4 + 12) * 184) + (Pac_X_start - 202 - 1)] != 2'd0 &&
  499. //// mem_out[((Pac_Y_start - 4 + 13) * 184) + (Pac_X_start - 202 - 1)] != 2'd0)
  500. // begin
  501. // currDirec_in = 4'b1000;
  502. // end
  503. // else
  504. // begin
  505. // dead_in = dead;
  506. // Pac_Y_start_in = Pac_Y_start;
  507. // currDirec_in = currDirec;
  508. // end
  509.  
  510. end
  511.  
  512. default:
  513. begin
  514. dead_in = dead;
  515. Pac_Y_start_in = Pac_Y_start;
  516. currDirec_in = currDirec;
  517. end
  518. endcase
  519.  
  520.  
  521.  
  522.  
  523. if(currDirec == 4'b0100)
  524. begin
  525. if( mem_out[checkWallUp] != 2'd0)// mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 )] != 2'd0) //&&
  526. // mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 1)] != 2'd0 &&
  527. // mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 2)] != 2'd0 &&
  528. // mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 3)] != 2'd0 &&
  529. // mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 4)] != 2'd0 &&
  530. // mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 5)] != 2'd0 &&
  531. // mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 6)] != 2'd0 &&
  532. // mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 7)] != 2'd0 &&
  533. // mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 8)] != 2'd0 &&
  534. // mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 9)] != 2'd0 &&
  535. // mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 10)] != 2'd0 &&
  536. // mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 11)] != 2'd0 &&
  537. // mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 12)] != 2'd0 &&
  538. // mem_out[(((Pac_Y_start - 4 - 1) * 184) + Pac_X_start - 202 + 13)] != 2'd0) //Pac_Y_start - 1 > Pac_Y_Min)
  539. begin
  540. Pac_Y_start_in = Pac_Y_start - 1;
  541. end
  542. else
  543. currDirec_in = 4'b0000;
  544.  
  545.  
  546. end
  547.  
  548. else if(currDirec == 4'b0010)
  549. begin
  550. if( mem_out[checkWallRight] != 2'd0)//mem_out[checkWallRight] != 2'd0)//(mem_out[(((Pac_Y_start - 4 ) * 184) + (Pac_X_start - 202 + 14))] != 2'd0)) //&&
  551. // (mem_out[(((Pac_Y_start - 4 + 1) * 184) + (Pac_X_start - 202 + 14))] != 2'd0) &&
  552. // (mem_out[(((Pac_Y_start - 4 + 2) * 184) + (Pac_X_start - 202 + 14))] != 2'd0) &&
  553. // (mem_out[(((Pac_Y_start - 4 + 3) * 184) + (Pac_X_start - 202 + 14))] != 2'd0) &&
  554. // (mem_out[(((Pac_Y_start - 4 + 4) * 184) + (Pac_X_start - 202 + 14))] != 2'd0) &&
  555. // (mem_out[(((Pac_Y_start - 4 + 5) * 184) + (Pac_X_start - 202 + 14))] != 2'd0) &&
  556. // (mem_out[(((Pac_Y_start - 4 + 6) * 184) + (Pac_X_start - 202 + 14))] != 2'd0) &&
  557. // (mem_out[(((Pac_Y_start - 4 + 7) * 184) + (Pac_X_start - 202 + 14))] != 2'd0) &&
  558. // (mem_out[(((Pac_Y_start - 4 + 8) * 184) + (Pac_X_start - 202 + 14))] != 2'd0) &&
  559. // (mem_out[(((Pac_Y_start - 4 + 9) * 184) + (Pac_X_start - 202 + 14))] != 2'd0) &&
  560. // (mem_out[(((Pac_Y_start - 4 + 10) * 184) + (Pac_X_start - 202 + 14))] != 2'd0 )&&
  561. // (mem_out[(((Pac_Y_start - 4 + 11) * 184) + (Pac_X_start - 202 + 14))] != 2'd0 )&&
  562. // (mem_out[(((Pac_Y_start - 4 + 12) * 184) + (Pac_X_start - 202 + 14))] != 2'd0 )&&
  563. // (mem_out[(((Pac_Y_start - 4 + 13) * 184) + (Pac_X_start - 202 + 14))] != 2'd0 )) //((Pac_X_start + 14) + 1) < Pac_X_Max)
  564. begin
  565. Pac_X_start_in = Pac_X_start + 1;
  566. if((Pac_X_start == RightTunnel_X) && (RightTunnel_Y <= Pac_Y_start) && (Pac_Y_start <= RightTunnel_Y + 16))
  567. begin
  568. Pac_X_start_in = LeftTunnel_X;
  569. currDirec_in = 4'b0010;
  570. end
  571. end
  572. else
  573. currDirec_in = 4'b0000;
  574. end
  575.  
  576.  
  577. else if(currDirec == 4'b0001)
  578. begin
  579. if(mem_out[checkWallDown] != 2'd0)//mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 )] != 2'd0) // &&
  580. // mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 1)] != 2'd0 &&
  581. // mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 2)] != 2'd0 &&
  582. // mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 3)] != 2'd0 &&
  583. // mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 4)] != 2'd0 &&
  584. // mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 5)] != 2'd0 &&
  585. // mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 6)] != 2'd0 &&
  586. // mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 7)] != 2'd0 &&
  587. // mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 8)] != 2'd0 &&
  588. // mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 9)] != 2'd0 &&
  589. // mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 10)] != 2'd0 &&
  590. // mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 11)] != 2'd0 &&
  591. // mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 12)] != 2'd0 &&
  592. // mem_out[(((Pac_Y_start - 4 + 14) * 184) + Pac_X_start - 202 + 13)] != 2'd0 ) //((Pac_Y_start + 21) + 1) < Pac_Y_Max)
  593. begin
  594. Pac_Y_start_in = Pac_Y_start + 1;
  595. end
  596. else
  597. currDirec_in = 4'b0000;
  598. end
  599.  
  600. else if(currDirec == 4'b1000)
  601. begin
  602.  
  603. if(mem_out[checkWallLeft] != 2'd0 )//mem_out[((Pac_Y_start - 4 ) * 184) + (Pac_X_start - 202 - 1)] != 2'd0) // &&
  604. // mem_out[((Pac_Y_start - 4 + 1) * 184) + (Pac_X_start - 202 - 1)] != 2'd0 &&
  605. // mem_out[((Pac_Y_start - 4 + 2) * 184) + (Pac_X_start - 202 - 1)] != 2'd0 &&
  606. // mem_out[((Pac_Y_start - 4 + 3) * 184) + (Pac_X_start - 202 - 1)] != 2'd0 &&
  607. // mem_out[((Pac_Y_start - 4 + 4) * 184) + (Pac_X_start - 202 - 1)] != 2'd0 &&
  608. // mem_out[((Pac_Y_start - 4 + 5) * 184) + (Pac_X_start - 202 - 1)] != 2'd0 &&
  609. // mem_out[((Pac_Y_start - 4 + 6) * 184) + (Pac_X_start - 202 - 1)] != 2'd0 &&
  610. // mem_out[((Pac_Y_start - 4 + 7) * 184) + (Pac_X_start - 202 - 1)] != 2'd0 &&
  611. // mem_out[((Pac_Y_start - 4 + 8) * 184) + (Pac_X_start - 202 - 1)] != 2'd0 &&
  612. // mem_out[((Pac_Y_start - 4 + 9) * 184) + (Pac_X_start - 202 - 1)] != 2'd0 &&
  613. // mem_out[((Pac_Y_start - 4 + 10) * 184) + (Pac_X_start - 202 - 1)] != 2'd0 &&
  614. // mem_out[((Pac_Y_start - 4 + 11) * 184) + (Pac_X_start - 202 - 1)] != 2'd0 &&
  615. // mem_out[((Pac_Y_start - 4 + 12) * 184) + (Pac_X_start - 202 - 1)] != 2'd0 &&
  616. // mem_out[((Pac_Y_start - 4 + 13) * 184) + (Pac_X_start - 202 - 1)] != 2'd0) //Pac_X_start - 1 > Pac_X_Min)
  617. begin
  618. Pac_X_start_in = Pac_X_start - 1;
  619. if((Pac_X_start == LeftTunnel_X) && (LeftTunnel_Y <= Pac_Y_start) && (Pac_Y_start <= LeftTunnel_Y + 16))
  620. begin
  621. Pac_X_start_in = RightTunnel_X - 14;
  622. currDirec_in = 4'b1000;
  623. end
  624. end
  625. else
  626. currDirec_in = 4'b0000;
  627. end
  628.  
  629. ///
  630.  
  631. if( (PinkGhost_X_in - 14 <= Pac_X_start) && (Pac_X_start <= PinkGhost_X_in + 14) &&
  632. (PinkGhost_Y_in - 14 <= Pac_Y_start) && (Pac_Y_start <= PinkGhost_Y_in + 14) )
  633. begin
  634. dead_in = 1'b1;
  635. end
  636. ///
  637.  
  638. end
  639.  
  640. end
  641.  
  642.  
  643.  
  644. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement