verilog抢答器设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

湖北师范学院电工电子实验教学省级示范中心电子版实验报告
抢答器
一•任务解析
用VerilOg硬件描述语言设计抢答器,实现:
1、四人通过按键抢答,最先按下按键的人抢答成功,此后其他人抢答无效。

2、每次只有一人可获得抢答资格,一次抢答完后主持人通过复位按键复位,选手再从新抢答。

3、有从新开始游戏按键,游戏从新开始时每位选手有5分的初始分,答对加1分,答错扣1分,最高分不能超过9分,当选手得分减为0时取消该选手抢答资格。

4、选手抢答成功时其对应的分数闪烁。

•方案论证(画框图并分析)
抢答部分(对应SnatCh模块)在quartusll下的仿真原理图如下所示:
第2页,共6页抢答部分的代码如下:
InOdUIe SnatCh(CLr F key,data j led,m) ;/∕≠⅛答慎块
input clr;//主持人复J f立按键
input[3:0] key;//四个技犍对应四竝选手
input [15 :0] data^∕⅛i⅛手的分数反銀进来以取消0分选手抢答资格
OUtPUt [3 : 0] Ied√ //四位选手抢答指示灯
QUtPUt [2:0]町"存储抢答结果〔有没有人抢答及谁抢答:>
reg C I q;
reg[1:0] ≡;
Wire out={key[0]fc{data[S:0]!=0))∣(key[l]&(data[7;4]1=0))Ifk已y[2]&(data[11:0]!=0}) I (⅛ey[3]盂{data [15 :12]
1=0) };"选手分数减为零时取消其抢答资格
Wire CIk=OUt⅛(Jq);
assign In-{c,s};//
⅛lways(⅛ {posedge Clk Or negedge CIr)
if (!clr}begin q<=O;c<=O;end"主持人复位
else begin c<=l;q<=J q;end//有i⅛手抢答时匸直1, q为D触发:器输出端
I
alway≡&(p□≤edge CIk)
case(key)
rb0001zs<=2l b00r77检测到有人抢答时立即将选手抢答信息存入s
4 ・b0010:s<=2'b01;
4 ・b0100ιs<=2,b!0;
4,blOOO≈3<=2t bll;
default: s<=2,b??;//其他情况^为高阻值.
endcase
assign l≡d- U-τ ≡ } --3 ' blOO ) ^4 ,b3301: 「矩答亍空芋J⅛τ⅛<Γ亮
t{c f s}≡=3'blθl),b0010:
f {c,s}=3,bllθ) ?4I bolO0: l(c13}=3,blll) 74τbiα00: 4τb0000;
e JTidmodu Ie
计分模块的代码如下:
InQdUle StQre {star t小PrdowmSr q);"计分模圳
input start J up r down;
input [2:0] s;"通过S可以判断有没有人抢答21哪位选手抢答
ClUtPUtr15-0] q;
reg[15:0] q;
/∕q[3: Ob q[7:41 J q[ll:81,q[15H21分别存放四位选手的分数LCELL aa (UP f CieIaylIP) , bb (down^ de laydown) ; ''∕i^ 用系统延时模块
Wire clk=delayupIdelaydo⅛m;
always0(posedge CIk Or POSedge start)
if {start)q<=161h5555;//给抢答的四人毎人一个初始分数5分
else if (up)//加按键按下时加1分
case (S)
3'blOO:if (q[3^J<⅛τh9)q[3 = 0]<=q[3r01+lτbl;//最高分不能超过9
3τbl01∑if (q[7z41<4τh9)q[7z4]<=q[7z4]+l l bl;//
3*bllO:if (q[llιB]<4t h9)q∣[llι8]<=q[llι8]+l t bl;//
3,blllzif(q[15:12]<4'h9)q(15:12]<=q[15:12]+1t bl;//
endcase
else
case (s)
3τblOO=if(q[3=O]>O)q[3r{)]<^ι[3:Ol-I l b1;//最低分不能小于0
3,bl01=if (q[7 = 4]>0)q[7 = 4]<=q[7 = 4]-l l bl;//
S1DllOiif(q[llzB]>O)q[11:0]<=q[11;B]-l'bl;//
3l blllzif(q[15:12]>0)q[15:12]<=q[15:12]-l1bl;//
endcase endmodule
顶层模块的代码如下:
module top (StaEt J Clr f CLkJ UPJ Idowlb key f⅛f b f c, Cb S l E 内*SeI J led}主槟块input start,clr f亡IlGUpr down;input[3:0] key;
OUtPUt a f b f亡de,frg;
OUtPUt[2:0] sei;
OUtPUt[3:0] led;
wire f lash f wup j WdDWr L;∏内部节点〔连线】
Wire [2:0]fuck;
Wire [3:0]out; Wire [15:0]Whore; deboυnced⅞bl(.clk(s) J-key_In (υp}…key_OUt (WUP))
「"按⅛⅛⅛4⅛τ
d⅞⅛2(.clk(s) J-Ifey in{mod)…key-αut (WdOWn));"按键去抖动
SCaIn SCan (.clk(s) J.q(sel)} J∕∕⅛⅛
mux9 mux LaI (VhOre(S: 0]} r r a2 (4 ,ha} j r a3 (WhOre [7 : 4])…訥K ,ha) J
+a5(w⅛0R[11:3]I,.a6{4rħa)I r,a7(Whore[15:12]) r,aS{4τha),
-Bel{≤el)「”DdfuCk) J r clk{flash}. ”OUt{out});//4 rħa在CIeIed里定文为全熄deled CieIeelL in (out) t.a (a), ,b (b), .c (c) f.d(d) f.e (e) j. f (f) ,r.g{g)}数码管驱动
Store SitOre (. Start (st⅛rt} f-UP (VrUP) f- CIawn (IJaoWn) f . 5 (fuck) ,r,q{wħαre)); //分⅛fc控制
SnatCh Snatcħ {r clr (dr) J key {⅛ey) F -Cia t⅛ (WhOre) I- Ied (ISdI Z p jn(fυck)); /丿抢答控制
div_cIk divclkl(.cifi(clk), .f (15,d4θθθ) Ir,cko(≤) H "分频
CliVCI⅛2(. Cki (Clk)5.f (21d2), T C)co (flash));
endιπodule
•重难点解析
抢答器的核心部分为巧妙地利用D触发器的反馈,在检测到第一个上升沿时将按键(未按下时接低电平)接入的与门锁住,以保证与门只有一个上升沿输出,从而实现“最先按下按键的人抢答成功,此后其他人抢答无效”。

在与门输出上升沿的同时检测按键,以确定是哪位选手抢答,用寄存器存下抢答选手的信息,最后确定哪个Ied灯亮以及那位选手对应的分数闪烁。

至于取消0分选手抢答资格,则是将各选手的分数反馈到选手抢答的按键,通过与门关闭相应选手按键上升沿的进入。

其他功能的实现相对简单,在此不再赘述。

将各模块代码写好并测试后,在主模块中调用并分配引脚,引脚分配好后, 从新编译、下载就可实验了。

分别验证上述的各种功能,看是否达到预期的效四.硬件资源分配(给出引脚分配说明)
芯片选用EP1K30TC114-3 , CIr接全局清零键pin124, Start (游戏从新开始键)接pin49, UP (加分键)接pin47, down接pin48,四个抢答按键key3、
key2、key1、key0、分别接Pin59、Pin60、Pin62、pin63, 7 段数码管的7 盏灯a、b、c、d、e、f、g 分别pin118 pin119> pin120> pin121> pin122> pin128、pin130,数码管选择信号sel0 sel1、sel2分别接pin132> pin133> pin135,抢答指示灯led0、led1、led2、led3 分别接pin136、pin137、pin138、pin140o
五.结果分析
验证过程如下:
1、分别按下start 和clr 键,游戏处于初始状态,此时8 个数码管等间隔地显
示4个5分,分数不闪烁。

2、按下key0键,此时led0亮,第一个分数闪烁,再按其他按键,数码管及灯
的状态不变。

按下Clr键,再同时按下几个按键,仍只有一个灯亮,且对应的分数闪烁,在按下Clr键之前不管怎么按四个抢答键,数码管及灯的状态不变。

3、不断按下key1 键抢答并给其加分,一直加到9,发现分数加到9 时不能再
加了。

4、不断按下key2 键抢答并给其减分,一直减到0,发现分数减到0 时再按key2
抢答时没反应,led2不亮且对应的分数也不闪。

而按其他键抢答仍然有效。

通过对以上结果的分析发现,该抢答器具备了我们当初要求的功能,该抢答器总体上是比较成功的。

六.经验总结
经过多次的修改和调试,实验总算成功了,在看到试验箱上的效果时,我
内心非常激动,感觉当初的汗水总算没白费,多次失败的烦躁烟消云散,几近
崩溃的意志也迅速放松下来。

写这么一些代码就能实现你想要的功能,不得不让人感慨
EDA 的神奇以及立下学好EDA 的誓言。

当然,在品味成功的喜悦时,我们还要思考实验的得与失。

以下是本次试验的心得:
1、在实验的开始阶段,我对所写的代码进行了波形仿真,发现
波形仿真的结果是对的,而下到芯片去测试时,效果就不对了,经过多次
修改,实验现象才逐步达到理想状态。

因此,我觉得我们学EDA不能完
全以来波形仿真,而应多在试验箱上测试,那里才是真正检验程序对错的
地方。

2、在连接各个模块的时候我明白了一定要注意各个输入、输出
引脚的线宽,因为每个线宽是不一样的,只要让各个线宽互相匹配,才能
得出正确的结果,否则,出现任何一点小的误差就会导致整个文件系统的
编译出错。

总之,EDA作为前沿学科,对于我们电子信息工程专业的学生来说,学习EDA 对我们知识面以及运用知识的能力的提高有很大的帮助。

相信自己学习的脚步不会停止!
感谢老师孜孜不倦的教诲。

相信在EDA学习过程中自己思维能力、学习能力、思考方式的提高,定会在以后的学习过程中给我带来很大的帮助。

相关文档
最新文档