基于FPGA的累加器及数码管显示VHDL代码Quartus仿真

名称:基于FPGA的累加器及数码管显示VHDL代码Quartus仿真(文末获取)

软件:Quartus

语言:VHDL

代码功能:

累加器及数码管显示

1、可以通过按键输入1~9

2、数字输入后进行累加,将累加结果显示在数码管

1. 工程文件

2. 程序文件

基于FPGA设计的贪吃蛇小游戏实验课程设计报告+quartus9.1工程源码,可以做为你的学习设计参考。 摘 要 本次电子技术基础课程设计了贪吃蛇游戏,实现了用FPGA来驱动VGA显示贪吃蛇游戏。贪吃蛇的游戏规则是玩家使用PS2键盘操控一条蛇上下左右移动不断吞下苹果,吃下一个苹果蛇身增长一节,当蛇头撞到蛇身或障壁时游戏结束。本课程设计采用Verilog HDL语言编写,涉及到VGA显示,PS2键盘操控,状态机等相关知识。 关键词:FPGA;VGA;PS2;贪吃蛇;Verilog HDL 2.1 游戏设计内容及要求 基本要求: ① 利用FPGA开发板、VGA显示器、PS2键盘实现贪吃蛇游戏。 ② 一条蛇可以看成由许多正方形的“小格子”拼凑成,称作节。节是蛇身上最小的单位。蛇的初始长度确定。 ③ 蛇的初始位置及方向由FPGA开发板随机生成,每次游戏预送100分。 ④ 用户使用开发板键盘及PS2键盘可控制蛇头的方向及速度。蛇在屏幕中运动每安全度过1秒加1分,静止状态每过1秒减1分,当游戏达到200分时自动进入游戏下一关,当游戏分值自动减为0时游戏失败终止。 ⑤ 当贪吃蛇触壁则失败。 ⑥ 实现游戏蛇身变换及游戏积分的自动动态显示。 2.2 系统分析 贪吃蛇是经典小游戏,本设计采用VGA显示的方式将游戏展现出来。游戏中玩家通过四个按键控制蛇的身体上下左右移动来吃屏幕中出现的苹果,苹果是随机出现的。当蛇吃的一个苹果时,蛇身体变长一个单位同时会有另一个苹果出现。如果蛇头撞墙或者撞到自己身体,则游戏失败。 所要设计的贪吃蛇游戏基于Cyclone III系列EP3C5E114C8N的FPGA芯片为硬件,采用Verilog HDL语言编写程序。在本设计中,有个8按键,分别是上、下、左、右、复位游戏开始,暂停与继续按键。它们都是输入信号,输出是VGA,在电脑屏幕实现VGA显示字符,游戏画面 第3章 贪吃蛇游戏设计 3.1 VGA显示模块设计 显示器扫描方式分为逐行扫描隔行扫描:逐行扫描是扫描从屏幕左上角一点开始,从左像右逐点扫描,每扫描完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT对电子束进行消隐,每行结束时,用行同步信号进行同步;当扫描完所有的行,形成一帧,用场同步信号进行场同步,并使扫描回到屏幕左上方,同时进行场消隐,开始下一帧。   完成一行扫描的时间称为水平扫描时间,其倒数称为行频率;完成一帧(整屏)扫描的时间称为垂直扫描时间,其倒数称为场频率,即刷新一屏的频率,常见的有60Hz,75Hz等等。标准的VGA显示的场频60Hz,行频31.5KHz。 行场消隐信号:是针对老式显像管的成像扫描电路而
要在Quartus中使用数码管显示数字,需要使用Verilog或VHDL编程语言编写一个模块。以下是一个简单的Verilog模块,可将一个四位数字显示在四个七段数码管上: ```verilog module digit_display( input [3:0] digit, output [6:0] segment, output [3:0] anode ); always @(*) begin case (digit) 4'd0: segment = 7'b1000000; 4'd1: segment = 7'b1111001; 4'd2: segment = 7'b0100100; 4'd3: segment = 7'b0110000; 4'd4: segment = 7'b0011001; 4'd5: segment = 7'b0010010; 4'd6: segment = 7'b0000010; 4'd7: segment = 7'b1111000; 4'd8: segment = 7'b0000000; 4'd9: segment = 7'b0010000; default: segment = 7'b1111111; endcase end assign anode = 4'b1110; endmodule ``` 在这个模块中,输入“digit”是一个四位二进制数,输出“segment”是一个七位二进制数,它指示哪些段应该在每个数码管上点亮。输出“anode”是一个四位二进制数,用于选择哪个数码管应该被点亮。 为了使用此模块,您需要将其实例化到您的设计中,并将其连接到数码管。例如,以下是一个使用这个模块的顶层模块: ```verilog module top_module( input clk, output [3:0] anode, output [27:0] segment, input [3:0] digit ); wire [6:0] segment_0, segment_1, segment_2, segment_3; digit_display display_0( .digit(digit[0]), .segment(segment_0), .anode(anode[0]) ); digit_display display_1( .digit(digit[1]), .segment(segment_1), .anode(anode[1]) ); digit_display display_2( .digit(digit[2]), .segment(segment_2), .anode(anode[2]) ); digit_display display_3( .digit(digit[3]), .segment(segment_3), .anode(anode[3]) ); assign segment = {segment_3, segment_2, segment_1, segment_0}; endmodule ``` 在这个模块中,我们将每个数码管分配给一个数字显示模块实例,并将它们的输出连接到“segment”信号。我们还将“anode”信号连接到每个数字显示模块的“anode”输出。 请注意,此示例仅显示一个数字。如果您要显示多个数字,您需要实例化多个数字显示模块,并将每个模块连接到不同的数字。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值