• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

Craps投骰子游戏设计VHDL代码Quartus仿真

08/12 11:05
367
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-240R3152F2602.doc

共1个文件

名称: Craps投骰子游戏设计VHDL代码Quartus仿真

软件:Quartus

语言:VHDL

代码功能:

Craps投骰子游戏

您将要设计和实现的游戏通常被称为Craps。游戏涉及两个骰子,每个骰子的值可以在1到6之间。两个伪随机计数器用于模拟骰子的掷骰。掷骰后,两个计数器的值之和将在2到12的范围内。

游戏规则如下:

1.在掷骰子的第一轮后,如果总和为7或11,则获胜。如果总和为2、3或12(即胡扯),则输家。否则,玩家在第一轮掷骰中获得的总和称为点,他/她必须再次掷骰子。

2.在掷骰子的第二轮或后续掷骰中,如果总和等于该点,则获胜;如果总和等于7,则他/她输。否则,玩家必须再次掷骰,直到他/她最终获胜或失败。

根据游戏规则,我们可以设计数据路径。下面给出的数据路径包括一个加法器,用于将两个计数器输出相加;一个用于存储点的寄存器;一个比较器,用于比较存储在点寄存器中的值和加法器的输出;以及一个测试逻辑,用于确定获胜条件或输。

每个组件都需要使用专用的测试平台分别进行测试。报告中应包含所有带注释的仿真波形。然后,您可以将所有这些组件放在一起以构成完整的数据路径。使用测试平台调试和测试完整的数据路径电路。确保在报告中包括相应的带注释的仿真波形。

接下来,可以将有限状态机设计为系统的控制器。调试和模拟FSM,直到其正常运行。确保在报告中包括FSM仿真波形。

设计和测试数据路径和控制器之后。系统的最终设计仅是控制器和数据路径的集成,如下所示。调试和模拟最终系统,直到您的设计实现所需的功能为止。然后,您准备使用测试平台演示您设计的系统。最终系统也需要带注释的仿真波形。

寄存器中,然后玩家再次掷骰。如果新的总和等于该点,则玩家获胜;如果是7,他/她输了。否则,播放器将再次滚动。如果“胜利”指示灯或“失败”指示灯不亮,则玩家必须再次按下“滚动按钮”才能继续播放。在输赢之后,他/她必须按“重置”才能开始新的游戏。

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

演示视频:

设计文档:

1. 工程文件

2. 程序文件

3. 程序编译

4. RTL图

Datapath内部

5. 仿真图

Testbench

整体testbench

分模块testbench

仿真图

整体仿真图

分模块仿真图

Controller模块

Datapath模块

Datapath子模块

Counter

Adder,加法器

register_4bit

comparator

Test_logic

部分代码展示:

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
ENTITY Craps IS
   PORT (
      clk     : IN STD_LOGIC;--时钟
      ENTER   : IN STD_LOGIC;--ENTER
      RESET   : IN STD_LOGIC;--RESET
      
      count1  : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--计数器输出1
      count2  : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--计数器输出2
      
      WIN     : OUT STD_LOGIC;--赢
      LOSE    : OUT STD_LOGIC--输
   );
END Craps;
ARCHITECTURE behave OF Craps IS
--分频模块
   COMPONENT clk_div IS
      PORT (
         clk     : IN STD_LOGIC;
         clk_out : OUT STD_LOGIC
      );
   END COMPONENT;
   
--Datapath
   COMPONENT Datapath IS
      PORT (
         clk     : IN STD_LOGIC;
         clk2    : IN STD_LOGIC;
         Roll    : IN STD_LOGIC;
         Sp      : IN STD_LOGIC;
         count1  : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
         count2  : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
         D7      : OUT STD_LOGIC;
         D711    : OUT STD_LOGIC;
         D2312   : OUT STD_LOGIC;
         Eq      : OUT STD_LOGIC
      );
   END COMPONENT;
   
--controller
   COMPONENT controller IS
      PORT (
         clk     : IN STD_LOGIC;
         ENTER   : IN STD_LOGIC;
         RESET   : IN STD_LOGIC;
         D7      : IN STD_LOGIC;
         D711    : IN STD_LOGIC;
         D2312   : IN STD_LOGIC;
         Eq      : IN STD_LOGIC;
         Roll    : OUT STD_LOGIC;
         Sp      : OUT STD_LOGIC;
         WIN     : OUT STD_LOGIC;
         LOSE    : OUT STD_LOGIC
      );
   END COMPONENT;
   
   
   SIGNAL D7           : STD_LOGIC;
   SIGNAL D711         : STD_LOGIC;
   SIGNAL D2312        : STD_LOGIC;
   SIGNAL Eq           : STD_LOGIC;
   SIGNAL Roll         : STD_LOGIC;
   SIGNAL Sp           : STD_LOGIC;
   SIGNAL clk_out      : STD_LOGIC;
BEGIN
--分频,产生一个5分频的信号
   i_clk_div : clk_div
      PORT MAP (
         clk      => clk,--时钟
         clk_out  => clk_out--5分频的信号
      );

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=948

  • 2-240R3152F2602.doc
    下载

相关推荐