名称: 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
367