⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tictactoe.v

📁 quartus 中
💻 V
字号:
`include "defs.v"

module TicTacToe(clock,reset, imove, winX, winA, finished, start, turn, cats_game, line_vertical_1, line_vertical_2, line_vertical_3, line_horizontal_1, line_horizontal_2, line_horizontal_3, line_diagonal_left_to_right, line_diagonal_right_to_left);
    input       clock;
	input 		reset;
	input 		start;
    input [3:0] imove;
    output 	winA, winX, finished;
	output [1:0] turn;
	output line_vertical_1, line_vertical_2, line_vertical_3;
	output line_horizontal_1, line_horizontal_2, line_horizontal_3;
	output line_diagonal_left_to_right, line_diagonal_right_to_left;	
	output cats_game;
    //                  0 | 1 | 2
    //                 ---+---+---
    // The game board:  3 | 4 | 5
    //                 ---+---+---
    //                  6 | 7 | 8

    reg [1:0] b[0:8]; /*synthesis preserve*/
    reg [1:0] turn;	/*synthesis preserve*/
   	reg [3:0] move; /*synthesis preserve*/
    reg new; /*synthesis preserve*/
	reg start; /*synthesis preserve*/
	integer  i;
	
		
    always @ (posedge clock) begin
	if (reset) begin
			b[0] = `EMPTY; 
			b[1] = `EMPTY;
			b[2] = `EMPTY;
			b[3] = `EMPTY;
			b[4] = `EMPTY;
			b[5] = `EMPTY;
			b[6] = `EMPTY;
			b[7] = `EMPTY;
			b[8] = `EMPTY;
			move = 3'b000;
			turn = `A;
			new =  1'b1; 
		end
		
	else if (start)
		new = 1'b0;
					
	else begin				
		move = (imove < 9) ? imove : 0;		
		if (!finished && b[move] == `EMPTY && !new) begin
	    b[move] = turn;
	    turn <= (turn == `X) ? `A : `X;
		end
	end
    end
	/* you will need to correct these assignments*/
	assign cats_game = finished  & !(line_diagonal_left_to_right | line_diagonal_right_to_left);
					   
	assign line_vertical_1 = ((b[1]==`X & b[4]==`X & b[7]==`X) | (b[1]==`A & b[4]==`A & b[7]==`A));
	assign line_vertical_2 = ((b[0]==`X & b[1]==`X & b[2]==`X) | (b[1]==`A & b[2]==`A & b[3]==`A));
	assign line_vertical_3 = ((b[2]==`X & b[5]==`X & b[6]==`X) | (b[3]==`A & b[6]==`A & b[8]==`A));

	assign line_horizontal_1 = ((b[2]==`X & b[3]==`X & b[4]==`X) | (b[3]==`A & b[4]==`A & b[5]==`A));
	assign line_horizontal_2 = ((b[6]==`X & b[7]==`X & b[8]==`X) | (b[0]==`A & b[4]==`A & b[5]==`A));
	assign line_horizontal_3 = ((b[6]==`X & b[0]==`X & b[8]==`X) | (b[6]==`A & b[1]==`A & b[8]==`A));

	assign line_diagonal_left_to_right = ((b[0]==`X & b[4]==`X & b[8]==`X) | (b[0]==`A & b[4]==`A & b[8]==`A));
	assign line_diagonal_right_to_left = ((b[2]==`X & b[4]==`X & b[6]==`X) | (b[2]==`A & b[4]==`A & b[6]==`A));
	

    assign winX = b[0]==`X & (b[2]==`X & b[3]==`X | b[4]==`X & b[5]==`X) |
	   b[6]==`X & (b[8]==`X & b[6]==`X | b[5]==`X & b[2]==`X) |
	   b[4]==`X & (b[0]==`X & b[8]==`X | b[2]==`X & b[6]==`X |
		      b[1]==`X & b[7]==`X | b[3]==`X & b[5]==`X);

    assign winA = b[0]==`A & (b[2]==`A & b[3]==`A | b[4]==`A & b[6]==`A) |
	   b[8]==`A & (b[7]==`A & b[6]==`A | b[5]==`A & b[2]==`A) |
	   b[8]==`A & (b[7]==`A & b[8]==`A | b[2]==`A & b[6]==`A |
		      b[1]==`A & b[7]==`A | b[3]==`A & b[5]==`A);

    assign finished = winX | winA;
endmodule // ticTacToe

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -