EDA技术课程设计报告乒乓球游戏电路设计_第1页
EDA技术课程设计报告乒乓球游戏电路设计_第2页
EDA技术课程设计报告乒乓球游戏电路设计_第3页
EDA技术课程设计报告乒乓球游戏电路设计_第4页
EDA技术课程设计报告乒乓球游戏电路设计_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、eda乒乓球游戏机设计 学 院计信学院专 业信息安全 学 生 姓 名xxx学 号0000000000 设计题目乒乓球游戏电路设计 内容及要求:内容及要求: 设计乒乓球游戏电路,用按键与 led 表示输入与输出。 (1)初始时,16 个 led 最边上的点亮,按下键表示发球,亮的灯依次向对方移动; 当到达另一边倒数第 4 个灯时表示乒乓球触到桌面反弹;对方必须在反弹后且靠近 己方的最后一个灯亮起来前按下按键表示接球,否则输球;接球后灯亮的规则、对 方接球的规则同发球; (2)双方靠近自己的 4 个灯亮邓间隔 0.4s,其余灯亮灯间隔 0.8s; (3)输球或者犯规,本局游戏结束; (4)乒乓球比

2、赛规则计分,显示于数码管; (5)工作时钟 100hz 即可; (6)完成流程:设计规范文档、底层模块设计与代码输入及其功能仿真、约束与 综合、布局布线、下载验证等。 进度安排:进度安排: 第 1-2 天:讲解题目,准备参考资料,检查、调试实验软硬件,进入设计环境,开 始设计方案和验证方案的准备; 第 3-4 天:完成设计与验证方案,经指导老师验收后进入模块电路设计; 第 5-7 天:完成模块电路设计,进行代码输入和相应的功能仿真; 第 8-9 天:约束设计,综合、下载,实现设计目标,并指导老师验收设计;整理设 计资料,撰写报告、准备答辩; 第 10 天:验收合格后进行答辩。 指导教师(签字)

3、: 年 月 日 主管院长(签字): 年 月 日 摘 要 乒乓球游戏电路是一个对输入信号、输入时机正确与否的判断,并用 16 个 led 表 示乒乓球球台和乒乓球,用数码管模拟显示器,显示比赛局数比分和每局玩家得分的 电路。电路并不复杂,整体分为两个模块:一,游戏主模块;二,计分显示模块。主 模块完成用 led 表示球和球台并对玩家是否击球、是否犯规做出判断,并且将两位玩 家的游戏得分进行输出。计分显示模块完成对局数比分的运算,显示局数比分和每局 游戏玩家的得分。实现中采用 verilog hdl 描述、modelsim 进行功能仿真、quartus ii 进行逻辑综合和适配下载,选用 cycl

4、one 系列 ep1c6q240c8 型号的芯片上实现。在 此过程中,完整地建立了测试平台,完成了功能和时序仿真,从而保证了设计的功能 与时序的正确性。 关键词关键词 verilog hdl;fpga;乒乓球游戏 目 录 摘 要.ii 引 言.1 1 总体电路结构设计.2 1.1 电路功能与性能.2 1.2 主要设计概述.2 1.3 电路接口.3 1.4 电路功能框图.4 1.5 验证方案.4 2 模块设计.5 2.1 游戏主模块设计 .5 2.2 计分显示模块设计 .6 3 电路约束与综合.8 3.1 时序约束 .8 3.2 引脚锁定约束 .11 3.3 电路综合报告.13 4 设计仿真与测

5、试.14 4.1 仿真与测试的功能列表.14 4.2 仿真平台构建和仿真结果 .15 4.2.1 电路功能仿真结果.15 4.2.2 电路后仿真结果.16 结论.17 参考文献.18 附录 a 设计源代码.19 附录 b 仿真代码.27 附录 c fpga 设计中的 hdl 编码风格.30 引 言 fpga 是英文 field programmable gate array 的缩写,即现场可编程门阵列,它 是作为专用集成电路 asic(application specific integrated circuit)领域中的一 种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件

6、门电路 数有限的缺点。fpga 能完成任何数字器件的功能,上至高性能 cpu,下至简单的 74 系 列电路,都可以用 fpga 来实现。可编程逻辑器件 fpga 以其开发周期短、成本低、功 耗低、可靠性高等优势,以及开发测试技术的日益普及,广泛应用于通信、航空、医 疗等领域,近年来在消费电子领域中的应用也日渐增加。在此设计了一个简易的乒乓 球游戏用于对 fpga 设计进行了解、学习。游戏设计过程并不复杂,采用了 verilog hdl 语言编程实现,在 modelsim se 环境下进行仿真,在 quartus集成环境下进行了 约束、综合、布局布线、下载过程。结果表明:在设定的比赛规则(7 局

7、 4 胜制,每局 比分最多记录到 15)下,游戏机运行正常。 由于条件所限无法在现场进行验证,本设计采用开发板上按键开关的 0/1 变化替代 玩家的输入信号,按键替代全局复位等来实现验证。 1 总体电路结构设计 1.1 电路功能与性能 乒乓球游戏电路,用按键与 led 表示输入与输出。 比赛规则约定:七局四胜;11 分一局;比赛进行, 16 个 led 排列成行模拟乒乓球台; 点亮的 led 模拟乒乓球,受 fpga 控制从左到右或从右到左移动;比赛选手通过按钮输 入模拟击球信号,实现 led 移位方向的控制;若发亮的 led 运动在球台倒数第四个至 对方终点之间时,对方未能及时按下击球按钮使

8、其向相反方向移动,即失去一分。 (1)初始时,16 个 led 最边上的点亮,按下键表示发球,亮的灯依次向对方移动; 移位计数器控制。 (2)当到达另一边倒数第 4 个灯时表示乒乓球触到桌面反弹;对方必须在反弹后且 靠近己方的最后一个灯亮起来前按下按键表示接球,否则输球; (3)接球后灯亮的规则、对方接球的规则同发球; (4)双方靠近自己的 4 个灯亮的间隔 0.4s,其余灯亮的间隔 0.8s;计数器来实现时 钟控制 (5)输球或者犯规,即失去一分;自动显示于数码管(共阴) (6)乒乓球比赛规则计分,显示于数码管; (7)工作时钟 100hz; 1.2 主要设计概述 此次设计中采用将设计分块的

9、方法,用不同的模块实现不同的功能,然后将各个 模块连接起来。可将设计分为两个模块。一个是对输入信号进行处理,设定游戏规则, 输出得分。另一个是对得分进行处理,得出比分,再转化到数码管上进行显示。 1.3 电路接口 电路接口主要分为 3 部分,输入信号:玩家 1,玩家 2,复位键,输入时钟。中间 变量信号:玩家 1 得分、玩家 1 局数得分、玩家 2 得分、玩家 2 局数得分、数码管转 换变量。输出信号:数码管选择信号 sel,数码管显示。具体见下表。 表 1.3 接口信号表 名称 io 属 性 描述备注 clkin输入时钟,100hz 频率全局时钟 resetin全局复位键0 有效 play1

10、in玩家 1 击球信号按键按下时有效 play2in玩家 2 击球信号按键按下时有效 light15:0inout16 位 led 模拟球台和乒乓球高电平有效 sel2:0out数码管选择控制 8 位数码管循环 led6:0out7 段数码管显示共阴 1.4 电路功能框图 依照功能,将电路分为 2 个功能模块:主功能模块,处理输入信号,完成球台及球 的模拟,输出玩家得分信号。计分显示模块,以玩家得分为输入,计算玩家局数比分 及数码管的显示。 电路的功能框图如下所示。 图 1.4 电路功能框图 1.5验证方案 设计主要分为两个子模块,游戏主模块、计分数码管显示模块。对两个子模块分 别进行验证。对

11、主游戏模块的验证可使玩家 1、2 分别在正确或错误的时间输入,观察 所得结果。对计分显示模块的验证可编辑 2 个玩家的得分情况,观察数码管的显示情 况。前仿真完成后,再用综合器进行后仿真,主要是布局布线、时序约束、管脚约束 等。成功后便可下载相应的 fpga 器件中,进行实物模拟验证。 2 模块设计 设计共有 2 个功能模块,分别是游戏主程序模块和记分显示模块。游戏主程序以 玩家击球为输入,判断玩家是否在正确的击球时机,记录哪位玩家得分,输出玩家分 数供计分显示模块进行处理。计分显示模块以游戏主程序所记玩家得分为输入,记录 每局比赛两位玩家的得分,最后显示局数比分和每局玩家得分。 2.1 游戏

12、主模块设计 游戏主模块 game 主要完成球台部分的设计,以两位玩家的击球为输入,使 16 个 led 依次亮灭,根据游戏规则输出比分。以两个按键开关来模拟两位玩家的击球动作。 开始时最边上的两个 led 亮,发球后有发球方 led 先亮,依次亮到对方。若对方在倒 数第 4 个 led 亮至最后一个亮之前按下按键(表示接球) ,则 led 向反方向一次亮灭。 若没有按下按键,对方加一分。两边的 4 个 led 亮灭速度为每 0.4s 一个,中间 8 个为 每 0.8s 一个。接球、发球 led 模式相同。状态机模块的接口信号有时钟、复位、玩家 1、玩家 2、得分输出 1、得分输出 2、球台模拟

13、灯,具体如下表 2.1 所示。 表 2.1 制状态机模块接口信号表 名称io 描述描述备注 clkin时钟信号 100hz rstin复位信号,有效时端口赋值为 00 有效 play1in玩家 1 击球信号,用按键开关表示 play1in用于控制中间的 8 个 led 每 0.8s 依次亮灭1 有效 sum13:0out玩家 1 得分,4dit 数据 sum23:0out玩家 2 得分,4dit 数据 light15:0out16dit 数据,每一位控制一个 led 状态转移图如下图 2.1 所示。 图 2.1 状态机模块状态转移图 2.2 计分显示模块设计 计分显示模块,以主模块输出的玩家得

14、分情况运算出局数比分,显示局势比分和 每局两位玩家的得分。输入信号有时钟,复位,玩家 1 得分,玩家 2 得分,输出为六 位数码管显示,其中包含玩家 1 局数一位,玩家 2 局数一位,玩家 1 得分两位,玩家 2 得分两位。具体如下表 2.2 所示。 表 2.2 模块接口信号表 名称 io 描 述 描述备注 clkin控制时钟,100hz rstin复位,使所有端口恢复初值 0 有 效 sum13:0in玩家 1 得分,4dit 数据 sum23:0in玩家 2 得分,4dit 数据 led6:0out 六位数码管显示,由 sel 选控,使其高速刷新,看起来就是连续显 示 计分显示模块功能框图

15、如下: 图 2.2rtl 框图 3 电路约束与综合实现 fpga/cpld 设计中的约束主要可以分为两个方面,一是时序约束,另一个是管脚约 束,而一般不考虑面积约束、设计规则约束和工作环境约束。综合工具直接采用 quartus ii 进行。 3.1 时序约束 时序约束主要分为输入/输出延时约束、时钟约束以及异步时钟数据间的约束等内 容。本设计中由于是同步设计,而且没有纯组合逻辑的输入与输出,时钟约束变得简 单。设计中仅需要对输入延时、输出延时、触发器间的延时进行约束即可。 根据实际的工作环境,设计电路工作时钟设定为 100hz。输入延时和输出延时均设 定为时钟周期的 60%,时钟周期 10ms

16、。 游戏主模块 game 时间约束语句: # create clock create_clock -name clk -period 10000.000 -waveform 5000.000 10000.000 get_ports clk # set input delay set_input_delay -add_delay -clock get_clocks clk 6000.000 get_ports play1 set_input_delay -add_delay -clock get_clocks clk 6000.000 get_ports play2 set_input_dela

17、y -add_delay -clock get_clocks clk 6000.000 get_ports rst # set output delay set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports light0 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports light1 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports li

18、ght2 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports light3 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports light4 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports light5 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_port

19、s light6 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports light7 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports light8 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports light9 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_

20、ports light10 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports light11 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports light12 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports light13 set_output_delay -add_delay -clock get_clocks clk 6000.

21、000 get_ports light14 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports light15 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports sum10 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports sum11 set_output_delay -add_delay -clock get_clocks clk 6

22、000.000 get_ports sum12 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports sum13 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports sum20 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports sum21 set_output_delay -add_delay -clock get_clocks clk 6

23、000.000 get_ports sum22 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports sum23 计分显示模块时间约束语句: # create clock create_clock -name clk -period 10000.000 -waveform 5000.000 10000.000 get_ports clk # set input delay set_input_delay -add_delay -clock get_clocks clk 6000.000 get_ports rs

24、t set_input_delay -add_delay -clock get_clocks clk 6000.000 get_ports sum10 set_input_delay -add_delay -clock get_clocks clk 6000.000 get_ports sum11 set_input_delay -add_delay -clock get_clocks clk 6000.000 get_ports sum12 set_input_delay -add_delay -clock get_clocks clk 6000.000 get_ports sum13 se

25、t_input_delay -add_delay -clock get_clocks clk 6000.000 get_ports sum20 set_input_delay -add_delay -clock get_clocks clk 6000.000 get_ports sum21 set_input_delay -add_delay -clock get_clocks clk 6000.000 get_ports sum22 set_input_delay -add_delay -clock get_clocks clk 6000.000 get_ports sum23 # set

26、output delay set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports led0 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports led1 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports led2 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_po

27、rts led3 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports led4 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports led5 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports led6 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports

28、sel0 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports sel1 set_output_delay -add_delay -clock get_clocks clk 6000.000 get_ports sel2 3.2 引脚锁定约束 由于开发板上的电源、时钟、复位以及其它功能键等的连接已经固定,管脚约束 所要完成的只要锁定即可。 游戏主模块管脚约束如下表: todirectionlocationi/o bankvref groupi/o standardreservedgroup current st

29、rength clkinputpin_281b1_n1 led6outputpin_411b1_n2led6.0 led5outputpin_391b1_n1led6.0 led4outputpin_381b1_n1led6.0 led3outputpin_371b1_n1led6.0 led2outputpin_241b1_n1led6.0 led1outputpin_231b1_n1led6.0 led0outputpin_211b1_n0led6.0 rstinputpin_581b1_n2 sel2outputpin_451b1_n2sel2.0 sel1outputpin_441b1

30、_n2sel2.0 sel0outputpin_431b1_n2sel2.0 sum13inputsum13.0 sum12inputsum13.0 sum11inputsum13.0 sum10inputsum13.0 sum23inputsum23.0 sum22inputsum23.0 sum21inputsum23.0 sum20inputsum23.0 表 3.2.1 游戏主模块管脚约束表(sum1、sum2 是传输给计分显示模块的信号,所以没有管脚约束) 计分显示模块管脚约束如下表: todirectionlocationi/o bankvref groupi/o standard

31、reservedgroup current strength clkinputpin_281b1_n1 light15outputpin_1174b4_n0light15.0 light14outputpin_1164b4_n0light15.0 light13outputpin_1154b4_n0light15.0 light12outputpin_1144b4_n0light15.0 light11outputpin_1134b4_n0light15.0 light10outputpin_1084b4_n0light15.0 light9outputpin_1074b4_n0light15

32、.0 light8outputpin_1064b4_n0light15.0 light7outputpin_1054b4_n0light15.0 light6outputpin_1044b4_n0light15.0 light5outputpin_1034b4_n0light15.0 light4outputpin_1024b4_n0light15.0 light3outputpin_1014b4_n1light15.0 light2outputpin_1004b4_n1light15.0 light1outputpin_994b4_n1light15.0 light0outputpin_98

33、4b4_n1light15.0 play1inputpin_664b4_n2 play2inputpin_591b1_n2 rstinputpin_581b1_n2 sum13outputsum13.0 sum12outputsum13.0 sum11outputsum13.0 sum10outputsum13.0 sum23outputsum23.0 sum22outputsum23.0 sum21outputsum23.0 sum20outputsum23.0 表 3.2.2 计分显示模块管脚约束表(sum1、sum2 为游戏主模块传来的信号,所以无管脚约束) 3.3 电路综合报告 游戏主

34、模块 game 样本报告: 图 3.1.1 游戏主模块报告 计分显示模块 jifenqi 样本报告: 图 3.1.2 计分显示模块报告 4 设计仿真与测试 功能验证分为两部分,一部分是电路功能与时序的软件仿真,采用 moldsim 完成; 另一部分是将配置文件下载后在开发板上对设计进行测试,通过开关、按键、led、数 码管以及示波器、逻辑分析仪等方式进行。 4.1 仿真与测试的功能列表 功能仿真与测试要针对每一条设计需要实现的功能进行。设计中要求实现的、需 要仿真与测试功能列表如下: 游戏主模块: 1) 复位功能当复位信号低有效时,电路应处于复位状态:运行控制信号处于 无效(低电平) 、任何输

35、入没有响应、数码管显示无效;当复位信号变为高电 平时,电路正常工作。 2) 时钟信号当有时钟时电路正常工作;没有时钟信号时,除复位外所有的输 入没有响应,所有的输出没有变化。 3) play1、play2先 play1 输入,计算应隔 1.2s-1.5s 后输入 play2,表示接 球,再隔 0.8s-1.2s 之间输入 play1,表示接球,依次测试游戏正常进行。若 在相应时间内无 play1 或 play2 的输入(或是犯规) ,游戏就会进入初始状态 并且记录得分。 计分显示模块: 1) 复位功能当复位信号低有效时,电路应处于复位状态:运行控制信号处于 无效(低电平) 、任何输入没有响应、

36、数码管显示无效;当复位信号变为高电 平时,电路正常工作。 2) 时钟信号当有时钟时电路正常工作;没有时钟信号时,除复位外所有的输 入没有响应,所有的输出没有变化。 3) sum1、sum2玩家 1、2 的比分输入。共有 4 种情况:sum1 大于 sum2 并且 sum2 不大于 9;sum2 大于 sum1 并且 sum1 不大于 9;sum1、sum2=10 并且 sum1-sum21;sum1、sum2=10 并且 sum2-sum11;查看数码管显示情况。 4.2 仿真平台构建和仿真结果 4.2.1 电路功能仿真结果 游戏主模块功能仿真 图 4.2.1.1 游戏主模块仿真波形图 计分器

37、模块功能仿真 图 4.2.1.2 计分显示模块仿真波形图 4.2.2 电路后仿真结果 游戏主模块 图 4.2.2.1 游戏主模块后仿真波形图 计分显示模块(所设延时过小) 图 4.2.2.1 计分显示模块后仿真波形图 结论 程序设计、软件仿真皆可通过。硬件实际模拟由于器件问题无法实现。通过本次 设计加强了对 verilog hdl 硬件描述语言的理解。对仿真软件 modelsim se 和综合器 件 quartus ii 的使用更加清晰。完整的进行了 fpga 设计的过程。在实际的 fpga 开发 中,选用 modelsim+ quartusii 的 eda 工具组合能很好地规划设计流程,充分

38、利用各 eda 工具的优点,提高开发效率。 参考文献 1 g. david ripley.dvi-a digital multimedia technology. communication of the acm,july,1982,32 2 micheal.d.ciletti,advanced digital with the verilog hdl m. 电子工 业出版社,2004 3 micheal keating,pierre bricaud.reuse methodology for system on a chip design.second edition.kluwer acad

39、emic publisher,2000 4 杜慧敏 基于 verilog 的 fpga 设计基础 西安电子科技大学出版社, 2006,2 5 易建勋 微处理器的结构与性能 清华大学出版社 2003.9 6 求是科技 fpga 数字电子系统设计与开发实例导航 人民邮电出版社 2005.6 7 雷丽文 微机原理与接口技术 电子工业出版社 1997.2 8 夏宇闻 verilog 数字系统设计教程 北京航空航天大学出版社 2003.7 9 高福祥 接口技术 东北大学出版社,1999.12 附录 a 设计源代码 游戏主模块: timescale 1ms/1ms module game(clk,rst,

40、play1,play2,light,sum1,sum2); input clk,rst; input play1,play2; / output15:0 light; output3:0 sum1,sum2; / wire clk,rst; wire play1,play2; / reg15:0 light; reg3:0 sum1,sum2; / reg5:0 cnt1,cnt2; always(posedge clk or negedge rst) if(!rst) cnt16b10_0111) cnt1=0; else cnt1=cnt1+1b1; end / always(posedg

41、e clk or negedge rst) if(!rst) cnt27b100_1111) cnt2=0; else cnt2=cnt2+1b1; end / parameter s_0=4b0000, s_1=4b0001, s_2=4b0010, s_3=4b0011, s_4=4b0100, s_5=4b0101, s_6=4b0110, s_7=4b0111, s_8=4b1000, s_9=4b1001, s_10=4b1010; reg3:0 curr_st,next_st; / always(posedge clk or negedge rst) if(!rst) begin

42、next_st=s_0; sum1=0; sum2=0; light=16b0000_0000_0000_0000; end else case(curr_st) s_0:begin light=16b1000_0000_0000_0001; if(play1) next_st=s_1; else if(play2) next_st=s_8; else next_st=s_0; end s_1:begin light=16b0000_0000_0000_0001; next_st=s_2; end s_2:if(cnt1=6b10_0111) light=(light1); else if(l

43、ight=16b0000_0000_0000_1000) next_st=s_3; else next_st=s_2; s_3: if(cnt2=7b100_1111) light=(light1); else if(light=16b0000_1000_0000_000) next_st=s_4; else next_st=s_3; s_4:if(cnt1=6b10_0111) light=(light1); else if(light=16b1000_0000_0000_0000) begin next_st=s_4; if(light16b1000_0000_0000_000 else

44、if(light=16b1000_0000_0000_0000) next_st=s_9; end s_5:if(cnt1=6b10_0111) light1); else if(light=16b0001_0000_0000_0000) next_st=s_6; else next_st=s_5; s_6:if(cnt2=7b100_1111) light1); else if(light=16b0000_0000_0001_0000) next_st=s_7; else next_st=s_6; s_7:if(cnt1=6b10_0111) light1); else if(light=1

45、6b0000_0000_0000_0001) begin next_st16b0000_0000_0000_0001 else if(light=16b0000_0000_0000_0001) next_st=s_10; end s_8:begin light=16b1000_0000_0000_0000; next_st=s_5; end s_9:begin sum1=sum1+1b1; next_st=s_0; end s_10:begin sum2=sum2+1b1; next_st=s_0; end endcase / always(posedge clk or negedge rst

46、) if(!rst) curr_st=s_0; else curr_st=next_st; endmodule 计分显示模块: timescale 1ms/1ms module jifenqi(clk,rst,sum1,sum2,led,sel); input clk; input rst; input3:0 sum1,sum2; output6:0 led; output2:0 sel; / wire clk; wire rst; wire3:0 sum1,sum2; reg6:0 led; / reg6:0 led_p11,led_p12,led_p21,led_p22; reg6:0 l

47、ed_j1,led_j2; reg2:0 jushu_p1,jushu_p2; / reg2:0 sel; reg2:0 cnt; / always(posedge clk or negedge rst) if(!rst) cnt=0; else cnt=cnt+1b1; / always(cnt) case(cnt) 3b000:sel=3b000; 3b001:sel=3b001; 3b010:sel=3b010; 3b011:sel=3b011; 3b100:sel=3b100; 3b101:sel=3b101; 3b110:sel=3b110; 3b111:sel=3b111; end

48、case / always(sum1) case(sum1) 4b0000:begin led_p11=7b100_0000;led_p12=7b100_0000; end 4b0001:begin led_p11=7b111_1001;led_p12=7b100_0000; end 4b0010:begin led_p11=7b010_0100;led_p12=7b100_0000; end 4b0011:begin led_p11=7b011_0000;led_p12=7b100_0000; end 4b0100:begin led_p11=7b001_1001;led_p12=7b100

49、_0000; end 4b0101:begin led_p11=7b001_0010;led_p12=7b100_0000; end 4b0110:begin led_p11=7b000_0010;led_p12=7b100_0000; end 4b0111:begin led_p11=7b111_1000;led_p12=7b100_0000; end 4b1000:begin led_p11=7b000_0000;led_p12=7b100_0000; end 4b1001:begin led_p11=7b001_0000;led_p12=7b100_0000; end 4b1010:be

50、gin led_p11=7b100_0000;led_p12=7b111_1001; end 4b1011:begin led_p11=7b111_1001;led_p12=7b111_1001; end 4b1100:begin led_p11=7b010_0100;led_p12=7b111_1001; end 4b1101:begin led_p11=7b011_0000;led_p12=7b111_1001; end 4b1110:begin led_p11=7b001_1001;led_p12=7b111_1001; end 4b1111:begin led_p11=7b001_00

51、10;led_p12=7b111_1001; end endcase / always(sum2) case(sum2) 4b0000:begin led_p21=7b100_0000;led_p22=7b100_0000; end 4b0001:begin led_p21=7b111_1001;led_p22=7b100_0000; end 4b0010:begin led_p21=7b010_0100;led_p22=7b100_0000; end 4b0011:begin led_p21=7b011_0000;led_p22=7b100_0000; end 4b0100:begin le

52、d_p21=7b001_1001;led_p22=7b100_0000; end 4b0101:begin led_p21=7b001_0010;led_p22=7b100_0000; end 4b0110:begin led_p21=7b000_0010;led_p22=7b100_0000; end 4b0111:begin led_p21=7b111_1000;led_p22=7b100_0000; end 4b1000:begin led_p21=7b000_0000;led_p22=7b100_0000; end 4b1001:begin led_p21=7b001_0000;led

53、_p22=7b100_0000; end 4b1010:begin led_p21=7b100_0000;led_p22=7b111_1001; end 4b1011:begin led_p21=7b111_1001;led_p22=7b111_1001; end 4b1100:begin led_p21=7b010_0100;led_p22=7b111_1001; end 4b1101:begin led_p21=7b011_0000;led_p22=7b111_1001; end 4b1110:begin led_p21=7b001_1001;led_p22=7b111_1001; end

54、 4b1111:begin led_p21=7b001_0010;led_p22=7b111_1001; end endcase / always(posedge clk or negedge rst) if(!rst) begin jushu_p1=0; jushu_p2=0; end else if(sum1=4b1011 else if(sum2=4b1011 / always(posedge clk) case(jushu_p1) 3b000:led_j1=7b100_0000; 3b001:led_j1=7b111_1001; 3b010:led_j1=7b010_0100; 3b0

55、11:led_j1=7b011_0000; 3b100:led_j1=7b001_1001; endcase / always(posedge clk) case(jushu_p2) 3b000:led_j2=7b100_0000; 3b001:led_j2=7b111_1001; 3b010:led_j2=7b010_0100; 3b011:led_j2=7b011_0000; 3b100:led_j2=7b001_1001; endcase / always(posedge clk) case(sel) 3b000:led=led_j1; 3b001:led=led_j2; 3b010:l

56、ed=0; 3b011:led=led_p11; 3b100:led=led_p12; 3b101:led=0; 3b110:led=led_p21; 3b111:led=led_p22; endcase endmodule 附录 b 仿真代码仿真代码 游戏主模块例化+激励 timescale 1ms/1ms module game_tb(); wire15:0 light; wire3:0 sum1,sum2; / include./stim/game_stim.v game game( .clk(clk), .rst(rst), .play1(play1), .play2(play2),

57、.light(light), .sum1(sum1), .sum2(sum2); endmodule reg clk,rst,play1,play2; / initial begin clk=0; forever #5 clk=clk; end / initial begin rst=0; #40 rst=1; end / initial begin play1=0; #10 play1=1; #10 play1=0; forever begin #1710 play1=1; #15 play1=0; end end / initial begin play2=0; #810 play2=1;

58、 #10 play2=0; / forever begin #1710 play2=1; #15 play2=0; end end / initial begin #10000000 $stop; end 计分显示模块例化+激励 timescale 1ms/1ms module jifenqi_tb(); wire6:0 led; wire2:0 sel; include./stim/jifenqi_stim.v jifenqi jifenqi( .clk(clk), .rst(rst), .sum1(sum1), .sum2(sum2), .led(led), .sel(sel); endm

59、odule reg clk,rst; reg3:0 sum1,sum2; / initial begin clk=0; forever #50 clk=clk; end / initial begin rst=0; #40 rst=1; end initial begin sum1=4b0000; #110 sum1=4b0001; #100 sum1=4b0010; #100 sum1=4b0011; #100 sum1=4b0100; #100 sum1=4b0101; #100 sum1=4b0110; #100 sum1=4b0111; #100 sum1=4b1000; #100 sum1=4b1001; #100 sum1=4b1010; #100 sum1=4b1011; #100 sum1=4b1100; #100 sum1=4b1101; #100 sum1=4b1110; #100 sum1=4b1111; #100 sum1=4b1011; #100 sum1=4b1000; #100 sum1=4b1110; #100 sum1=4b1010; #100 sum1=4b1011; #100 sum1=4b1011; #100 sum1=4b1001; end / initial begin sum2=4b0000; #110 sum2=4b0001;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论