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

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

软件:Quartus

语言:VHDL

代码功能:

累加器及数码管显示

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

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

1. 工程文件

2. 程序文件

3. 程序编译

4. 管脚分配

时钟接1000Hz左右

5. RTL图

6. 仿真图

整体仿真图

按键模块

累加模块

BCD转换模块

显示模块

设计文档.doc

部分代码展示:

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
   USE ieee.std_logic_unsigned.all;
--累加显示模块
ENTITY accumulator IS
   PORT (
      clk      : IN STD_LOGIC;--时钟
      key_1      : IN STD_LOGIC;--按键1
  key_2      : IN STD_LOGIC;--按键2
  key_3      : IN STD_LOGIC;--按键3
  key_4      : IN STD_LOGIC;--按键4
  key_5      : IN STD_LOGIC;--按键5
  key_6      : IN STD_LOGIC;--按键6
  key_7      : IN STD_LOGIC;--按键7
  
      key_conf  : IN STD_LOGIC;--确认按键
  
      num_in : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);--加数
      sum : OUT STD_LOGIC_VECTOR(15 DOWNTO 0)--累加和
   );
END accumulator;
ARCHITECTURE behave OF accumulator IS
   --定义信号
   SIGNAL data_in : STD_LOGIC_VECTOR(15 DOWNTO 0) := x"0000";--输入加数
   SIGNAL data_sum : STD_LOGIC_VECTOR(15 DOWNTO 0) := x"0000";--累加和
   
BEGIN
   
   PROCESS (clk)
   BEGIN
      IF (clk'EVENT AND clk = '1') THEN
        if(key_1='1')then--按键1
data_in<=x"0001";--输入1
elsif(key_2='1')then--按键2
data_in<=x"0002";--输入2
elsif(key_3='1')then--按键3
data_in<=x"0003";--输入3
elsif(key_4='1')then--按键4
data_in<=x"0004";--输入4
elsif(key_5='1')then--按键5
data_in<=x"0005";--输入5
elsif(key_6='1')then--按键6
data_in<=x"0006";--输入6
elsif(key_7='1')then--按键7
data_in<=x"0007";--输入7 
end if;
      END IF;
   END PROCESS;
   
   PROCESS (clk)
   BEGIN
      IF (clk'EVENT AND clk = '1') THEN
        if(key_conf='1')then--确认按键
data_sum<=data_sum+data_in;--累加
end if;
      END IF;
   END PROCESS;  
   
   num_in<=data_in;
   sum<=data_sum;
   
END behave;
源代码

基于FPGA的累加器及数码管显示VHDL代码Quartus仿真名称:基于FPGA的累加器及数码管显示VHDL代码Quartus仿真软件:Quartus语言:VHDL代码功能:累加器及数码管显示1、可以通过按键输入1~92、数字输入后进行累加,将累加结果显示在数码管FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com演示视频:设计文档:1. 工程文件2. 程序文件3. 程序编译4. 管脚分配时钟接1000Hz左右5. RTL图6.icon-default.png?t=N7T8http://hdlcode.com/index.php?m=home&c=View&a=index&aid=699

基于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 II软件的FPGA六位数码管动态显示电路的VHDL设计代码: ```vhdl library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity six_digit_display is port ( clk : in std_logic; data_in : in std_logic_vector(7 downto 0); segment_out : out std_logic_vector(6 downto 0); digit_out : out std_logic_vector(5 downto 0) ); end entity six_digit_display; architecture behavior of six_digit_display is signal count : integer range 0 to 999999 := 0; signal digit : integer range 0 to 5 := 0; signal data : std_logic_vector(5 downto 0); signal segments : std_logic_vector(6 downto 0); begin process(clk) begin if rising_edge(clk) then count <= count + 1; if count = 1000000 then count <= 0; digit <= digit + 1; if digit = 6 then digit <= 0; end if; case digit is when 0 => data <= data_in(3 downto 0); when 1 => data <= data_in(7 downto 4); when 2 => data <= data_in(11 downto 8); when 3 => data <= data_in(15 downto 12); when 4 => data <= data_in(19 downto 16); when 5 => data <= data_in(23 downto 20); end case; case data is when "000000" => segments <= "1111110"; -- 0 when "000001" => segments <= "0110000"; -- 1 when "000010" => segments <= "1101101"; -- 2 when "000011" => segments <= "1111001"; -- 3 when "000100" => segments <= "0110011"; -- 4 when "000101" => segments <= "1011011"; -- 5 when "000110" => segments <= "1011111"; -- 6 when "000111" => segments <= "1110000"; -- 7 when "001000" => segments <= "1111111"; -- 8 when "001001" => segments <= "1111011"; -- 9 when "001010" => segments <= "1110111"; -- A when "001011" => segments <= "0011111"; -- b when "001100" => segments <= "1001110"; -- C when "001101" => segments <= "0111101"; -- d when "001110" => segments <= "1001111"; -- E when "001111" => segments <= "1000111"; -- F when others => segments <= "XXXXXXX"; -- Invalid input end case; end if; end if; end process; segment_out <= segments; case digit is when 0 => digit_out <= "000001"; when 1 => digit_out <= "000010"; when 2 => digit_out <= "000100"; when 3 => digit_out <= "001000"; when 4 => digit_out <= "010000"; when 5 => digit_out <= "100000"; when others => digit_out <= "XXXXXX"; -- Invalid digit end case; end architecture behavior; ``` 代码包含了一个时钟信号`clk`,一个八位输入信号`data_in`,一个七位输出信号`segment_out`和一个六位输出信号`digit_out`。时钟信号被用于触发时序控制,八位输入信号是要显示的数字,七位输出信号用于控制数码管的段选,六位输出信号用于控制数码管的位选。 在代码,使用了一个计数器`count`和一个数字选择器`digit`,它们被用于生成数码管动态显示的效果。每当计数器计数到1000000时,就会触发一次数码管的显示更新。数字选择器会按照顺序选择要显示的数字,并根据数字的值选择相应的段选信号。最后,将段选信号和位选信号输出到相应的输出引脚上,从而实现数码管的动态显示效果。 注意,代码使用了一个`case`语句来对输入信号进行解码。这里使用了一个简单的标准七段数码管编码,可以根据需要进行修改。此外,还需要根据具体的硬件平台进行引脚分配和约束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值