篮球记分牌verilog设计_第1页
篮球记分牌verilog设计_第2页
篮球记分牌verilog设计_第3页
篮球记分牌verilog设计_第4页
篮球记分牌verilog设计_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、数字逻辑设计及应用课程设计报告姓 名: 学 号: 选课号: 79 设计题号: 23 一设计题目篮球比赛数字计分牌二设计要求1分别记录两队得分情况;2进球得分加2分,罚球进球得分加1分;3纠正错判得分减2分或1分;4分别用三个数码管显示器记录两队的得分情况。三设计过程(一) 设计方案 1.模块设计题目中要用三个数码管来记录两队的得分情况,本文采用输出为8421bcd码,外接译码器和数码管的方式来实现。先设计一个带有进位(co)和借位(ci)输出的模块pad,输出端(num)输出4位8421bcd码外接译码器和数码管,pad模块还带有加一输入端(a1),加二输入端(a2),减一输入端(d1),减二

2、输入端(d2)。输入端与开关相接,操作者按下开关即给该端口一个脉冲信号,各输入端口由上升沿触发。如果操作者同时按下多个端口,输出端口将保持原来的信号不变。pad模块功能图见图1-1。 图 1-1 pad模块输入输出端口及功能然后将三个相同的pad模块进行级联,构造为新的模块numberpad,从而得到带有三个数码管的篮球记分牌。甲乙两队都将分别使用这个记分牌。级联图见图1-2。 图 1-2 pad模块级联图2.模块内部的算法流程 每个模块有四个输入端口a1,a2,d1,d2来进行触发,触发事件太多,因此构造rem=a1|a2|d1|d2作为新的触发信号。因此,只要a1,a2,d1,d2中任意一

3、个按键被按下,将会发出一个脉冲,rem也就会产生一个脉冲。但是可能出现多个按键同时按下的情况,这样会产生冲突。所以在always语句块中,进行判断,看是否a1,a2,d1,d2中只有一个处于高电平,若同时处于高电平,则输出维持原来的值不变。判断完端口a1,a2,d1,d2中哪一个输入了以后,就要进行加1,加2,减1,减2的操作。加1分为以下情况:(1)若num已经计数到9即1001,再加1则num应变为0000,进位端co输出1;(2)若num不为9,则直接加1,co输出0。加2分为以下情况:(1)若num已经计数到8即1000,再加2则num应变为0000,进位端co输出1;(2)num已经

4、计数到9即1001。再加2则num应变为0001,进位端co输出1;(3)若num不为8或9,则直接加2,co输出0/。减1分为以下情况:(1)若num此时为0,再减1则num应变为9即1001,借位端ci输出1;(2)若num不为0,则直接减1,ci输出0。减2分为以下情况:(1)若num此时为0,再减2则num应变为8即1000,借位端ci输出1;(2)若num此时为1,再减2则num应变为9即1001,借位端ci输出1;(3)若num不为0或1,则直接减2,ci输出0算法流程图见图1-3 图1-3 算法流程图(二)Verilog程序 (注:在quatus2中不能编写中文注释,这里的注释为

5、后期编写)/将pad级联成新的模块numberpad,其中num1,num2,num3分别输出个十百位的8421bcd码module numberpad(a1,a2,d1,d2,num1,num2,num3);output 3:0 num1,num2,num3;input a1,a2,d1,d2; /a1为加1端口,a2为加2端口,d1为减1端口,d2为减2端口wire co1,co2,co3,ci1,ci2,ci3;pad(a1,a2,d1,d2,num1,co1,ci1); /将三个pad级联pad(co1,0,ci1,0,num2,co2,ci2);pad(co2,0,ci2,0,num

6、3,co3,ci3);endmodule/pad模块,输出为4为8421bcd码,由a1,a2,d1,d2来实现加减1、2,有进位和借位端口module pad(a1,a2,d1,d2,num,co,ci);output reg 3:0 num; /输出4位8421bcd码output reg co,ci; /co 进位信号, ci is 借位信号input a1,a2,d1,d2; /a1为加1端口,a2为加2端口,d1为减1端口,d2为减2端口wire rem;initial num<=4'b0000;assign rem=a1|a2|d1|d2;always (posedg

7、e rem)begin if(a1&&!a2&&!d1&&!d2) /仅a1输入脉冲时加1,必要时进位begin if(num=4'b1001) begin num<=4'b0000; co<=1'b1; end else begin num<=num+4'b0001; co<=1'b0; endendelse if(a2&&!a1&&!d1&&!d2) /仅a2输入脉冲时加2,必要时进位 begin if(num=4'b100

8、0) begin num<=4'b0000; co<=1'b1; end else if(num=4'b1001) begin num<=4'b0001; co<=1'b1; end else begin num<=num+4'b0010; co<=1'b0; end end else if(d1&&!a1&&!a2&&!d2) /仅d1输入脉冲时减1,必要时借位 begin if(num=4'b0000) begin num<=4'

9、b1001; ci<=1'b1; end else begin num<=num-4'b0001; ci<=1'b0; endendelse if(d2&&!a1&&!a2&&!d1) /仅d2输入脉冲时减2,必要时借位begin if(num=4'b0001) begin num<=4'b1001; ci<=1'b1; end else if(num=4'b0000) begin num<=4'b1000; ci<=1'b1; en

10、d else begin num<=num-4'b0010; ci<=1'b0; endendelse /多个端口同时输入,输出保持原来的值begin num<=num; co<=1'b0; ci<=1'b0;endend endmodule(三)仿真结果1.验证加1、加2、减1、减2端口正常,个位到十位进位正常当输入端分别输入加1、加2、减1、减2信号时,输出了相应的结果。18ns时,执行加1操作,个位num1由1001(即9)变成了0,同时向十位进位,十位num2变成了0001。31ns时又有一进位,十位num2变成了0010(

11、即2)。(见图3-1) 图3-1 仿真图像一2.验证十位向百位进位正常由图3-2可得,213ns时已计数到199,即个位num1为1001,十位num2为1001,百位num3为0001。此时输入了加2的信号,输出变成了201,即个位num1变为0001,十位num2变为0000,百位num3变为0010。由此验证了十位向百位进位正常。 图3-2 仿真图像二3验证多个端口同时输入时,保持原值不变从219ns开始到230秒都有多个端口同时输入,由图3-3可以观察到,输出端口的值并未发生改变。 图3-3 仿真图像三四、设计结论 (一)设计结果分析 由以上的仿真图像可知,各端口工作正常,通过给a1、a2、d1、d2端口输入脉冲,可以使输出分别进行加1、加2、减1、减2的操作,且个位到十位、十位到百位进位正常,输出为8421bcd码。当多个端口同时输入时,输出将保持原值,避免了冲突。 (二)设计中遇到的问题 由于a1、a2、d1、d2端口相互独立,刚开始设计时将它们都作为触发端口放在always后面,发现调试总是有冲

温馨提示

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

评论

0/150

提交评论