DE1开发板verilog实现简易乒乓球游戏(有上板照片验证)

开发平台:DE1开发板
软件平台:Quartus II 19.1
实现在乒乓球游戏设计,使用PS2键盘的输入和VGA显示器的输出,在显示器上可以看到两个板子控制小球的反弹。
使用PS2接口的键盘控制板子的运动方向;
通过640*480分辨率的VGA接口显示游戏画面。

下面是工程截图:
在这里插入图片描述

顶层代码如下:


module Pong_Game
#( 
parameter 		TOTAL_COL = 800, 		// Visible Area = 640, Front Porch = 16, Sync Pulse = 96, Back Porch = 48, Total = 800 (640 + 16 + 96 + 48)
parameter 		TOTAL_ROW = 525, 		// Visible Area = 480, Front Porch = 10, Sync Pulse 
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,这是一个基于DE1-SoC开发板Verilog程序,可以实现显示100以内的质数和用2位数码管显示结果,变换频率为2Hz,同时可以通过2个开关或按键分别实现暂停/启动和复位功能。 ``` module prime_number( input clk, input rst, input start, input pause, output reg [1:0] seg // 数码管输出 ); reg [7:0] count = 0; // 计数器,用于计算当前显示的数值 reg [7:0] num = 2; // 当前要判断是否为质数的数 reg [7:0] delay_count = 0; // 计数器,用于实现变换频率为2Hz reg [7:0] prime_count = 0; // 计数器,用于计算已经找到的质数的数量 reg [1:0] prime[25] = '{2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97}; // 100以内的质数 // 判断一个数是否为质数 function integer is_prime (input integer num); integer i; begin if (num == 2) begin is_prime = 1; end else begin is_prime = 1; for (i = 2; i < num; i = i + 1) begin if (num % i == 0) begin is_prime = 0; break; end end end end endfunction always @(posedge clk or posedge rst) begin if (rst == 1) begin count <= 0; num <= 2; delay_count <= 0; prime_count <= 0; seg <= 2'b00; end else if (pause == 0) begin delay_count <= delay_count + 1; if (delay_count == 50000000) begin // 变换频率为2Hz delay_count <= 0; count <= count + 1; if (count == 100) begin count <= 0; end end if (is_prime(num) == 1) begin prime_count <= prime_count + 1; if (prime_count == prime[count]) begin seg <= {1'b0, 1'b0}; // 显示为质数 end else begin seg <= {1'b1, 1'b0}; // 显示为非质数 end end else begin seg <= {1'b1, 1'b0}; // 显示为非质数 end if (num == 100) begin num <= 2; prime_count <= 0; end else begin num <= num + 1; end end end endmodule ``` 在这个程序中,我们定义了一个计数器 `count` 用于计算当前显示的数值,一个变量 `num` 表示当前要判断是否为质数的数,一个计数器 `delay_count` 用于实现变换频率为2Hz,一个计数器 `prime_count` 用于计算已经找到的质数的数量。我们还定义了一个数组 `prime` 存储100以内的所有质数。 在 `always` 块中,我们首先在复位时将所有变量和数码管输出清零。然后在时钟上升沿检测到启动信号时,我们将 `delay_count` 加1,直到 `delay_count` 达到一个阈值时,我们将 `count` 加1,表示要显示下一个数。如果 `count` 等于100,我们将其归零。然后我们判断当前的 `num` 是否为质数,如果是,我们将 `prime_count` 加1,并判断是否等于 `prime[count]`,如果是,我们将数码管显示为质数,否则显示为非质数。如果 `num` 已经到了100,我们将其归零,并将 `prime_count` 归零。最后,如果暂停信号为1,我们不会更新任何变量,直到暂停信号为0。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芯作者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值