华中科技大学数字逻辑课程设计1_第1页
华中科技大学数字逻辑课程设计1_第2页
华中科技大学数字逻辑课程设计1_第3页
华中科技大学数字逻辑课程设计1_第4页
华中科技大学数字逻辑课程设计1_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

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

文档简介

1、华 中 科 技 大 学 课 程 设 计 报 告数字电路与逻辑设计课程设计报告团队成员姓名班级学号贡献百分比课程设计实验部分:实验完成情况、时间(亮点、完成、部分完成)总分(实验部分70% +报告30%)设计1设计2检查结果检查名次检查老师报告人 : 实验指导教师: 报告批阅教师: 计算机科学与技术学院2016 年 9月 28 日数字逻辑课程设计学生工作表 班 级姓 名学 号验收时间(教师填写)(学生填写)课设进度记录(学生填写)各自承担课程设计具体工作量记录1、姓名: (1)设计1:a.顶层clock模块的编写和测试b.分钟秒钟clock60模块的编写和测试c.分频 dclk 、dclk2模块

2、的编写和测试d.led灯模块的编写和测试(2)设计2:a.电梯状态判断模块的编写和测试b.电梯运行控制模块的编写和测试c.电梯开关门模块的编写和测试d.主模块的编写和各个模块的整合e.电梯指示灯模块的编写和测试2、姓名: (1)设计1:a.降频dclk3模块的编写和测试b.整点提示ring模块的编写和测试c.小时clock24模块的编写(2)设计2:a.降频dclk模块的编写和测试b.电梯升降模块的编写和测试c数码显示管模块的编写和测试3、难点、亮点(1)电子钟设计中,修改时间的功能中,可以实现快速地,自动加、减修改时间,方便快捷。其难点在于如何实现快速修改和如何实现又加又减修改,具体解决方法

3、见下文。(2)电梯设计中,亮点有:每个按键都有指示灯,很明确哪一层有请求,到了该层灯就灭了。这个设计难点在于按键区分上下键,状态转移条件多,输入变量繁多日期进度9.21(1)接受任务;(2)决定设计1的题目和二人的任务分配;(3)大体明确设计1的整体结构设计;9.22(1) 完成设计1的降频dclk3模块编写和测试;(2) 协助测试clock60模块;9.23(1) 完成设计1整点提示ring模块编写和测试;(2) 编写时钟clock24模块。9.24(1) 完成设计1的clock24模块编写和测试;(2) 完成与主模块的变量统一。9.26(1) 决定设计2的题目和二人任务分配;(2)大体明确

4、设计2的整体结构设计;9.27(1) 完成设计2降频模块和数码显示管模块的编写和测试;(2) 协助同组调试bug9.28(1) 完成电梯指示灯模块的编写和测试(2) 整合主模块9.29(1)编写报告9.30(2) 编写报告实验平台故障记录(学生填写,请注明实验平台的编号)重要说明1、 时间安排:课内2周。2、 验收准备:1) 完成本表学生应该填写部分;2) 同组的每位学生必须都能以独自完成的方式应对任何形式的验收;3) 完成课程设计报告书(格式参见模板);4) 将源程序和报告的电子文档交班长。3、 检查过程: 1) 提交验收准备材料,请求老师验收,之后按验收老师的要求做;2) 在开发平台上根据

5、验收老师的要求进行演示;3) 检查过程中独立回答老师提出的相关问题;4) 验收老师有权根据具体情况调整验收的内容与方式;5) 验收完成后关闭电源,整理好设备。4、 评分标准:1) 同组者工作量的分配;2) 在完成控制器基本要求外,有亮点为加分项;3) 在规定时间内完成控制器基本要求;4) 在规定时间内完成控制器部分基本要求;5) 检查时间。5、 课程设计判定为不合格的一些情形: (本人已阅读此条款1-5项:签名 )1) 请人代做或冒名顶替者;2) 替人做且不听劝告者;3) 课程设计报告内容抄袭或雷同者;4) 课程设计报告内容与实际实验内容不一致者;5) 课程设计代码抄袭者。目 录1课程设计概述

6、71.1课设目的71.2课设要求71.3课设任务71.4实验环境82基本方案设计92.1电子钟设计92.1.1目的92.1.2内容92.1.3设计思路92.1.4代码实现102.1.5仿真142.1.6主要故障162.1.7功能测试192.1.8实验中遇到的主要问题及解决方法262.1.9层次设计的体会262.2电梯控制系统设计282.2.1目的282.2.2内容282.2.3设计思路292.2.4代码实现302.2.5仿真过程332.2.6主要故障332.2.7功能测试362.2.8实验中遇到的主要问题及解决方法473总结与心得483.1课设总结483.2课设心得484 参考文献49附 录1

7、(源程序)50附 录2课程设计报告的格式要求补充说明87881 课程设计概述1.1 课设目的(1)掌握Vivado软件的使用方法;(2)熟悉FPGA器件的使用方法;(3)用Verilog HDL进行较复杂逻辑电路的设计和调试;(4)学习数字系统的设计方法;(5)通过规范化的实验报告,培养学生良好的文档习惯以及撰写规范文档的能力。1.2 课设要求(1)能够全面地应用课程中所学的基本理论和基本方法,完成从设计逻辑电路到设计简单数字系统的过渡;(2)能力独立思考、独立查阅资料,独立设计规定的系统;(3)能够独立地完成实施过程,包括电路设计、调试、排除故障、仿真和下载验证。1.3 课设任务本次课程设计

8、每组要完成两个设计任务,具体参见数字逻辑课程设计题目。(1)各组要制定出详细设计方案,明确成员各自分工,认真记载毕业设计工作日记;(2)通过Verilog HDL完成规定的设计任务,采取模块化、层次化的设计方法设计电路,然后进行编译和仿真,认真记录实施过程中遇到的各自故障以及解决方法,保证设计的正确性;(3)生成bit文件,下载到开发板上,通过实际线路进行验证设计的正确性;(4)撰写设计报告,并对存在的问题进行分析、提出改进意见。1.4 实验环境开发环境为Vivado 2015.2软件和开发板NEXYS 4(芯片为XC7A100TCSG324-1,封装为CSG3242)。 Vivado 201

9、5.2是使用Xilinx FPGA必备的设计工具。它可以完成FPGA开发的全部流程,包括设计输入、仿真、 综合、布局布线、生成bit文件、配置以及在线调试等功能。 Nexys4 开发板简介:参见图1-1所示,它是一款简单易用的数字电路开发平台,可以支持在课堂环境中来设计一些行业应用。大规模、高容量的FPGA,海量的外部存储,各种USB、以太网、以及其它接口、这些让Nexys4-DDR能够满足从入门级组合逻辑电路到强大的嵌入式系统的设计。同时,板上集成的加速度、温度传感器,MEMs数字麦克风,扬声器放大器以及人量的I/O设备,让Vexys4-DDR不需要增添额外组件而用于各种各样的设计。注意:开

10、发板提供的时钟信号频率为100Mhz,对应的引脚封装编号为“E3”。 图 1-1 Nexys4通用I / O设备2 基本方案设计2.1 电子钟设计2.1.1 目的(1)掌握较复杂的逻辑设计和调试(2)学习用原理图+Verilog HDL语言设计逻辑电路;(3)学习数字电路模块、层次设计;(4)掌握Vivado软件的使用方法;(5)熟悉FPGA器件的使用。2.1.2 内容(1)设计并利用Nexys4 开发板来实现一个电子钟,它具有下述功能:a. 开发板上的6个7段数码管显示:时、分、秒;b. 能使电子钟复位(清零);c. 能启动或者停止电子钟运行;d. 在电子钟停止运行状态下,能够修改时、分、秒

11、的值;e. 具有整点提示功能。(2)要求整个设计为模块化系统分为若干模块,参见图2-1所示。(3)将设计的代码下载到开发板上验证设计的正确性。2.1.3 设计思路本设计要求顶层采用原理图设计,各底层均采用Verilog HDL设计,参见图2-2所示。(1)时钟用一个模24的计数器来实现;FPGA6位7段数码管显示:时、分、秒时钟信号复位、启/停信号修改时、分、秒信号整点提示信号图2-1 电子钟的系统框图(2)分钟和秒钟要求分别用一个模60的计数器来实现;(3)要实现自动计时,则需要利用开发板提供的100Mhz提供脉冲,还需要一个分频的模块dclk,使其吻合时钟速度;(4)整点提示功能则用一个r

12、ing的模块实现,分钟进位时开始计数从而实现提示5秒。clock(顶层模块)clock24 (时钟计数)clock60 (分钟和秒钟计数)ring (实现整点提示)dclk (分频,提供1Hz的时钟脉冲)各底层图2-2 电子钟模块图2.1.4 代码实现顶层模块首先要设计系统的原理图,然后用Verilog HDL实现它,底层各模块均采用Verilog HDL语言设计。电子钟顶层原理图,参见图2-3所示。图2-3 电子钟顶层原理图(1)顶层模块clock(用于整合整个时钟系统)Verilog 代码见同组(2)底层模块clock24(用于时钟计时、校时及显示)Verilog 代码程序2-1:底层模块

13、clock24(用于时钟计时、校时及显示)Verilog 代码module clock24(clk,cp,clkh,hclr,hclk,htiming,sub,co,noon,y0,y1);input clk,clkh,hclr,hclk,htiming,sub,cp;output reg co,noon;output reg 3:0y0;output reg 3:0y1;reg cp_d;initial begin co=0; noon=0;y0=0;y1=0; endalways (posedge clk) /较高频时钟信号 begin cp_d<=cp; if(htiming=1)

14、 /暂停且增加 begin y0=y0+1; if(y0=10) begin y0=0;y1=y1+1; end if(y1=2&&y0=4) begin y1=0;y0=0; end end else if(sub=1) /暂停且减少 begin if(y1=0&&y0=0) begin y1=2;y0=3; end else if(y0=0) begin y0=9;y1=y1-1; end else y0=y0-1; end if(!cp_d&&cp) begin co=0; if (hclr=1) /清零 begin co=0; noon=

15、0;y0=0;y1=0; end else if(clkh)&&(hclk=0) /暂停信号为0且来自分钟的进位为1 begin y0=y0+1; if(y0=10) begin y0=0;y1=y1+1; end if(y1=2&&y0=4) begin y1=0;y0=0;co=1; end end end endendmodule(3)底层模块clock60(用于分钟、秒钟的计时与校时)Verilog 代码见同组(4)底层模块dclk3(用于提供1Hz脉冲)Verilog 代码程序2-2:底层模块dclk3(降频提供1hz脉冲)Verilog 代码modu

16、le dclk3(input high,output reg low); /降频模块 reg 100:0 counter; initial begin low=0;counter=0; end always (posedge high) /高频信号上升沿 begin if(counter>=55555553) begin low<=low; /反转一次 counter<=0; end else counter<=counter+1; end endmodule(5)底层模块led()Verilog 代码见同组(6)底层模块ring(用于整点提示)Verilog 代码程序

17、2-3:底层模块ring(整点提示5秒)Verilog 代码module ring(cclk,cc1,cc2,loud,tclk);input cclk,cc1,cc2,tclk;output reg loud;reg 2:0cont; /计数变量initial begin loud=0; cont=0; endalways (posedge cclk) begin if(tclk=0) /时钟上升沿 begin if (cc2&&cc1) /分钟和秒的进位都为1 begin loud = 1; cont = 0; end if (loud) cont = cont + 1;

18、if (cont = 6) loud = 0; end endendmodule(7)仿真模块clock_tb(用于测试模块正确性)Verilog 代码见同组(8)分频模块dclk、dclk2(用于获得不同频率的脉冲)Verilog 代码见同组2.1.5 仿真为了验证设计的正确性,对ring模块进行了仿真,具体过程如下:(1)顶层模块仿真见同组(2)底层模块仿真目的:验证系统的基本功能,包括计时、暂停、清零、设置时间,不包括七段显示器部分。 输入:共7个,分别为:clk(时钟),clr(清零),tclk(暂停),timing(时钟暂停)2:0con,2:0sub(暂停修改时间)。仿真输出:共7

19、个,分别为:3:0s0 ,3:0s1(秒钟)3:0m0,3:0m1(分钟)3:0h0, 3:0h1(时钟), speaker(整点提示)。Ring、clock24模块仿真文件如下:程序2-4:Ring、clock24模块仿真文件module clock_tb();reg clk,clr,tclk,timing;/timing启动键reg 2:0con;reg 2:0sub;wire speaker,c,light;wire 3:0s0;wire 3:0s1;wire 3:0m0;wire 3:0m1;wire 3:0h0;wire 3:0h1;wire low;wire 6:0count;wi

20、re 7:0state;clock HUD (clk,clr,tclk,timing,con,s0,s1,m0,m1,h0,h1,sub,speaker,c,light,count,state,low);initial begin clk=0;timing=0; forever #0.01 clk = clk; end initial begin clr=0;tclk=0;con0=0;con1=0;con2=0;sub0=0;sub1=0;sub2=0;end endmodule。ring模块仿真图如图2-4(a)所示。整点报时5个单位时间 图2-4(a) 电子钟ring模块仿真测试图Clo

21、ck24模块仿真图如图2-4(b)所示。 图2-4(b) 电子钟clock24模块仿真测试图 00:59:59进一位2.1.6 主要故障(1) 故障1 (判断语句失效)问题描述:某些地方的判断语句不生效。如在clock60模块中,用了判断语句if(v1,v0 = 59)。问题分析:这些判断语句失效的地方全为 if(var1,var2 = xx),经过单独测试和查阅资料,var1,var2这种形式只能用于赋值语句,判断语句无效。解决方法:将判断条件改为if(v1=5&&v0=9)。(2)故障2(开发板显示管显示不了数字)问题描述:只显示一个0问题分析:七段显示管的模块中的时钟频率

22、用了秒钟频率,显示频率太低,不能同时显示每个管;解决方法:再写一个分频模块,给七段显示管的模块提供一个快的时钟频率。(3)故障3(清零故障)问题描述:清零时只有秒钟清零,分钟和小时都未清零。 分钟问题代码部分如下: a.主模块调用部分(clks为进位信号): clock60 c2(.clks(co1),.sclr(clr),.sclk(tclk),.stiming(com1),.co(co2),.v0(m0),.v1(m1);b.分钟计时模块部分(clks为进位信号): 问题分析:分钟和小时的时钟是秒钟和分钟的进位,当清零置为1时,还要等分钟和秒钟的进位才能使小时和分钟置零,所以不能成功置零。

23、解决方法: 加一个时钟,清零的时钟是总时钟clk,分钟小时计时的时钟是进位。要达到这个目的,需同步时钟异步化,即在always下用if语句判断进位。 修改代码如下: a.主模块调用部分clock60 c2(.clk(low),.clks(co1),.,.sclr(clr),.sclk(tclk),.stiming(com1),.co(co2),.v0(m0),.v1(m1);b.分钟计时模块部分清零暂停用另外时钟(clk)来判断(clks为进位信号):计时用进位来判断(clks为进位信号):(4)故障4(秒钟进位故障)问题描述:秒钟加到60变成00后,分钟未加1,秒钟再加1变成01后分钟才加1

24、。即秒钟由59变成00和进位分钟加1时间不统一。问题代码如下:问题分析:秒钟到60后变成00,产生进位。但只有在产生进位下一刻分钟才加1,此时秒钟加到了01。解决方法:秒钟到59时产生进位,修改代码如下(5)故障5(时钟进位故障)问题描述:分钟加到59后,秒钟由00加到01,时钟就加1了。问题分析:由于在故障4中的修改,分钟为59后就产生了进位,所以下一秒时钟就加1了。解决方法:将时钟计时时钟由分钟进位co2,改为分钟进位co2和秒钟进位co1的与,即由co2改为co2&&co1。(6)故障6(整点报时故障)问题描述:整点报时的时候ring一直亮。问题分析:ring亮5秒钟的计

25、数变量cont定义错了,写成了reg cont,此时cont根本加不到5,所以ring不能置零。解决方法:修改reg cont为reg 2:0cont。(7)故障7(修改时间的故障)问题描述:没按暂停键也能修改。问题分析:修改条件与暂停条件无关,未暂停也能进行修改。解决方法:判断修改条件的时候必须满足暂停条件,即暂停和修改信号相与一下,例如:and a1(com0,tclk,con0)。其中con0是秒钟修改信号,tclk是暂停信号,com0是秒钟暂停且修改信号,只有com0等于1时,才能修改秒钟。分钟时钟同理2.1.7 功能测试共进行了4项测试,它们分别为:时钟计数及进位功能测试,暂停及时间

26、设置功能测试,整点报时功能测试,清零功能测试。(1)时钟计数及进位功能测试让时钟从零开始自动计数,并且观察。参见图2-5,图2-x(b),图2-x(c),所示,预期结果为时钟正常计数,速率与真实时间一致,并在到达一分钟时可以正常进位。图2-5 自然计时照片13秒图2-6 自然计时照片45秒图2-7 自然计时照片1分03秒(产生进位)从以上照片可以看出,计时功能正常,且进位正常。(2)暂停及时间设置功能测试在1:09按下暂停键,并且观察。参见图2-8,图2-9,所示,预期结果为时钟暂停正常计数。 图2-8 按下暂停键前 图2-9 按下暂停键,暂停计数设置功能测试,共有6个改变时间的按键(秒+-、

27、分钟+-、时+-)篇幅有限此处只展示对时+进行测试:按下暂停键,再按下“小时+”按键,参见图2-10,图2-11,图2-12,所示,预期结果为小时以较快的速度自动增加,“小时+”按键置0时停止增加。图2-10 “小时+”键按下后小时增加图2-11 “小时+”键按下后小时增加,且能够进位图2-12 “小时+”键置0后小时不变,回到暂停状态“小时减”按键图2-13“小时减”键置1后某时刻图2-14“小时减”键置0后某时刻从以上测试可以说明,暂停功能正常,且修改时间功能正常。(3)整点报时功能测试把时间调到23:59:56,让时钟正常计数,观察最右侧的整点报时灯是否能亮,亮几秒,参见图2-15,图2

28、-16,图2-17,图2-18所示,预期结果为在00:00:00亮,亮5秒后熄灭图2-15 把时钟调到此时间点,释放暂停键图2-16 在00:00:00时刻报时灯亮起图2-17 持续亮5秒钟图2-18 5秒后灯熄灭从以上照片可以看出,整点报时功能正常。(4)清零功能测试在上述时钟00:00:06时刻按下清零键,观察是否清零,参见图2-19,图2-20,所示,预期结果为时钟变为00:00:00图2-19 在此状态按下清零键图2-20 时钟变为00:00:00从以上照片可以看出,清零功能正常。2.1.8 实验中遇到的主要问题及解决方法 表2-1 主要问题及解决方法问题解决方案如何模拟时钟系统以低位

29、的进位做高位的时钟脉冲(即秒钟进位做分钟的clk,分钟进位做时钟的clk)如何对应时钟输出由于每个计数器都是采用“个位”和“十位”分别计数,则使该位连接到相应的灯上输出即可,最高位则使用七段译码器进行转换,因此增加一个LED的模块实现该功能如何显示上下午两个层面:1.时钟采用24进制计时;2.增加一个管脚连灯,判断当时钟为0,12区间内则亮灯,否则灭灯。本系统采用24进制计时。如何提供1Hz的时钟脉冲以100Mhz时钟脉冲为输入脉冲,每个上升沿计数一次,计数变为55555555时目标脉冲反转一次,得到的脉冲即为1hz的时钟脉冲如何实现校时功能修改是增加时,按秒钟计时的方法让其自动增加;修改是减

30、小时,重新写个减的方法,秒钟和分钟减到0就变成59,时钟减到0就变成23。如何实现整点报时当分钟进位标志和秒钟进位标志都为1时,整点报时信号为1,并设置一个计数器,在整点报时信号为1时开始计数,计到5时在使整点报时信号为0。如何使修改时钟频率更快再写个分频模块使得分出来的频率更快,在这个频率下实现修改功能。2.1.9 层次设计的体会本实验由一个顶层模块clock来整合实现整个时钟系统的所有功能,其下有5个模块:dclk(提供分频脉冲),clock24(时钟计数器),clock60(分钟、秒钟计数器),ring(实现整点提示),led(提供时钟显示功能),其中dclk分3为个不同频率,构造方法类

31、似,dclk负责提供高于1hz的脉冲,用于修改时钟时更加快速;dclk2负责提供led灯的扫描时钟;dclk3负责提供1hz的时钟脉冲。clock24用来实现小时的计数,满24置为0。clock60用来实现分钟、秒钟的计数,满60进一位,变为00。Ring用来实现整点提示5秒,即相应的灯亮5秒。Led用来实现7段数码显示管的译码和显示。顶层模块中调用其他底层模块,使得各部分功能并发进行。2.2 电梯控制系统设计2.2.1 目的(1)掌握较复杂的逻辑设计和调试(2)掌握用原理图+Verilog HDL语言设计逻辑电路;(3)学习数字系统设计方法;(4)掌握Vivado软件的使用方法;(5)熟悉F

32、PGA器件的使用。2.2.2 内容(1)电源开关同时作为 电路总清零信号 (Reset),当 Reset = Off 不工作、为 On 时电路进入初始状态,且电源指示灯亮(又称电梯运行指示灯),电梯初态可在任意楼层;(2)电梯可上行、下降,它到达某楼层开门后有 5s 的自动关门设置,若在这 5s 期间,按下关门键,则立刻关门;(3)电梯处于某层时,可以选择要到达的楼层,但是选择本楼层没有任何反应;(4)能显示电梯当前所在楼层;(5)电梯上行时,上行指示灯亮,下行指示灯灭;(6)电梯下行时,下行指示灯亮,上行指示灯灭;(7)电梯门打开时,开门指示灯亮,否则,灭;(8)电梯门关闭时,关门指示灯亮,

33、否则,灭;(9)电梯运行原则原则 1:每个被选择的楼层都要停,然后继续运行;原则 2:相邻两层运行时间为 10s,采用时间倒计时实现;原则 3:目前运行方向优先,仅当电梯已到达当前设定的最高或最低层后,方能改变设定的运行方向和楼层;结合上面的设计内容 ,参见图 2- 26采用Verilog HDL 设计,在开发板上验证设计的正确性 。(1)利用开发板上的 2 个 7 段数码显示管作为电梯当前所在楼层的显示;(2)利用开发板上的 2 个 7 段数码显示管作为相邻两层运行时间(10s,)采用倒计时的显示;(3)设计者可以灵活利用开发板上的输入、输出信号来实现所需。2.2.3 设计思路本电梯控制器系

34、统包含一个主模块和六个底层模块:如图2-25,图2-25电梯模块图(1) 主模块(lift)用于定义、初始化输入输出变量和整合整个电梯系统。 (2) 电梯状态判断模块(lift_state)用于处理电梯各种运行状态并进行设置。(3) 电梯运行控制模块(cortrol_systerm)这个模块为核心模块,用于控制电梯的运行。(4) 电梯开关门模块(stop)用于处理停下来时门的开关其中要实现5s自动关门。(5) 电梯指示灯模块(light)用于处理电梯灯的亮灭。(6) 电梯数码管显示模块(display)用于处理电梯各种运行状态并进行设置。(7) 电梯升降模块(rise_down)用于处理电梯升

35、降状态设置。图2- 26电梯系统框图2.2.4 代码实现顶层模块首先要设计系统的原理图,然后用Verilog HDL实现它,底层各模块均采用Verilog HDL语言设计。电梯顶层原理图,由于过于复杂,此处省略。(1)顶层模块lift(用于整合整个电梯系统)Verilog 代码见同组(2)底层模块rise_fall(用于电梯升降状态控制)Verilog 代码程序2-5:底层模块rise_fall的Verilog 代码always (posedge clkFloor) begin if(liftState = 1) begin currentFloor <= currentFloor +

36、1; end else if(liftState = 2) begin currentFloor <= currentFloor - 1; end end (3)底层模块lift_state(用于判断电梯运行状态)Verilog 代码见同组 (4)底层模块stop(用于电梯静止状态控制,控制开关门)Verilog 代码见同组(5)底层模块light(用于电梯灯的亮灭控制)Verilog 代码见同组(6)底层模块display(用于七段显示管显示)Verilog 代码程序2-6:底层模块display的Verilog 代码always (posedge clk) begin if(qSca

37、n = 9999) begin scan <= scan; qScan <= 0; end else begin qScan <= qScan + 1; end end always (posedge scan) begin k=k+1;endalways (k) /扫描信号 begin case(k) 0: begin sevenF<=0; sevenM<=1; sevenJ<=1; sevenK<=1; end 1: begin sevenF<=1; sevenM<=0; sevenJ<=1; sevenK<=1; end

38、2: begin sevenF<=1; sevenM<=1; sevenJ<=0; sevenK<=1; end 3: begin sevenF<=1; sevenM<=1; sevenJ<=1; sevenK<=0; end endcase if(sevenM = 0) eightDecode = 8'b00000011; /未用到的两个led else if(sevenK = 0) eightDecode = 8'b00000011; else if(sevenF = 0) begin case(currentFloor) /

39、显示当前楼层 1: eightDecode = 8'b10011111; 2: eightDecode = 8'b00100101; 3: eightDecode = 8'b00001101; 4: eightDecode = 8'b10011001; 5: eightDecode = 8'b01001001; 6: eightDecode = 8'b01000001; 7: eightDecode = 8'b00011111; 8: eightDecode = 8'b00000001; default: eightDecode

40、= 8'b11111111; endcase end else if(sevenJ = 0 && (liftState = 1 | liftState = 2) begin case(runTime) /显示运行时间 1: eightDecode = 8'b10011111; 2: eightDecode = 8'b00100101; 3: eightDecode = 8'b00001101; 4: eightDecode = 8'b10011001; 5: eightDecode = 8'b01001001; 6: eightD

41、ecode = 8'b01000001; 7: eightDecode = 8'b00011111; 8: eightDecode = 8'b00000001; 9: eightDecode = 8'b00001001; default: eightDecode = 8'b00000011; endcase end else if(sevenJ = 0 && liftState = 3) begin case(doorTime) /显示开门倒计时 1: eightDecode = 8'b10011111; 2: eightDeco

42、de = 8'b00100101; 3: eightDecode = 8'b00001101; 4: eightDecode = 8'b10011001; 5: eightDecode = 8'b01001001; default: eightDecode = 8'b00000011; endcase end else begin eightDecode = 8'b00000011; end if(powerButton = 0) begin eightDecode = 8'b00000011; end end (7)底层核心模块cort

43、rol_systerm(用于控制电梯运行)Verilog 代码见同组2.2.5 仿真过程见同组2.2.6 主要故障(1)故障1(功能缺失)问题描述:电梯外只有一个按键,没有区分上下键。问题分析:这样导致内外按键没有区别,且不符合设计要求。解决方法:区分外部上下键,重新更改各个模块的判断变换条件,由于这个故障的修改涉及几乎所有代码,这里就不给出实例了。(2)故障2 (开门的问题)问题描述:当前楼层电梯外按上升下降电梯门不开,即电梯状态不改变。问题分析:在电梯状态改变模块中,没有考虑到在本层楼时有外部按键信号的情况。解决方法:加上上述情况的判断,修改代码如下修改前: case(currentFlo

44、or) 1: begin if(liftState = 0 ) begin liftState <= 3; mark <= 0; end 修改后(在本层楼有外部按键信号的时候,电梯也进入3状态即开门状态): case(currentFloor) 1: begin if(liftState = 0 && outfloorButton1) begin liftState <= 3; mark <= 0; end (3)故障3 (开门的问题)问题描述:手动按了开门后,电梯到了别的楼后不会5s自动关门。问题分析:设计的问题,在问题代码中当关门信号为1时,5s 自动关门的计时变量doorTime变成了0(实现立刻关门),但是下次进到这个模块时,由于doorTime等于0,它便不开始倒计时。解决方法:设置一标志变量,每次进入关门时变量置1,在模块外只要这个变量为1,doorTime就变成5。修改前: if(closeButton = 1) begin doorState <= 0; do

温馨提示

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

评论

0/150

提交评论