设为首页 加入收藏

TOP

FPGA:乒乓球比赛模拟机的设计(五)
2023-07-23 13:26:01 】 浏览:453
Tags:FPGA
LightCount == 'd500) begin flowLightCount = 'd0; dataIn[2] = 'd100; dataIn[3] = 'd100; dataIn[4] = 'd100; dataIn[5] = 'd100; end end end endGameTrigger = endGame; end endmodule

分数处理模块

  1. 模块功能:计数。每进行一轮控制分数加1,判断是否已打够11球,是则判别出获胜方。

  2. 设计思路:在A,B两人分数上升沿时,对总分加1,然后判断是否已满11球。若满11球,比较判断出胜利的一方,随后将其状态传给显示模块用于显示结果。

  3. 代码:

点击查看代码
`timescale 1ns / 1ps


module ScoreBoard(
    input CLK, 
    input getScoreA, 
    input getScoreB, 
    input reset,
    output reg serviceSide, 
    output reg endGame, 
    output reg [1:0] winner, 
    output reg [15: 0] scoreA, 
    output reg [15: 0] scoreB
    );
    reg getScoreATrigger;
    reg getScoreBTrigger;
    reg resetTrigger;
    initial begin
        serviceSide = 'b0;
        endGame = 'b0;
        getScoreATrigger = 'b0;
        getScoreBTrigger = 'b0;
        scoreA = 'b0;
        scoreB = 'b0;
        resetTrigger = 'b0;
    end
    always @(posedge CLK) begin
        if(resetTrigger == 'b0 && reset == 'b1) begin
            serviceSide = 'b0;
            endGame = 'b0;
            getScoreATrigger = 'b0;
            getScoreBTrigger = 'b0;
            scoreA = 'b0;
            scoreB = 'b0;
        end
        else begin  //getScoreA或getScoreB出现上升沿,对应玩家得分
            if(getScoreATrigger == 'b0 && getScoreA == 'b1)
                scoreA ++;
            if(getScoreBTrigger == 'b0 && getScoreB == 'b1)
                scoreB ++;

            getScoreATrigger = getScoreA;
            getScoreBTrigger = getScoreB;
            
            if((scoreA + scoreB) / 5 % 2 == 'd0)    //每5个球换发
                serviceSide = 'b0;
            else
                serviceSide = 'b1;
            if(scoreA + scoreB == 'd11) //到达11个球时游戏结束
                endGame = 'b1;

            if(endGame == 1) begin  //游戏结束时判断赢的那方
                if(scoreA > scoreB)
                winner = 'b10;
                else if(scoreA < scoreB)
                winner = 'b01;
                else
                winner = 'b11;
            end
            else begin
                winner = 'b00;
            end
        end
        
        resetTrigger = reset;

    end

endmodule

数码管显示模块

  1. 模块功能:利用数码管显示比赛数据;

  2. 设计思路:使用$ 8 * 8 $的矩阵显示每个数码管的显示情况,另外设有对每个数码管表示显示的标志,从而动态地去更新。在有一方获胜后,会将不显示分数的数码管动态地闪烁箭头,以此来表示获胜的一方。

  3. 代码:

点击查看代码
`timescale 1ns / 1ps
//参考EGO1的数码管显示模块

module DigitalTubeDriver(   //数码管驱动
    input CLK, 
    input reg [7:0][7:0] dataIn,    //输入数据
    output reg [7:0] LED0,  //输出的LED0,管理前4位显示
    output reg [7:0] LED1,  //输出的LED1,管理后4位显示
    output reg [7:0] LEDBit //LEDBIT,管理每个亮或不亮
    );

    reg [3:0] count;


    wire [7:0] data0;

    initial begin
        LEDBit = 'b00000001;
        count = 'd0;
    end

    // assign LED1 = LED0;

    always @(posedge CLK) begin

        case(dataIn[count]) //检查每种数字或符号对应亮哪些边
            'd0: LED0 = 'b00111111;
            'd1: LED0 = 'b00000110;
            'd2: LED0 = 'b01011011;
            'd3: LED0 = 'b01001111;
            'd4: LED0 = 'b01100110;
            'd5: LED0 = 'b01101101;
            'd6: LED0 = 'b01111101;
            'd7: LED0 = 'b00000111;
            'd8: LED0 = 'b01111111;
            'd9: LED0 = 'b01101111;
            'd21: LED0 = 'b01110000;
            'd22: LED0 = 'b01000110;
            default: LED0 = 'b00000000;
        endcase

        if(count == 'd7) begin
            count = 'd0;
            LEDBit = 'b00000001;
        end
        else if(count == 'd0) begin
            LEDBit = 'b10000000;
            count = 'd1;
        end
        else begin
            count++;
            LEDBit = LEDBit >> 1;
        end
        LED1 = LED0;

    end

endmodule

参考文献

[1] Vivado环境下多个并行的仿真测试文件如何支持单独仿真。

https://blog.csdn.net/CDCL19_220327/article/details/125802252?spm=1001.2014.3001.5502

[2] Vivado里程序固化详细教程。

https://blog.csdn.net/sinat_15674025/article/details/84535754?spm=1001.2014.3001.5502

[3] xilinx vivado 自带仿真工具xsim信号为蓝色Z态的解决办法。

https://blog.csdn.net/Shawge/article/details/107592471?spm=1001.2014.3001.5502

[4] Vivado环境下多个并行的仿真测试文件如何支持单独仿真?

https://blog.csdn.net/CDCL19_220327/article/details/125802252?spm=1001.2014.3001.5502

首页 上一页 2 3 4 5 下一页 尾页 5/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇FPGA按键消抖 下一篇初试高云FPGA

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目