大一数字逻辑大作业_第1页
大一数字逻辑大作业_第2页
大一数字逻辑大作业_第3页
大一数字逻辑大作业_第4页
大一数字逻辑大作业_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、哈尔滨工业大学数字逻辑课程大作业 大一数字逻辑大作业乒乓球比赛模拟机的设计 题 目: 乒乓球比赛模拟机的设计 院 系: 软件学院 专业年级: 14 姓名与学号: 王峥 1143710510 孙一铀 1143710513 周擎阳 1143710312 指导老师: 张彦航 2015年6月18日目录1 绪论1.1设计目的31.2设计要求32 电路组成及工作原理2.1系统逻辑模型42.1.1系统模块需求42.1.2组员分工42.2系统模块结构42.2.1全局控制模块42.2.1.1连续四脉冲发生单元52.2.1.2数据初始化单元62.2.1.3倒计时显像单元72.2.1.4 开球信号产生单元 82.2

2、.1.5 模块总体设计展示 92.2.1.4.1逻辑图92.2.1.4.1波形图10 2.2.2中央控制模块 10 2.2.2.1程序综述 10 2.2.2.2 代码实现112.2.2.3实现效果13 2.2.3计数模块142.2.3.1局比分计数单元142.2.3.2大比分计数单元15 2.2.3.3数据清零单元16 2.2.3.4信息反馈单元17 2.2.3.5显像管显示单元183 调试过程3.1全局控制模块203.2中央控制模块243.3计数模块264 设计结论275 设计心得与总结28附录一:总体器件表及相关器件的功能表、管脚分布 29附录二:总体设计图 30附录三:仿真结果32附录四

3、:工作说明32参考文献32 1 绪论随着科学技术的发展,人类社会已进入到高度发达的信息化社会, 信息社会的发展离不开电子产品的进步。现代电子产品的发展越来越快, 各种新型电子元器件和智能化的电子产品已经在国民经济的各个领域和人民生活的各个方面得到了日益广泛的应用。实现这种进步的主要原因就是生产制造技术和电子设计技术的发展。其中电子玩具的发展也是在日益成熟。乒乓球游戏机控制电路是有甲、乙双方参赛,自动控制发“球”的三人乒乓球游戏机;它能完成自动裁判和自动计分是一个带数字显示的模拟游戏机。其结构简单、成本低、易操作,安全性强、无污染。乒乓球游戏机还能在娱乐的同时提高我们的反应、应变能力。具有良好的

4、市场发展前景。1.1 设计目的本次课程设计的内容是独立完成一个乒乓球比赛游戏机的设计,采用Max+Plus2电路仿真设计软件完成乒乓球比赛游戏机电路的设计及仿真调试,在微机上仿真实现乒乓球比赛游戏机的设计。通过这次课程设计让我们了解和熟悉了乒乓球游戏机的原理和Max+Plus2仿真设计软件的操作,也让我们加深了解了对双向移位寄存器、双D触发器及逻辑门电路的一些实际用途,并将理论与实践相结合。1.2 设计要求(1) 至少用8个LED排成直线,以中点为界,两边各代表参赛双方的位置,其中一个点亮的LED(乒乓球)依次从左到右,或从右到左移动,“球”的移动速度可以调节。(2) 当球(被点亮的那只LED

5、)移动到某方的最后一位时,参赛者应该果断按下自己的按扭使“球”转向,即表示启动球拍击中,若行动迟缓或超前,表示未击中或违规,则对方得一分。(3) 设计甲乙双方自动记分电路,用数码管显示得分,每记满11分为一局。(4) 甲乙双方各设一个发光二极管表示拥有发球权,每得5分自动交换发球权,拥有发球权的一方发球才能有效。(5) 能显示发球次数。附加功能设计:1、 一方得分,电路自动提示3秒,此期间发球无效2、 某方达到11分后自动清0重新计数,用LED灯管显示获胜局数 2 电路组成及工作原理2.1 系统逻辑模型2.1.1 系统模块需求(1)全局控制模块:1、外界输入的全局开始信号2、接受一个回合的结束

6、信号,在数码管上显示倒计时,倒计时期间发球无效。3、接受一局结束的信号,使大部分单元清0功能。4、接受计数模块送来的换发球信号,交换发球权。(2)中央控制模块:1、外界输入的挥拍信号2、全局控制模块送来的开球使能信号3、模拟球台上显示球的双向移动4、回合结束后给出一个回合的结束信号(3)计数模块:1、接受一个回合的结束信号,在数码管上显示比分计数 2、在数码管上显示发球计数3、在数码管上显示双方获胜局数统计4、一局结束后送出一局结束的信号5、每记满5分送出交换发球信号2.1.2 组员分工(1) 全局控制模块:孙一铀(2) 中央控制模块:周擎阳(3) 计数模块:王铮2.2 系统模块结构2.2.1

7、 全局控制单元2.2.1.1连续四脉冲发生单元1、单元需求:当一个回合开始信号脉冲到来时,从第一个时钟上升沿开始拷贝连续四段波形。2、单元目的:给倒计时显像单元连续四个脉冲便于显像3、单元管脚:(1) Start(In):回合开始信号,由中央控制单元给出,经技术单元转发到该模块(2) Clean(In):清0端(3) Clock(In):时钟端(4) Mb(In):恒为1(5) Ma(In):由数据初始化单元给定(6) D_cp(Out):连续四脉冲输出时钟端4、单元设计思路:该单元由两部分构成,一部分由双D触发器构成,一部分由74194双向移位寄存器构成,采用双D触发器能使在第四个脉冲到来时

8、不再产生多余脉冲(具体原理设计可参见调试过程),采用74194双向移位计数其来控制电路产生正好四个脉冲,从逻辑图中可知,ABC端接地,D端接电源,每次回合开始信号到来时,Ma先送入一个逻辑“1”信号,而Mb端恒为“0”,此时进行读操作,后来Ma置为“0”,此时进行左移操作,当左移四次后,Qa端产生一个下降沿,由双D触发器控制74194不再进行工作,同时数据清0.5、单元逻辑图展示:6、单元波形图展示:2.2.1.2数据初始化单元1、单元需求:当一个开始信号到来时,给出一个Ma的“0-1-0”脉冲,要求该脉冲上升沿与start信号重合,下降沿与start信号后第一个时钟信号的下降沿重合。保证在第

9、一个时钟上升沿到来时2、单元目的:外界信号只有Start、Clock 所以Ma信号一定是由电路自身给定,要求该脉冲正好覆盖start上升沿后的第一个时钟。3、单元管脚:(1) Start(In):回合开始信号,由中央控制单元给出,经技术单元转发到该模块(2) Clock(In):时钟端(3) Ma(Out):初始化信号输出端4、单元设计思路:该单元由三个部分构成,右边的部分由D触发器构成,该部分功能是1个摩2计数器,时钟端仅接法如图所示,仅当start上升沿与有效时钟的下降沿触发。当Start信号上升沿到来时,上部分的D触发器的清0端被置为1,时钟端接收到有效的上升脉冲,Q端输出由0变为1,下

10、方的信号输出方为有效(通过中央与门)。下方的部分由两个D触发器构成,第一个触发器的功能也为模2计数器,第二个触发器的清0端由第一个触发器控制,仅当第一个触发器的Q端输出为一时,第二个触发器才能正常工作,换言之,只有接收到一个时钟上升沿后,再接受一个下降沿才是有效的信号,仅仅一个下降沿的输出是无效的。为什么要这么做呢?由下图波形图所示,由Start信号的任意性可知,Start信号的上升沿后,收到的第一个时钟变化沿可能就是一个下降沿,然而这不是一个完整的时钟信号,不符合我们的需求,所以为了覆盖一个完整的时钟,所以只有当遇到一个时钟上升沿后,送入的下降沿才是有效的。5、单元逻辑图展示:6、单元波形图

11、展示:2.2.1.3倒计时显像单元1、单元需求:根据送入连续四个脉冲分别显示0-3-2-1-0字形。2、单元目的:用7段数码管显示倒计时信号3、单元管脚:(1)Clock(In):时钟端,四个连续脉冲,由连续四脉冲发生单元给出(2)syy_a syy_g(Out):数码管接入信号 (3)Enable(Out):由syy_a给出,经观察发现,syy_a端正好在四个脉冲结束后给出一个上升沿,正好可以作为送给中央控制单元的发球使能信号。4、单元设计思路:该单元分为两个部分,第一个部分为双D触发器构成的模4计数器,第二个部分为译码器电路。设计如下:逻辑表达式如下:a = A+ Bb = 1c = A+

12、 Bd = ae = Bf = A·Bg = AB5、单元逻辑图展示:5、单元波形图展示:2.2.1.4 开球信号产生单元1、单元需求:每一个结束信号到来时,完成以下时序图的转变。2、单元目的:每一回合结束时,交换发球权。3、单元管脚:(1) Change(In):换发球时钟信号,由计数单元给出(2) Ca(Out):逻辑0表示发球权不在a手中(3) Cb(Out):逻辑0表示发球权不在b手中4、单元设计思路:只有3种状态,所以用双D触发器即可实现该同步时序计数器的转换5、单元逻辑图展示:6、单元波形图展示:2.2.1.4 模块总体设计展示2.2.1.4.1逻辑图2.2.1.4.1波

13、形图2.2.2 中央控制模块本单元难度较大,单纯用连线图的方式很难实现因此决定采用vhdl进行硬件语言编程,从而更好的调节程序2.2.2.1程序综述程序图如图所示其中输入:是时钟端,负责接受时钟信号,是开球信号,是使能信号,则是模拟挥拍信号输出:是模拟乒乓球的输出信号,是给计数模块的胜负信号是比赛结束后送给计数模块的一个上升沿端.2.2.2代码实现由于对并不熟悉,在实现过程中部分参考了对代码进行了理解和重写,写出了自己的控制代码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.st

14、d_logic_arith.all;entity CENTER is port (clk:in STD_LOGIC;时钟信号Ca:in STD_LOGIC;端发球信号Cb:in STD_LOGIC;端发球信号Enable: in STD_LOGIC;使能信号a:in STD_LOGIC;挥拍信号b:in STD_LOGIC;挥拍信号ball:out STD_LOGIC_VECTOR(16 downto 0);模拟球的运行Sa:out STD_uLOGIC;是否获胜Sb:out STD_uLOGIC;时候获胜over:inout STD_uLOGIC一局结束提供一个上升沿);end CENTER

15、;architecture behavior of CENTER issignal direction : integer range 0 to 2; 指定方向:未发球signal num : integer range -1 to 17; 确定那盏灯点亮begin process (Enable,clk,a,b,Ca,Cb) begin if Enable = '0' then 使能信号未来,初始化 over <= '0' Sa <= '0' Sb <= '0' num <= 1; direction &

16、lt;= 2; elsif rising_edge(clk) then上升沿进行判断 if direction = 2 then未发球检测发球信号 if Ca = '1' then direction <= 0; num <= 1; elsif Cb = '1' then direction <= 1; num <= 8; else direction <= 2; num <= 1; end if; elsif direction = 0 and num <= 8 then球从 if b = '1' th

17、en此时挥拍 if num >= 6 then击中,反向 num <= num - 1; direction <= 1; Else未击中,结束 direction <= 2; Sa <= '1' Sb <= '0' over <=not over; end if; else num <= num + 1; direction <= 0;未挥拍,继续运行 end if; elsif direction = 1 and num >= 1 then球从 if a = '1' then挥拍 if

18、 num <= 2 then击中,反向 num <= num + 1; direction <= 0; Else未击中,结束 direction <= 2; Sa <= '0' Sb <= '1' over <= not over; end if; else direction <= 1; num <= num - 1;未挥拍,继续 end if; end if;end if; end process;process (num)输出球的运动轨迹begincase num iswhen 1 => ball

19、<="10000000"when 2 => ball<="01000000" when 3 => ball<="00100000"when 4 => ball<="00010000"when 5 => ball<="00001000"when 6 => ball<="00000100"when 7 => ball<="00000010"when 8 => ball<=

20、"00000001"when others => ball <="00000000"end case;end process;end behavior;2.2.2.3 实现效果与预期相同,证明程序正确2.2.3 计数模块2.2.3.1局比分计数单元1.单元需求:来自中央控制模块的回合结束信号,以及表示AB胜负关系的01,10信号2、单元目的:记录单局比分(一局11分)3、单元管脚:CLK、CLN、QA、QB、QC、QD4、单元设计思路:利用74161的异步清零实现11进制加法计数器,利用中央控制模块的回合结束信号,以及表示AB胜负关系的01,

21、10信号,通过与门连接后作为计数器的时钟端,则胜利方每回合结束后其计数器会得到一个信号,是计数器加一,当信号给出1011时计数器清零,并通过计数清零单元实现计数器的同时清零5、单元逻辑图展示:6、单元波形图展示:本部分借用显示管显像单元的波形图展示局分计数器的功能2.2.3.2大比分计数单元1.单元需求:局分计数单元在一局比赛结束后发出的信号2、单元目的:记录双方的大比分3、单元管脚:CLK、QB、QC、QD4、单元设计思路:设置本游戏为九局五胜制,利用74290的五进制功能实现五进制加法计数器,由于74161为异步清零,利用最后1011信号作为作为时钟信号,是每局比赛结束后获胜方大比分加一,

22、当总分为5时比赛结束5、单元逻辑图展示:6、单元波形图展示:如图当A1A11的二极管全亮时(A得11分),QA1由0变1,即大比分加一2.2.3.3数据清零单元1.单元需求:某一方一局得分为11时给出的1011信号2、单元目的:当一方先得到11分时,双分的比分同时清零3、单元管脚:CLK、QA、QB、QC、QD4、单元设计思路:通过与门连接QA、QB、QD端,并由抑或非门连接,当且仅当有一方为1011信号时,异或非的输出端会由1变0,此时传给清零信号,实现清零功能5、单元逻辑图展示:6、单元波形图展示:当A得到11分时,AB的分数同时清零(A1的下一个1的出现是由于下一回合A又得了一分)2.2

23、.3.4信息反馈单元1.单元需求:比分计数器的清零信号,以及中央控制模块的回合结束信号2、单元目的:传递给全局控制单元开球信号、每五个回合换发球的信号以及每局开始信号3、单元管脚:clock、CLK、QA、QB、QC、QD4、单元设计思路:wave1为每五回合换发球信号,由74290设计的五进制加法计数器,利用其每五次一个的清零信号设计成一个,wave2为每局开始时的发球信号,利用局分计数器1011信号,同样可以提供5、单元逻辑图展示:6、单元波形图展示:2.2.3.5二极管显示单元1.单元需求:局分计数器和大比分计数器的记分信号2、单元目的:将二进制数码转换为直观的二极管显示3、单元管脚:A

24、1A11、B1B114、单元设计思路:通过发光二极管点亮的个数表示比分关系。则有下列真值表:A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A1100000 0 0 0 0 0 0 0 0 0 000011 0 0 0 0 0 0 0 0 0 000101 1 0 0 0 0 0 0 0 0 000111 1 1 0 0 0 0 0 0 0 001001 1 1 1 0 0 0 0 0 0 001011 1 1 1 1 0 0 0 0 0 001101 1 1 1 1 1 0 0 0 0 0 01111 1 1 1 1 1 1 0 0 0 0 10001 1 1 1 1 1 1

25、1 0 0 0 10011 1 1 1 1 1 1 1 1 0 010101 1 1 1 1 1 1 1 1 1 010111 1 1 1 1 1 1 1 1 1 1由真值表可得:A1=A+B+C+DA2=A+B+CA3=A+B+CDA4=A+BA5=A+BD+BCA6=A+BCA7=A+BCDA8=AA9=AD+ACA10=ACA11=ACD则可以得出逻辑图,同理可得出大比分计数器的二极管显示单元的逻辑电路5、单元逻辑图展示:6、单元波形图展示:3 调试过程3.1 全局控制模块 By 孙一铀Debug1:连续四脉冲发生单元还还只处于雏形的时候。逻辑图如图所示:但无论如何怎么给波形,Qa,Qb

26、,Qc,Qd四个输出端都是平的,如图所示;后来给出这样的波形以后:发现原来此时给出的第二个时钟上升沿才是有效信号。Bug解决Debug2:当连续四脉冲发生单元还还只处于雏形的时候,控制脉冲有效只用了一个D触发器,如图:那么结果很明显,与我想看到的不同:(第四个脉冲被“吃掉了”)于是采用以下设计,实现上升沿下降沿同时触发反馈:所以:D = Q2, C0(使能信号) = Q1Q2Bug解决:Debug3:未加反相器 变为下降沿触发 使波形与预期不符 Bug解决Debug4:An Bn 的JK端连反导致倒计时变为2.3.1 而不是3.2.1Bug解决3.2 中央控制模块 By 周擎阳Bug1: 第一

27、次设计的时候没有特别熟悉的特性,按照了语言习惯进行了编程,结果自然是错误的:产生这个错误的原因是下意识用了语言的语法,对不够熟悉改正语法错误即可Bug2: 在以前编程中用惯了语句,忘记了语句在中只能用于中,于是写出了如下代码:这也是语言下意识带出来的习惯,编译自然通不过在查阅资料后解决Bug3:初次编程,信号和变量没有分清,:与<= 符号混淆所以写出了如下代码: 其中direction是信号,应该用号,所以出现了以下错误:改正符号即可运行Bug4:虽然得到了纠正,但我依然不知道错误的原因,错误如图:随后我进行了查询,但是并没有找到有关这个错误的具体信息有关代码如下:当我删除elsif 中

28、的后,代码可以运行,错误消除但是深层次原因还带探究3.3 计数模块By 王峥Debug1:最开始本人自行利用D触发器设计了11进制加法计数器,但是在实现2.2.3.2计数清零单元时,发现如果利用触发器自动清零,那么在最后不会出现1011信号,若利用0000信号清零,那么会从头到尾不会出现信号变化,如图所示:于是本人重新设计了计数器的部分,利用异步清零,使信号1011短暂出现,这样就为清零提供了不会与自身计数信号混淆的信号于是出现如上的信号波段Debug2:在设计之初,为各模块接口之间的简便,曾试图只利用AB胜负关系的信号01/10,而时钟端则有计数电路自己制造,但是经过简单实验发现,由于单回合

29、的进行时间不确定,单回合时钟需要有延时功能,这样大大复杂化了电路,同时是问题变得更难,于是利用上一模块的时钟,通过简单的与运算创造出了表示AB胜负关系的时钟端,如图所示:Debug3:由于各元件之间触发需求不同,各信号的处理存在差异,如清零信号需要0触发,而时钟端又存在上升沿和下降沿之分,于是在忽略这一问题的初始阶段,波形图存在明显的较大延时而经过非门的运用,延时被明显缩短 4 设计结论本系统外接输入共三个,(1) start:外接游戏开关(2) A:A玩家挥拍信号(3) B:B玩家挥拍信号本系统共四组显像单元:(1) 倒计时七段数码管(2) 球台LED灯显示(3) 局比分计数LED(4) 总

30、比分计数LED本系统共2组内部时钟输入:(1) cond_counter:秒钟计时端,用于倒计时显像单元。Ps:因秒钟单位太大,在模拟中给出周期为4ns。(2) clk:球移动计时端,该时钟用于控制“球”移动的速度实现功能:略(详见 1.2设计要求,功能已基本实现。注:未实现显示发球次数功能,因为每发球五次自动换发球,故显示此数据无意义)5 设计心得与总结孙一铀:从最开始的拿到题目毫无头绪,到一步步画出最终硬件图与波形图,组员们都付出了很多。首先从最开始的模块架构设计说起,由于大作业不是由个人完成的,而是处于一种团队合作的模式中,处于这种模式中,分工首先是必须明确的。对于整个系统的架构,我想过

31、好多种方式来实现,最初设计的架构图,各模块之间耦合性太强,导致很容易出现你不小心把我的模块中的一个小功能实现了,由于人与人之间思维的方式不同,你实现的方式不符合我模块的需求,会产生冲突。经过好几轮的修改,最终形成了三大模块分立的形式,模块之间信息的传递都是以异步时钟的方式来实现的。由于我参与了总架构的设计整合与报告的撰写,所以我分给自己的模块相对较为简单,大体上就是一个一个倒计时与换发球的功能,但真正着手以后发现,其实难度比想象中的大很多,因为每次倒计时结束以后必须将数据清0,重新计数,而外界能给你的信号只有一个回合开始信号,我需要把这一个信号作为74194的Ma脉冲信号,还得控制脉冲的延时,作为部分

温馨提示

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

评论

0/150

提交评论