游戏的计分模块(score_ctrl.v)完成的任务是:蛇每吃掉一个苹果,计数器增加1,直到计数到100结束。由于计数器里面的数据是二进制的,无法直接输出到数码管显示,还需要进行二进制转十进制。
我们在代码里面直接用除法取余的方法将分数的个位、十位和百位分离出来:
assign bcd_data[3:0] = bin_data%10; //算出十进制数的个位 assign bcd_data[7:4] = (bin_data/10)%10; //算出十进制数的十位 assign bcd_data[11:8] = (bin_data/100)%10; //算出十进制数的百位
然后在顶层模块,将分数的个位、十位和百位分配到对应的数码管上进行显示:
游戏的计分模块score_ctrl.v完整代码如下:
//数码管计分模块 module score_ctrl ( input clk,//25MHz input rst_n,//系统复位 input add_cube,//蛇吃掉一个苹果,该信号为高 input [1:0]game_status,//游戏状态 output [11:0]bcd_data//计分 ); reg [7:0]bin_data;//二进制计分寄存器,最小值0000 0000 ,最大值0110 0100(也就是十进制100) localparam RESTART = 2'b00;//游戏的第1个状态是重启 always@(posedge clk or negedge rst_n) begin if(!rst_n) //复位时分数归零 bin_data <= 0; else if(game_status==RESTART) //重启状态下分数归零 bin_data <= 0; else if(add_cube==1 && bin_data < 8'd100) //当分数不超过100的时候,蛇每吃掉一个苹果计数器就+1 bin_data <= bin_data + 1; else bin_data <= bin_data; end assign bcd_data[3:0] = bin_data%10; //算出十进制数的个位 assign bcd_data[7:4] = (bin_data/10)%10; //算出十进制数的十位 assign bcd_data[11:8] = (bin_data/100)%10; //算出十进制数的百位 endmodule
当然,使用除法和取余的代码看起来非常简洁,但是很占用FPGA 的逻辑资源,这里我用的是友晶科技DE10-Standard开发板,逻辑资源充足(有110K LEs), 如果大家是移植到其他资源有限的开发板上,可以选择二进制转BCD码的算法(加3移位法)以节省更多资源。
再或者,直接对计分bin_data进行BCD码计数:
if(add_cube) begin if(bin_data[3:0] < 9) bin_data[3:0] <= bin_data[3:0] + 1; else begin bin_data[3:0] <= 0; if(bin_data[7:4] < 9) bin_data[7:4] <= bin_data[7:4] + 1; else begin bin_data[7:4] <= 0; if(bin_data[11:8] < 9) bin_data[11:8] <= bin_data[11:8] + 1; else begin bin_data[11:8] <= 0; end end end end
友晶科技FPGA开发板实现贪吃蛇游戏(九)——蛇身控制 DE10-STANDARD、DE1-SOC、DE2-115 - Doreen的FPGA自留地 - 博客园 (cnblogs.com)
友晶科技FPGA开发板实现贪吃蛇游戏(八)——游戏控制之状态机设计 DE10-STANDARD、DE1-SOC、DE2-115 - Doreen的FPGA自留地 - 博客园 (cnblogs.com)
友晶科技FPGA开发板实现贪吃蛇游戏(七)食物(苹果)的产生 DE10-STANDARD、DE1-SOC、DE2-115 - Doreen的FPGA自留地 - 博客园 (cnblogs.com)
友晶科技FPGA开发板实现贪吃蛇游戏(六)VGA 驱动模块色块显示 DE10-STANDARD、DE1-SOC、DE2-115 - Doreen的FPGA自留地 - 博客园 (cnblogs.com)
友晶科技FPGA开发板实现贪吃蛇游戏(五)VGA 驱动模块字符显示 DE10-STANDARD、DE1-SOC、DE2-115 - Doreen的FPGA自留地 - 博客园 (cnblogs.com)
友晶科技FPGA开发板实现贪吃蛇游戏(四)VGA 驱动模块图片显示 DE10-STANDARD、DE1-SOC、DE2-115 - Doreen的FPGA自留地 - 博客园 (cnblogs.com)
友晶科技FPGA开发板实现贪吃蛇游戏(三)记分模块 DE10-STANDARD、DE1-SOC、DE2-115 - Doreen的FPGA自留地 - 博客园 (cnblogs.com)
友晶科技FPGA开发板实现贪吃蛇游戏(二)数码管驱动模块 DE10-STANDARD、DE1-SOC、DE2-115 - Doreen的FPGA自留地 - 博客园 (cnblogs.com)
友晶科技FPGA开发板实现贪吃蛇游戏(一)——整体描述 DE10-Standard、DE1-SOC、DE2-115 - Doreen的FPGA自留地 - 博客园 (cnblogs.com)