




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
青 岛 农 业 大 学理学与信息科学学院电子设计自动化及专用集成电路课程设计报告 设 计 题 目 一、设计一个二人抢答器 二、密码锁 学生专业班级 学生姓名(学号) 指 导 教 师 完 成 时 间 实 习(设计)地点 信息楼121 年 11 月 1 日一、课程设计目的和任务 课程设计目的:本次课程设计是在学生学习完数字电路、模拟电路、电子设计自动化的相关课程之后进行的。通过对数字集成电路或模拟集成电路的模拟与仿真等,熟练使用相关软件设计具有较强功能的电路,提高实际动手,为将来设计大规模集成电路打下基础。课程设计任务:一、设计一个二人抢答器。要求:(1) 两人抢答,先抢有效,用发光二极管显示是否抢到答题权。(2) 每人两位计分显示,打错不加分,答对可加10、20、30分。(3) 每题结束后,裁判按复位,重新抢答。(4) 累积加分,裁判可随时清除。二、密码锁设计四位十进制密码锁,输入密码正确,绿灯亮,开锁;不正确,红灯亮,不能开锁。密码可由用户自行设置。二、分析与设计1、设计任务分析(1)二人抢答器用Verilog硬件描述语言设计抢答器,实现:1、二人通过按键抢答,最先按下按键的人抢答成功,此后其他人抢答无效。2、每次只有一人可获得抢答资格,一次抢答完后主持人通过复位按键复位,选手再从新抢答。3、有从新开始游戏按键,游戏从新开始时每位选手初始分为零分,答对可选择加10分、20分,30分,最高九十分。4、选手抢答成功时其对应的分数显示。(2)密码锁1、第一个数字控制键用来进行密码的输入2、第二个按键控制数字位数的移动及调用密码判断程序。当确认后如果显示数据与预置密码相同,则LED 亮;如不相等,则无反应。按下复位键,计数等均复位2、设计方案论证详细设计(1)抢答器的主要利用D触发器的反馈,当检测到第一个上升沿时将按键(未按下时接低电平)接入的与门锁住,以保证与门只有一个上升沿输出,从而实现“最先按下按键的人抢答成功,此后其他人抢答无效”。在与门输出上升沿的同时检测按键,以确定是哪位选手抢答,用寄存器存下抢答选手的信息,最后确定哪个led灯亮以及那位选手对应的分数闪烁。将各模块代码写好并测试后,在主模块中调用并分配引脚,引脚分配好后,从新编译、下载就可实验了。分别验证上述的各种功能,看是否达到预期的效果。(2)根据密码输入信号控制I/0 口的输出,第一个按键控制数字的递加,第二个按键控制数字位数的移动及调用密码判断程序。当确认后如果显示数据与预置密码相同,则LED 亮;如不相等,则无反应。按下复位键,计数等均复位。系统流程如下:3、详细设计(1)二人抢答器。顶层模块部分在在quartusII下的仿真原理图如下所示:抢答部分的仿真图:加分模块部分(对应snatch模块)在quartusII下的仿真原理图如下所示:数码管显示模块部分(对应snatch模块)在quartusII下的仿真原理图如下所示:(2)密码锁密码锁模块部分(对应snatch模块)在quartusII下的仿真原理图如下所示:4、源代码分析(1)二人抢答器代码module top(reset,key,score,clr,led,opin);/顶层模块部分input reset;/开始抢答按钮input1:0 key;/双人抢答按键input2:0 score;/加分按钮input clr;/清零按钮output1:0 led;/显示灯output31:0 opin;/数码管引脚控制wire1:0 m;wire7:0 q;snatch snatch(reset,key,led,m);/调用抢答模块store store(score,clr,m,q);/调用加分模块deled deled(q,opin);/调用显示模块endmodulemodule snatch(reset,key,led,m);/抢答模块部分input reset;input1:0 key;output1:0 led;output1:0 m;reg q;reg1:0 s;wire out=key0|key1;wire clk=(!q)&out;assign m=s;always(posedge clk or posedge reset)/判断是否清零if(reset)beginq=1b0;endelse q=1b1;always(posedge clk)/当开始抢答时,判断是否有人抢答,并将抢答的选手记录下来case(key)2b01:s=2b01;2b10:s=2b10;default:s=2b?;endcaseassign led=s;/对应选手的灯亮endmodulemodule store(score,clr,s,q);/加分模块input clr;input2:0 score;input1:0 s;output7:0 q;reg7:0 q;wire clk=score0|score1|score2;/判断是否进行加分always(posedge clr or posedge clk)/判断是清零还是加分beginif(clr) q=8h00;elsebegincase(s)/判断那位选手加分2b01:begin if(q3:04h9)begin if(score=3b001)q3:0=q3:0+4b0001;/选手一加10分else if(score=3b010)q3:0=q3:0+4b0010; /选手一加20分else q3:0=q3:0+4b0011; /选手一加30分end end2b10:begin if(q7:44h9)begin if(score=2b001)q7:4=q7:4+4b0001; /选手二加10分else if(score=2b010)q7:4=q7:4+4b0010; /选手二加20分else q7:4=q7:4+4b0011; /选手二加30分end endendcaseendendendmodulemodule deled(pin,opin);/数码管显示模块input7:0 pin;output31:0 opin;reg31:0 opin;always(pin0 or pin1 or pin2 or pin3 or pin4 or pin5 or pin6 or pin7)/判断是否有加分显示部分begincase(pin3:0)/判断一号选手的分数4b0000:opin15:0=16h3f3f;/显示零分4b0001:opin15:0=16h063f; /显示十分4b0010:opin15:0=16h5b3f; /显示二十分4b0011:opin15:0=16h4f3f; /显示三十分4b0100:opin15:0=16h663f; /显示四十分4b0101:opin15:0=16h6d3f; /显示五十分4b0110:opin15:0=16h7d3f; /显示六十分4b0111:opin15:0=16h073f; /显示七十分4b1000:opin15:0=16h7f3f; /显示八十分4b1001:opin15:0=16h6f3f; /显示九十分endcasecase(pin7:4)/判断二号选手的分数4b0000:opin31:16=16h3f3f; 4b0001:opin31:16=16h063f;4b0010:opin31:16=16h5b3f;4b0011:opin31:16=16h4f3f;4b0100:opin31:16=16h663f;4b0101:opin31:16=16h6d3f;4b0110:opin31:16=16h7d3f;4b0111:opin31:16=16h073f;4b1000:opin31:16=16h7f3f;4b1001:opin31:16=16h6f3f;endcaseendendmodule(2)密码锁module KeyPress(sysclk,reset,keyin,data_out,LED,YN);input sysclk; /系统时钟reg clk; /分频1reg clk2; /分频2input reset; /复位input 2:0 keyin; /三位输入output 7:0 data_out; /八位数码管输入reg 7:0 data_out;output YN; /判断密码正确与否的Led灯reg YN;reg 2:0 keyAA 2:0 ; /输入缓冲,防抖reg 25:0 count; /分频1计数?reg 25:0 count2; /分频2计数reg 3:0 count3; /分频2计数2reg 7:0 countA; /数码管显示延迟计数reg 3:0 key; /输入计数器reg 3:0 num; /数字计算reg 3:0 numSAT3:0; /数字输出reg 3:0 movX; /Led灯选择计数和判断密码reg 3:0 LEDtem; /led灯选择缓冲output 3:0 LED; /led灯选择reg 3:0 LED; reg enterX; /未定义(本来用作可以自定密码的)/分频1always(posedge sysclk or negedge reset) if (!reset) begin count = 26B0; end else if (count=120000)begincount= 26B0;clk = clk;end elsebegin count=count+26B1;end/分频2always(posedge sysclk or negedge reset) if (!reset) begin count2 = 26B0; count3 = 4B0000; end else if (count2=1200000) begin count2 = 26B0; count3 = count3+ 4B0001;if (count3=4B0011)beginclk2= clk2;count3 = 4B0000;end endelsebegin count2=count2+26B1;end/输入always(posedge clk or negedge reset) if (!reset)beginkeyAA0 =3B111;keyAA1 =3B111;keyAA2 =3B111;endelsebeginkeyAA0 = keyin;keyAA1 = keyAA0;end/判断按键并且比较,赋值,主程序always(posedge clk2 or negedge reset)beginif (!reset)beginmovX= 4B0000;enterX= 1B0;numSAT0 = 4B0;numSAT0 = 4B0;numSAT0 = 4B0;numSAT0 = 4B0;YN = 1B1;endelse if (keyin=keyAA1)beginif(keyin=3B110)key=4B0001;else if (keyin=3B101)key=4B0010;else if (keyin=3B011)key=4B0011;/按键1,数值递增,赋值if (key=4B0001)begin #20; num = num+4B1;if(movX=4B0000)numSAT0 = num;else if (movX=4B0001)numSAT1 = num;else if (movX=4B0010)numSAT2 = num;else if (movX=4B0011)numSAT3 = num; if (num=4B1010)num = 4B0;key =4B0011;end/按键2,移位if (key=4B0010)begin #30 movX =movX+4B0001; if(movX=4B0100) begin if(numSAT0=1) if(numSAT1=2) if(numSAT2=3) if(numSAT3=4)YN =1B0;elseYN =1B1;elseYN =1B1;elseYN =1B1;elseYN =1B1;end if (movX=4B0101)movX = 4B0;key=4B0011;end/按键3,未定义if(key=4B0011)beginenterX =1B0;endendend/根据数字,输出到数码管always(posedge clk or negedge reset)beginif (!reset)begindata_out = 8B0011_1111;endelsebegincountA= countA+8B1;if(countA=8B0000_0010)beginLED =4B1110;/高电平有效case(numSAT0)4B0000: data_out=8B0011_1111;/04B0001: data_out=8B0000_0110;/14B0010: data_out=8B0101_1011;/24B0011: data_out=8B0100_1111;/34B0100: data_out=8B0110_0110;/44B0101: data_out=8B0110_1101;/54B0110: data_out=8B0111_1101;/64B0111: data_out=8B0000_0111;/74B1000: data_out=8B0111_1111;/84B1001: data_out=8B0110_1111;/9default: data_out=8B0011_1111;/0endcaseendelse if (countA=8B0000_0100)beginLED =4B1101;case(numSAT1)4B0000: data_out=8B0011_1111;/04B0001: data_out=8B0000_0110;/14B0010: data_out=8B0101_1011;/24B0011: data_out=8B0100_1111;/34B0100: data_out=8B0110_0110;/44B0101: data_out=8B0110_1101;/54B0110: data_out=8B0111_1101;/64B0111: data_out=8B0000_0111;/74B1000: data_out=8B0111_1111;/84B1001: data_out=8B0110_1111;/9default: data_out=8B0011_1111;/0endcaseendelse if (countA=8B0000_0110)beginLED =4B1011;case(numSAT2)4B0000: data_out=8B0011_1111;/04B0001: data_out=8B0000_0110;/14B0010: data_out=8B0101_1011;/24B0011: data_out=8B0100_1111;/34B0100: data_out=8B0110_0110;/44B0101: data_out=8B0110_1101;/54B0110: data_out=8B0111_1101;/64B0111: data_out=8B0000_0111;/74B1000: data_out=8B0111_1111;/84B1001: data_out=8B0110_1111;/9default: data_out=8B0011_1111;/0endcaseendelse if (countA=8B0000_1000)beginLED =4B0111;case(numSAT3)4B0000: data_out=8B0011_1111;/04B0001: data_out=8B0000_0110;/14B0010: data_out=8B0101_1011;/24B0011: data_out=8B0100_1111;/34B0100: data_out=8B0110_0110;/44B0101: data_out=8B0110_1101;/54B0110: data_out=8B0111_1101;/64B0111: data_out=8B0000_0111;/74B1000: data_out=8B0111_1111;/84B1001: data_out=8B0110_1111;/9default: data
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年现代媒体传播理论考试试卷及答案
- 2025年公共英语等级考试试卷及答案解读
- 2025年互联网产品经理考试试题及答案分享
- 2025年人力资源管理师考试卷及答案细解
- 2024年欧盟产业研发投资记分牌
- 夫妻忠诚承诺与共同债务分担协议
- 宠物美容加盟品牌区域市场保护与竞争限制协议
- 智能仓储货架节能环保设计合同
- 国际体育明星代言赛事冠名权合作协议
- 留学住宿环境评估及改善服务合同
- 动物实验生物安全
- 埃里克森的人格发展八阶段
- 雾都孤儿读书报告
- 职业生涯规划家庭影响因素
- 2024年江苏交通文化传媒有限公司招聘笔试参考题库含答案解析
- 安心护行 从个案分析看创伤骨科患者VTE管理低分子肝素合理应用版本
- JGT501-2016 建筑构件连接处防水密封膏
- 实验 验证牛顿第二定律
- 钻孔水文地质工程地质综合编录一览表模板
- 备用柴油发电机定期启动试验记录表
- 国企食堂运作方案
评论
0/150
提交评论