首页 范文大全 古典文学 职场知识 中国文学 公文书信 外国名著 寓言童话 百家讲坛 散文/诗歌 美文欣赏 礼仪知识 民俗风情
  • 工作总结
  • 工作计划
  • 心得体会
  • 竞聘演讲
  • 会议发言
  • 爱国演讲
  • 就职演说
  • 开业开幕
  • 思想学习
  • 征文演讲
  • 经验材料
  • 述职报告
  • 调研报告
  • 工作汇报
  • 年终总结
  • 申报材料
  • 学习体会
  • 企划方案
  • 活动方案
  • 技巧经验
  • 模板范例
  • 思想宣传
  • 经济工作
  • 工作报告
  • 组织人事
  • 反腐倡廉
  • 慰问贺电
  • 先进事迹
  • 思想汇报
  • 入党申请书
  • 党会发言
  • 先进性教育
  • 入团申请书
  • 个人简历
  • 演讲稿
  • 调查报告
  • 实习报告
  • 和谐社会
  • 观后感
  • 读后感
  • 作文范文
  • 自我鉴定
  • 讲话稿
  • 自查报告
  • 掷骰子游戏电路设计与实现实验报告

    时间:2021-03-05 18:03:34 来源:蒲公英阅读网 本文已影响 蒲公英阅读网手机站

    相关热词搜索:骰子 电路设计 实验

    掷骰子游戏电路的设计与实现实验报告 本文关键词:骰子,电路,实验,报告,设计

    掷骰子游戏电路的设计与实现实验报告 本文简介:数字电路与逻辑设计实验题目:掷骰子游戏电路的设计与实现学号:2012210554姓名:孙进考班级:2012211119学院:信息与通信工程学院日期:2014.11.10一、设计课题的任务要求设计并实现一个掷骰子游戏电路。基本要求:1、电路可供甲乙二人游戏,游戏者甲使用的按键为BTN0,游戏者乙使用的

    掷骰子游戏电路的设计与实现实验报告 本文内容:

    数字电路与逻辑设计实验

    题目:掷骰子游戏电路的设计与实现

    学号:2012210554

    姓名:孙进考

    班级:2012211119

    学院:信息与通信工程学院

    日期:2014.11.10

    一、

    设计课题的任务要求

    设计并实现一个掷骰子游戏电路。

    基本要求:

    1、电路可供甲乙二人游戏,游戏者甲使用的按键为BTN0,游戏者乙使用的按键为BTN1。

    2、每按一次按键,代表掷一次骰子,可随机得到

    1~6

    范围内的两个数字。

    3、甲乙按键产生的随机数字分别用数码管DISP0-DISP1、DISP2-DISP3

    显示,并用DISP7

    显示比赛局数,比赛结束用8×8

    点阵显示获胜方,并伴有声音效果。

    4、具体游戏规则如下:

    (1)

    第一局比赛,甲乙依次各按一次按键,按键所得两数之和为7

    或11

    者胜;若无人取胜,则进行第二局比赛;

    (2)

    第二局比赛,甲乙每人各按一次按键,按键所得二数之和与第一局比赛相同者获胜,若无人获胜,则进行第三局比赛,重复进行步骤(2),直到出现胜者为止。

    (3)

    游戏局数最多进行六局。在第六局比赛时,若重复进行步骤(2)仍未出现胜者,以按键所得两数之和最大者为获胜方。

    提高要求:

    1、增加多人游戏的功能,数码管可分时记录显示每个游戏者的骰子点数。

    2、点阵显示增加游戏开机动画、结束动画,并伴有乐曲播放。

    3、自拟其它功能。

    二、系统设计(包括设计思路、总体框图、分块设计)

    1、整体设计思路

    将整个游戏电路分为时钟分频模块、随机数产生模块、数码管显示模块、判断控制模块、点阵显示模块等五个模块。其中,时钟分频模块用于产生适合其他模块使用的时钟频率;随机数产生模块接收来自按键的信号,产生1-6的随机数,其中按键带有防抖功能;数码管显示产生的随机数和局数;判断控制模块用于判断胜负,并控制点阵显示;点阵显示模块用于显示胜利的一方。

    2、系统框图

    时钟分频模块

    数码管显示模块

    点阵显示模块

    判断控制模块

    随机数产生模块

    Btn0

    按键防抖

    Btn1

    按键防抖

    reset

    3、分块设计

    时钟分频模块

    采用多级分频的方法分别产生点阵扫描需要的1MHz的clk_dian频率、数码管扫描的10KHz的clk_shu频率、产生第一位随机数的2KHz的clk_x频率、产生第二位随机数的3.3kHz的clk_y频率和用于防抖的20hz的clk_dou频率。

    随机数产生模块

    随机数产生模块用于产生随机数和局数计数。reset用于使局数归零,重新开始游戏。btn0用于作为产生甲方随机数的信号,btn1用于作为产生乙方随机数的信号。clk_x和clk_y是用来产生两位随机数的时钟信号。clk_dou为防抖时钟。qout1-2是甲随机数输出信号,qout3-4是乙随机数输出信号,qout5是局数信号。

    数码管显示模块

    数码管显示模块用于显示产生的随机数和局数。clk_shu接收10KHz的时钟频率。qin1-5分别接收随机数产生模块的qout1-5信号。cat[50]和g[60]控制数码管的位选和段选信号。

    控制判断模块

    控制判断模块用于判断胜负并控制点阵显示。clk_dou为防抖时钟频率,btn1为乙方按完按键的信号,jia1-2和yi1-2为甲乙方的随机数,ju为比赛局数。V是胜负结果,用于控制点阵显示。

    点阵显示模块

    点阵显示模块用于显示胜利的一方。clkin接1MHz的时钟频率,v是胜负结果。beep是蜂鸣器输出信号,当有一方胜利的时候就会输出高电平信号;row和col分别是点阵的行输入和列输入。

    三、

    仿真波形及波形分析

    分频模块

    由于分频比例太高,仿真到1s需要花费大量时间,故只仿真到20ms,可观察其中的clk_x和clk_y信号。

    随机数模块

    如图所示,当btn0被按下,经过防抖测试之后,产生随机数1和4,btn1被按下,经过防抖测试之后,产生随机数3和6,reset拨上之后局数归零,重新开始(圆角方形所示)。

    数码管显示模块

    如图所示,圆圈内为位选输出信号,其中cat4数码管没有使用。方框内为段选输出信号,以输出1和5为例,显示正确,其中的毛刺可以忽略,不影响显示效果。

    判断控制模块

    如图,仅以第一局为例,设置甲方为5+2=7,乙方为1+1=2,如方框内所示;btn1下降沿触发比较,v的结果为01,即甲方获胜,如圆圈内所示,仿真结果正确。

    点阵显示模块

    如图,以显示甲为例,输入为v=01,行输出和列输出显示结果为汉字甲,蜂鸣器输出beep=1,符合预设结果。

    四、

    源程序

    分频器模块fenpinqi.vhd

    library

    ieee;

    use

    ieee.std_logic_1164.all;

    entity

    fenpinqi

    is

    port(

    clkin:in

    std_logic;

    --时钟信号输入

    clk_dian,clk_shu,clk_x,clk_y,clk_dou:out

    std_logic);

    --时钟信号输出

    end

    fenpinqi;

    architecture

    a

    of

    fenpinqi

    is

    signal

    tmp1:integer

    range

    0

    to

    24;

    signal

    tmp2:integer

    range

    0

    to

    49;

    signal

    tmp3:integer

    range

    0

    to

    4;

    signal

    tmp4:integer

    range

    0

    to

    149;

    signal

    tmp5:integer

    range

    0

    to

    499;

    signal

    clktmp1:std_logic;

    signal

    clktmp2:std_logic;

    signal

    clktmp3:std_logic;

    signal

    clktmp4:std_logic;

    signal

    clktmp5:std_logic;

    begin

    p1:process(clkin)---分频到1MHz

    begin

    if

    clkin

    event

    and

    clkin=

    1

    then

    if

    tmp1=24

    then

    tmp1qout1qout1qout1qout1qout1qout1qout1qout2qout2qout2qout2qout2qout2qout2qout5qout5qout5qout5qout5qout5qout5qout5qout3qout3qout3qout3qout3qout3qout3qout4qout4qout4qout4qout4qout4qout4

    tmpn

    tmpn

    tmpn

    tmpn

    tmpn

    tmpg

    tmpg

    tmpg

    tmpg

    tmpg

    tmpg

    tmpg

    tmpgyi)then

    v_temptmp_coltmp_coltmp_coltmp_coltmp_coltmp_coltmp_coltmp_coltmp_coltmp_coltmp_coltmp_coltmp_coltmp_coltmp_coltmp_col<=“11111110“;tmp_row<=“00000110“;

    end

    case;

    else

    tmp_col<=“11111111“;

    --不显示

    end

    if;

    end

    process

    p2;

    p3:process(v)

    begin

    if

    v=“10“or

    v=“01“then

    beep<=

    1

    ;--有人获胜,输出高电平,蜂鸣器发声

    else

    beep<=

    0

    ;

    end

    if;

    end

    process

    p3;

    row<=tmp_col;

    col<=tmp_row;

    end

    a;

    五、

    功能说明及资源利用情况

    实际电路框图:

    功能说明:事先约定,甲方先按按键,乙方后按。当程序初始化之后,在clk_x时钟下,xx、xx1开始计数。在clk_y时钟下yy、yy1开始计数,如果甲按下按键btn0,在btn0的上升沿触发下,xx和yy同时对6取余之后结果加1,产生两个1-6的随机数,由于clk-x和clk-y频率不同,以及甲按键按下的时间是随机的,于是产生的两个数是随机数,显示在数码管disp0-1上,同时局数加1,显示在数码管disp5上,标志新一局开始;然后乙按下按键btn1,产生两个随机数,显示在数码管disp2-3上;同时,在乙按键btn1的下降沿触发之下,开始比较,胜负结果显示在点阵上。期间如果遇到复位信号reset,则局数归零,重新开始游戏。

    资源利用情况:

    注:工程名字为shumaguanceshi5,测试时各部分分别调试,最后选用了一个已存在工程整体调试,未改名。

    六、

    故障及问题分析

    1、

    产生的两个随机数是相同的。原因:计数频率相同。解决方法:clk-x改为2kHz,clk-y改为3.333kHz,x计数改为0-100,y计数改为100-200,成功解决问题。

    2、

    产生随机数,开始时是xy分别除以7取余,产生0-6的随机数,将0调整为1,导致1的概率略大。解决方法:xy分别除以6取余,然后结果加1,这样产生1-6的概率相同,接近于纯随机数。

    3、

    点阵显示的图形一片模糊,虽然能够看出状态间确实有切换,但分辨不出显示的图形,检查后发现是下载时点阵扫描的行和列下载反了,改正后就可显示汉字,但是显示方向略有问题,不过,能正常看出获胜一方,故没有进一步改正。

    4、

    比较判断时总是显示上一局结果。经过老师指导,得知是时钟赋值时有时延,故比较错误。解决方法:将jia1与jia2相加和yi1与yi2相加的命令放在时钟之外,这样只要jia1-2和yi1-2有变化就会相加,不需要时钟,故不存在时延问题。

    七、总结和结论

    这次数电综合实验进行的不是很顺利,主要是上学期的基础没有打好,对知识的理解没有深入,导致了很多错误的发生,比如不能在不同时钟下对同一个信号赋值和同一个if下的判断条件必须为同一种。在这一过程中,我对vhdl语言的理解也更加的深入,解决了许多理论课上半懂不懂的问题,为今后从事相关的开发奠定了基础。

    同时,这次实验提高了我的逻辑思考能力,弥补了理论课学习上的不足,这也将为我学习其他课程产生帮助。

    • 范文大全
    • 职场知识
    • 精美散文
    • 名著
    • 讲坛
    • 诗歌
    • 礼仪知识