基于FPGA乒乓球游戏机Verilog设计_图文






基于 FPGA 乒乓球游戏机 Verilog 设计





通信工程

专业班级

通信 081 班

学生姓名

大彬哥

指导教师

大力会

2013 年

6 月 12 日

EDA 设计基础实验课程论文





本文使用 FPGA 芯片来模拟实际的乒乓球游戏。本设计是基于 Altera 公司的 FPGA Cyclone II 芯片 EP2C5T144C8 的基础上实现,运用 Verilog HDL 语言编程,在 Quartus II 软件上进行编译、仿真,最终在开发板上成功实现下载和调试 关键词:编译 仿真

I

EDA 设计基础实验课程论文

Abstract
This paper uses the FPGA chip to simulate the actual table tennis game. The design is based on Altera company Implementation of FPGA Cyclone based on II chip EP2C5T144C8, using Verilog HDL programming language, compile, simulation in Quartus IIsoftware, finally successfully in the development board download and debug Keywords: Compile;Simulation

II

EDA 设计基础实验课程论文

目录
摘 要........................................................................................................................................ I

Abstract ..................................................................................................................................... II 第 1 章 绪论.............................................................................................................................. 1 1.1 概述............................................................................................................................. 1 1.2 Verilog 语言介绍 .................................................................................................... 1 1.2.1 Verilog 语言的用途 .......................................................................................... 2 1.2.2 Verilog 的历史 .................................................................................................. 2 1.2.3 Verilog 模块 ...................................................................................................... 2 1.3 本文研究的意义......................................................................................................... 3 第 2 章 Verilog 的基本理论 ..................................................................................................... 4 2.1 Verilog 模块的定义 .................................................................................................... 4 2.2 Verilog 模块的组成 ................................................................................................... 4 2.3.1 EP2C8 开发板功能 ........................................................................................... 5 2.3.2 2.3.3 开发板功能描述................................................................................................ 6 EP2C5T144C8 芯片的引脚图.......................................................................... 6 2.3 EP2C5T144C8 芯片简介 ........................................................................................... 5

2.4 Verilog 硬件描述语言的主要能力 ............................................................................ 6 第 3 章 乒乓球游戏机的软件设计.......................................................................................... 8 3.1 乒乓球游戏机系统组成............................................................................................. 8 3.1.2 3.3 功能模块设计.................................................................................................... 8 3.2 发球权控制器............................................................................................................. 9 乒乓球位置控制 .................................................................................................... 10 3.3.1 基于 FPGA 乒乓球比赛游戏机顶层原理图 ................................................ 12

结论.......................................................................................................................................... 13 参考文献.................................................................................................................................. 14 附录.......................................................................................................................................... 15

III

EDA 设计基础实验课程论文

第 1 章 绪论
1.1 概述
随着低复杂度 FPGA 器件成本的不断下降,具有灵活性和及时面市优势的 FPGA 与 ASIC 相比更有竞争性,在数字消费市场上的应用也急剧增加。第一代 Cyclone 系列迄 今发售了 3 百多万片,在全球拥有 3,000 多位客户,对大批量低成本数字消费市场有着 巨大的影响,该市场消纳了三分之一的器件。根据 Gartner Dataquest 调查,在 2004 年光消费电子市场对 FPGA 需求就将达到 3 亿 9 千万美元,预计到 2008 年,将增加到 11 亿 6 千万美元,年复合增长率(CAGR)为 31.9%。 同时,Cyclone II 器件系列也在电信、计算机外设、工业和汽车市场上获得了巨 大的进步。Cyclone II 器件包含了许多新的特性,如嵌入存储器、嵌入乘法器、PLL 和低成本的封装,这些都为诸如视频显示、数字电视(DTV)、机顶盒(STB)、DVD 播放器、 DSL 调制解调器、家用网关和中低端路由器等批量应用进行了优化。 成本优化的架构 Cyclone II 器件采用 TSMC90nm 低 K 绝缘材料工艺技术,这种技术结合 Altera 低 成本的设计方式,使之能够在更低的成本下制造出更大容量的器件。这种新的器件比第 一代 Cyclone 产品具有两倍多的 I/O 引脚,且对可编程逻辑,存储块和其它特性进行了 最优的组合,具有许多新的增强特性。

1.2 Verilog 语言介绍
Verilog HDL 是一种硬件描述语言(HDL:Hardware Discription Language) ,是一 种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻 辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。 Verilog HDL 和 VHDL 是目前 世界上最流行的两种硬件描述语言,都是在 20 世纪 80 年代中期开发出来的。前者由 Gateway Design Automation 公司(该公司于 1989 年被 Cadence 公司收购)开发。两 种 HDL 均为 IEEE 标准。 Verilog HDL 是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计 层次的数字系统建模。 被建模的数字系统对象的复杂性可以介于简单的门和完整的电子 数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。 Verilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、 设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。 所有这些都 使用同一种建模语言。此外,Verilog HDL 语言提供了编程语言接口,通过该接口可以 在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。
1

EDA 设计基础实验课程论文

Verilog HDL 语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿 真语义。因此,用这种语言编写的模型能够使用 Verilog 仿真器进行验证。语言从 C 编程语言中继承了多种操作符和结构。Verilog HDL 提供了扩展的建模能力,其中许多 扩展最初很难理解。但是,Verilog HDL 语言的核心子集非常易于学习和使用,这对大 多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯片到完整 的电子系统进行描述。

1.2.1 Verilog 语言的用途
Verilog HDL 就是在用途最广泛的 C 语言的基础上发展起来的一种硬件描述语言, 它是由 GDA(Gateway Design Automation)公司的 PhilMoorby 在 1983 年末首创的,最 初只设计了一个仿真与验证工具,之后又陆续开发了相关的故障模拟与时序分析工具。 1985 年 Moorby 推出它的第三个商用仿真器 Verilog-XL,获得了巨大的成功,从而使得 Verilog HDL 迅速得到推广应用。 1989 年 CADENCE 公司收购了 GDA 公司, 使得 VerilogHDL 成为了该公司的独家专利。1990 年 CADENCE 公司公开发表了 Verilog HDL,并成立 LVI 组织以促进 Verilog HDL 成为 IEEE 标准,即 IEEE Standard 1364-1995. Verilog HDL 的最大特点就是易学易用,如果有 C 语言的编程经验,可以在一个较 短的时间内很快的学习和掌握,因而可以把 Verilog HDL 内容安排在与 ASIC 设计等相 关课程内部进行讲授,由于 HDL 语言本身是专门面向硬件与系统设计的,这样的安排可 以使学习者同时获得设计实际电路的经验。与之相比,VHDL 的学习要困难一些。但 Verilog HDL 较自由的语法,也容易造成初学者犯一些错误,这一点要注意。

1.2.2 Verilog 的历史
Verilog HDL 语言最初是于 1983 年由 Gateway Design Automation 公司为其模拟 器产品开发的硬件建模语言。那时它只是一种专用语言。由于他们的模拟、仿真器产品 的广泛使用,Verilog HDL 作为一种便于使用且实用的语言逐渐为众多设计者所接受。 在一次努力增加语言普及性的活动中,Verilog HDL 语言于 1990 年被推向公众领域。 Open Verilog International (OVI)是促进 Verilog 发展的国际性组织。1992 年, OVI 决定致力于推广 Verilog OVI 标准成为 IEEE 标准。 这一努力最后获得成功, Verilog 语言于 1995 年成为 IEEE 标准,称为 IEEE Std 1364-1995。

1.2.3 Verilog 模块
模块是 Verilog 的基本描述单位,用于描述某个设计的功能或结构及其与其他模块通信的外部 端口。一个设计的结构可使用开关级原语、门级原语和用户定义的原语方式描述; 设计的数据流行 为使用连续赋值语句进行描述; 时序行为使用过程结构描述。一个模块可以在另一个模块中调用。

2

EDA 设计基础实验课程论文

1.3

本文研究的意义
通过乒乓球游戏机的开发研究更好的了解使用 FPGA 芯片, ,运用 Verilog HDL 语

言编程,使自己在理论上和实验室条件下达到了比较高的水平。

3

EDA 设计基础实验课程论文

第 2 章 Verilog 的基本理论
2.1 Verilog 模块的定义
末块的定义从关键字 module 开始,到关键字 endmodule 结束,每条 Verilog HDL 语句以“; ”做为结束(块语句、编译向导、endmodule 等少数除外) 。

2.2 Verilog 模块的组成
一个完整的 Verilog 模块由以下五个部分组成: 1. 模块定义行:module module_name (port_list); 2. 说明部分用于定义不同的项,例如模块描述中使用的寄存器和参数。语句定义 设计的功能和结构。 说明部分和语句可以散布在模块中的任何地方; 但是变量、 寄存器、 线网和参数等的说明部分必须在使用前出现。 为了使模块描述清晰和具有良好的可读性, 最好将所有的说明部分放在语句前。 说明部分包括: 寄存器,线网,参数:reg, wire, parameter 端口类型说明行:input, output, inout 函数、任务:function, task, 等 3. 描述体部分:这是一个模块最重要的部分,在这里描述模块的行为和功能,子 模块的调用和连接,逻辑门的调用,用户自定义部件的调用,初始态赋值,always 块, 连续赋值语句等等。 4. 结束行,以 endmodule 结束,注意后面没有分号了。 以下为建模一个半加器电路的模块的简单实例。 module HalfAdder (A, B, Sum, Carry); input A, B; output Sum, Carry; assign #2 Sum = A ^ B; assign #3 Carry = A & B; endmodule 模块的名字是 HalfAdder。 模块有 4 个端口: 两个输入端口 A 和 B,两个输出 端口 Sum 和 Carry。由于没有定义端口的位数, 所有端口大小都为 1 位;同时, 由于没 有各端口的数据类型说明, 这四个端口都是线网数据类型。 模块包含两条描述半加器数据流行为的连续赋值语句。从这种意义上讲,这些 语句在模块中出现的顺序无关紧要,这些语句是并发的。每条语句的执行顺序依赖于发
4

EDA 设计基础实验课程论文

生在变量 A 和 B 上的事件。 在模块中,可用下述方式描述一个设计: 1) 数据流方式; 2) 行为方式; 3) 结构方式; 4) 上述描述方式的混合。

2.3 EP2C5T144C8 芯片简介
EP2C5T144C8-FPGA 开发板(以下简称 EP2C5 开发板)采用 Altera 公司推出的 CYCLONE Ⅱ系列芯片 EP2C5T144C8 芯片作为核心处理器进行设计,CYCLONE Ⅱ系列芯片 可以说是目前市场上性价比较高的芯片,比第一代的 EP1C6 或者 EP1C12 等芯片设计上、 内部的逻辑资源上都有很大的改进,同时价格也可以被广大客户接受;虽然 Altera 推出 了 CYCLONE III 甚至于 IV 代的芯片,但是目前市场上价格走势偏高,尤其是针对广大初 学者的定位,目前还不是适合采用。

2.3.1 EP2C8 开发板功能
① 板载 EP2C8Q208C8 - FPGA 核心芯片;② 板载 SDRAM -K4S641632-UC60 或 HY57V641620F TP-7,两款 SDRAM 兼容,容量 64Mbit,引脚独立,用来做 NIOS II 实验 的程序运行空间;③ 50MHz 有源晶体,提供系统工作主时钟,通过 22Ω ;匹配电阻连 接只 CLK0 和 CLK4,均可以作为系统时钟使用;④ 5v 电源输入接口,外经 5mm,内径 3.5mm 内正外负; ⑤ 电源开关,正视开发板,向上接通电源;⑥ R_C 按键,FPGA 的 重新配置按键,按下之后,系统重新从 EPCS4 配置芯片中读取程序然后作;⑦ Rst 按 键,这个用户 IO,可以当做用户输入按键使用,也可以分配为系统的复位按键;⑧ IN5822 二极管 防止电源反接,高速肖特基二极管;⑨ 电源工作指示 D2;⑩ 25x2 双 排直插 2.54 间距用户接口; 1 个用户 LED- D4, 引脚独立, 没有与接口板进行复用; 下 载指示灯 D1,平时熄灭,下载的时候会亮,按下 R_C 按键的时 候也会亮; JTAG 下载 接口,对应下载的文件是 SOF 文间,速度很快,JTAG 将程序直接下载到 FPGA 中,但是 掉电程序丢失,平时学习推荐使用 JTAG 方式,最后固化程序的时候再通过 ASP 方式将 程序下载到配置芯片中即可; ASP 下载接口,对应下载的是 POF 文件,速度相对 JTAG 比较慢,而且需要重新上电并且拔掉下载线,才能工作,操作相对麻烦,不推荐学习的 时候使用,最后需要断电操作的情况下再使用 ASP 下载模式; 4 线制 RS232 串口通信 接口以及 SRAM 片选跳线选择; 当与接口板连接时, 改引脚与复用; 25x2 双排直插 2.54 间距用户接口; 螺丝铜柱支撑; 1085-3.3v 稳压芯片;1117-1.2v 稳压芯片,提供 FPGA 核电压; SRAM 芯片 IS61LV25616AL 256kx16b,(选配件);AT24C02- I2C 存储
5

EDA 设计基础实验课程论文

器件 配置芯片 EPCS4(4Mb)。

2.3.2 开发板功能描述
① VGA 接口 - 利用显示器实现显示图片、文字; ② PS2 接口 - 可以接入 PS2 键盘; ③ 串口通信接口 - 做串口 UART 通讯实验; ④ AD 输入调节电位器 ;⑤ 设 置引脚、GND、VCC 扩展引脚; ⑥ 外设资源接口双排孔接入; ⑦ 外设资源接口双排 针接入; ⑧ DS18B20 温度传感器; ⑨ LCD1602 液晶接口; ⑩ 主板 5v、3.3v 电源 滤波电路; 主板与接口板双排针接口; TL431 2.5v 基准电压电路; PCF8563 时钟电路; DAC-TLC5615 8 位单通道 DA 输出; 蜂鸣器电路; ADC-TLC549 8 位单通道输入;8 位 数码管显示; 4x4 矩阵键盘输入; 8 路 LED 输出指示; 红外通讯接口; 4 位拨码 开关输入; 主板与接口板双排阵接口; 4 位独立按键输入。

2.3.3 EP2C5T144C8 芯片的引脚图

2.4 Verilog 硬件描述语言的主要能力
基本逻辑门,例如 and、or 和 nand 等都内置在语言中。 · 用户定义原语( UDP)创建的灵活性。用户定义的原语既可以是组合逻辑原语, 也可以是时序逻辑原语。 · 开关级基本结构模型,例如 pmos 和 nmos 等也被内置在语言中。 · 提供显式语言结构指定设计中的端口到端口的时延及路径时延和设计的时序检 查。
6

EDA 设计基础实验课程论文

· 可采用三种不同方式或混合方式对设计建模。这些方式包括:行为描述方式— 使用过程化结构建模;数据流方式—使用连续赋值语句方式建模;结构化方式—使用门 和模块实例语句描述建模。 · Verilog HDL 中有两类数据类型:线网数据类型和寄存器数据类型。线网类型 表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。 · 能够描述层次设计,可使用模块实例结构描述任何层次。 · 设计的规模可以是任意的;语言不对设计的规模(大小)施加任何限制。 · Verilog HDL 不再是某些公司的专有语言而是 I E E E 标准。 · 人和机器都可阅读 Verilog 语言,因此它可作为 E D A 的工具和设计者之间的 交互语言。 · Verilog HDL 语言的描述能力能够通过使用编程语言接口( P L I)机制进一 步扩展。P L I 是允许外部函数访问 Verilog 模块内信息、允许设计者与模拟器交互的 例程集合。 · 设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级( RT L)到 算法级,包括进程和队列级。 · 能够使用内置开关级原语在开关级对设计完整建模。 · 同一语言可用于生成模拟激励和指定测试的验证约束条件,例如输入值的指定。 · Verilog HDL 能够监控模拟验证的执行,即模拟验证执行过程中设计的值能够 被监控和显示。这些值也能够用于与期望值比较,在不匹配的情况下,打印报告消息。 · 在行为级描述中, Verilog HDL 不仅能够在 RT L 级上进行设计描述,而且能 够在体系结构级描述及其算 法级行为上进行设计描述。 · 能够使用门和模块实例化语句在结构级进行结构描述。 · 在 Verilog HDL 的混合方式建模能力,即在一个设计中每个模块均可以在不同 设计层次上建模。 · Verilog HDL 还具有内置逻辑函数,例如&(按位与)和|(按位或) 。 · 对高级编程语言结构,例如条件语句、情况语句和循环语句,语言中都可以使 用。 · 可以显式地对并发和定时进行建模。 · 提供强有力的文件读写能力。 · 语言在特定情况下是非确定性的,即在不同的模拟器上模型可以产生不同的结 果;例如,事件队列上的事件顺序在标准中没有定义。

7

EDA 设计基础实验课程论文

第 3 章 乒乓球游戏机的软件设计
3.1 乒乓球游戏机系统组成
瓶乓球比赛游戏机的组成如图 1 所示。比赛规则约定:五局三胜; 1 分一局; 裁判 发出比赛开始信号,触发 FPGA 内部随机数发生器模块产生首次发球权方;比赛进行中, 选手连续两次获得发球权后, 发球权交予对方,如未获发球权方发球, 裁判端犯规音响 电路鸣响;6 个 LED 排列成行模拟乒乓球台(因为我的开发板上只有 6 个 LED 灯,比赛 开始时候中间两个灯亮,如果有条件的话有 10 来个灯最好了); 点亮的 LED 模拟乒乓 球,受 FPGA 控制从左到右或从右到左移动; 比赛选手通过按钮输入模拟击球信号, 实 现 LED 移位方向的控制; 若发亮的 LED 运动在球台中点至对方终点之间时,对方未能 及时按下击球按钮使其向相反方向移动, 即失去一分。

3.1.2 功能模块设计
图 1 中,基于 FPGA 设计的控制端为整个系统的核心,其内部主要由简易随机数发 生器、 发球权控制器、 乒乓球位置控制器、 甲乙方计分控制器、 犯规音响控制器等 模块组成。整个控制端采用模块化设计,先用 Verilog 语言编写功能模块,然后用顶层 原理图将各功能模块连接起来。设计的难点在于协调各模块工作,严格遵守各信号间时 序关系。本系统采用 50MHz 系统时钟。 简易随机数发生器比赛首次发球权由随机数发生器产生的数据决定,其随机性要求 不严, 因此,采用非常简单的模式产生,即一旦 FPGA 上电, 系统时钟百分频产生一方 波信号 square,当裁判闭合开始比赛开关产生 start 信号上升沿时,读取此时 squar e 信号值作为随机数发生器输出 data_rand。模块仿真如图 2 所示, 结果满足设计要求。
8

EDA 设计基础实验课程论文

此模块设计时保证了 square 信号周期应远大于 start 信号上升沿建立时间, 保证随 机数据的正确读取。

3.2

发球权控制器
发球权控制器的控制过程为: 如果按下复位按钮,发球权数码管显示 8, 否则, 开

始比赛开关闭合时, 显示随机数发生器的值( 0 或 1, 0 代表甲方、 1 代表乙方) 。 而在比赛中,为遵守发球权交换规则, 设计甲乙双方计分器总和信号 sum 是不为 0 的偶 数时(即计分总次低位变化时) , 发球权数码管显示由 0 变为 1 或由 1 变为 0。此模块 设计中, 发球权数码管的信号控制受多个时钟的控制,即开始比赛开关 start 和计分 值 sum[1]信号,将两个信号组合成一个时钟信号, 并统一两个时钟的触发沿。因此最佳 时钟触发方式如图 3 所示的 qq_en 信号。为满足这种时序要求, 借助计分总和次低位 sum_1 信号和启动信号 start 设计 qq_en 信号。

9

EDA 设计基础实验课程论文

3.3

乒乓球位置控制
乒乓球位置控制、 甲乙计分、 犯规音响控制乒乓球位置控制电路为 FPGA 控制端

的核心, 依据比赛规则,采用了 Mealy 型状态机[ 10]来实现,大大降低了设计难度。状 态机共定义了 7 个状态, 各状态定义如表 1 所示,状态转换如图 5 所示, 转换条件如 表 2 所示,具体程序如下。

10

EDA 设计基础实验课程论文

11

EDA 设计基础实验课程论文

3.3.1

基于 FPGA 乒乓球比赛游戏机顶层原理图

12

EDA 设计基础实验课程论文

结论
经过这次对乒乓球游戏机系统的设计,让我对 EDA 设计有了更进一步的认识,同时 也对 EDA 这门课程游客更深入的了解。 这次设计让我了解了关于乒乓球游戏机的原理课 设计理念,要设计一个电路要先进行软件仿真再进行实际的电路制作。通过这次设计让 我收获不小。这次的课程设计终于顺利完成了,也解决了设计中遇见的一些问题。这次 设计让我受益匪浅。 对软件运用更加的熟练。 在摸索该如何设计程序使之实现的过程中, 培养并锻炼了我的设计思维,增加了实际操作经验,锻炼了能力,总的来说这次收获了 很多,基本能够学以致用。 根据所学课程,数字电子技术、模拟电子技术、Verilog、EDA 等所学知识的应用 在设计过程中都得到了相应巩固,我们对本专业的了解也更深了一层。经过了这次自己 实践动手的设计,自己的分析能力得到了提高,动手能力也有很大进步,从中也收获了 很多经验,希望今后类似这样课程设计、类似这样的锻炼机会能更多些。我想在今后的 实践过程中我会有更大的进步,也会做的越来越好。

13

EDA 设计基础实验课程论文

参考文献
[1] 侯建军,SOPC 技术基础教程,清华大学出版社,2008-05 [2] 童诗白. 华成英. 模拟电子技术基础[M]. 高等教育出版社,2006-5 [3] 邱关源. 电路. 高等教育出版社[M]. [4] 王新梅. 肖国镇. 纠错码——原理与方法[M]. 西安电子科技大学出版 [5] 曹昕燕. 周凤臣. EDA 技术实验与课程设计[M]. 清华大学出版社,2006-5 [6]王金明 数字系统设计与 Verilog HDL [M] 电子工业出版社,2009-1

14

EDA 设计基础实验课程论文

附录
pp_en 信号产生模块如下: module pp_en(clk,start,sum_1,pp_en,cnt); input clk; input start; //裁判启动信号 input sum_1; //总局数 sum 次低位 sum[1] output pp_en; output[4:0] cnt; //pp_en 信号个数 //---------------------------------------------------reg sum_1_a,sum_1_b; reg start_a,start_b; reg[4:0] cnt_r; always @(posedge clk) begin start_a <= start; start_b <= start_a; sum_1_a <= sum_1; sum_1_b <= sum_1_a; end //---------------------------------------------------always @(posedge clk) begin if(pp_en) cnt_r <= cnt_r+4'b1; else cnt_r <= cnt_r; end //---------------------------------------------------assign cnt = cnt_r; assign pp_en = (start_a^start_b) | (sum_1_a^sum_1_b); endmodule

根据 pp_en 信号和随机数 data_rand 控制甲乙球权模块: module pp_possession(clk,reset,data_rand,pp_en,cnt,led_pose); input clk; input reset; input data_rand; input pp_en; input[4:0] cnt; output[3:0] led_pose; //甲乙球权输出,0 代表甲,1 代表乙。
15

EDA 设计基础实验课程论文

//--------------------------------------------------reg[3:0] led_pose_r; always @(posedge clk or negedge reset) begin if(!reset) led_pose_r <= 4'd8; else if(pp_en) begin if(cnt == 5'b1) led_pose_r <= {3'b0,data_rand}; else led_pose_r <= !led_pose_r; end else led_pose_r <= led_pose_r; end assign led_pose = led_pose_r; endmodule 乒乓球游戏机核心控制模块: module led_con(clk_1s,reset,start,key_a,key_b,led_pose,sum,score_a,score_b,speaker ,led); input clk_1s; input reset; input start; input key_a; input key_b; input led_pose; output[4:0] sum; output[3:0] score_a; output[3:0] score_b; output[5:0] led; output speaker; reg speaker; //-------------------------------------------------------------reg[5:0] led_move; reg[3:0] score_a_r; reg[3:0] score_b_r; reg[6:0] state; parameter[6:0] s0 = 7'b0000001, s1 = 7'b0000010, s2 = 7'b0000100, s3 = 7'b0001000,
16

EDA 设计基础实验课程论文

s4 = 7'b0010000, s5 = 7'b0100000, s6 = 7'b1000000; always @(posedge clk_1s or negedge reset) begin if(!reset) state <= s0; else if(!start) begin case(state) s0: begin speaker <= 1; if(score_a_r == 4'd11 || score_b_r == 4'd11) begin score_a_r <= 4'b0; score_b_r <= 4'b0; end else if(!led_pose) begin led_move <= 6'b011111; state <= s1; end else if(led_pose) begin led_move <= 6'b111110; state <= s4; end end s1: begin if(!key_a) begin led_move <= {led_move[0],led_move[5:1]}; state <= s2; end else if(!key_b) begin speaker <= 0; state <= s0; end else state <= s1; end
17

EDA 设计基础实验课程论文

s2: begin if((led_move[2] == 0 || led_move[1] == 0 || led_move[0] == 0) && !key_b) state <= s6; else if(((led_move[2] == 0 || led_move[1] == 0) && key_b) ||(led_move[5] == 0 || led_move[4] == 0 || led_move[3] == 0)) state <= s3; else begin score_a_r <= score_a_r+1; state <= s0; end end s3: begin led_move <= {led_move[0],led_move[5:1]}; state <= s2; end s4: begin if(!key_b) begin led_move <= {led_move[4:0],led_move[5]}; state <= s5; end else if(!key_a) begin speaker <= 0; state <= s0; end else state <= s4; end s5: begin if((led_move[3] == 0 || led_move[4] == 0 || led_move[5] == 0) && !key_a) state <= s3; else if(((led_move[3] == 0 || led_move[4] == 0) && key_a) ||(led_move[0] == 0 || led_move[1] == 0 || led_move[2] == 0)) state <= s6; else begin score_b_r <= score_b_r+1; state <= s0; end end
18

EDA 设计基础实验课程论文

s6: begin led_move <= {led_move[4:0],led_move[5]}; state <= s5; end default:state <= s0; endcase end else begin led_move <= 6'b110011; speaker <= 1; end end assign score_a = score_a_r; assign score_b = score_b_r; assign led = led_move; assign sum = score_a_r+score_b_r; endmodule

19


相关文档

基于FPGA乒乓球比赛游戏机的设计
基于FPGA_乒乓球比赛游戏机_的设计
基于FPGA的乒乓球游戏设计
基于FPGA乒乓游戏机的设计
基于FPGA的乒乓球游戏机控制器设计
基于FPGA的乒乓球游戏机
基于FPGA的乒乓球游戏参考设计
用FPGA设计乒乓球游戏
基于verilog 乒乓球游戏机课程设计报告
电脑版