数电课设报告.docx
《数电课设报告.docx》由会员分享,可在线阅读,更多相关《数电课设报告.docx(69页珍藏版)》请在冰点文库上搜索。
数电课设报告
数字电路与逻辑设计
课程设计报告
题目:
电梯控制器的设计与实现
专业:
班级:
学号:
姓名:
电话:
邮件:
分组:
完成日期:
指导教师:
团队成员:
姓名
班级
学号
贡献百分比
实验部分完成情况
(亮点、完成、基本完成、未完成、时间)
总分:
实验部分70%+
报告30%)
检查老师签名:
1课程设计概述
1.1课设目的
通过硬件描述语言VHDL的编程,深入了解并掌握可编程芯片PLD的设计技术,加强学生对《数字逻辑》课程所学知识综合利用的能力。
培养学生创造性思维能力和独立解决实际问题的能力。
1.2课设要求
(1)能够全面地应用课程中所学的基本理论和基本方法,完成从设计逻辑电路到设计简单数字系统的过渡。
(2)能力独立思考、独立查阅资料,独立设计规定的系统。
(3)能够独立地完成实施过程,包括安装、布线、测试和排除故障。
1.3课设任务
(1)制定出详细设计方案;
(2)通过VerilogHDL完成规定的设计任务,然后进行编译和仿真,保证设计的正确性;
(3)生成容丝图文件,下载到Basys2开发板,通过实际线路进行验证;
(4)对复杂系统的设计采取模块化、层次化的设计方法;
(5)撰写设计报告,并对存在的问题进行分析、提出改进意见。
1.4实验环境
开发环境ISEProjectNavigator:
ISE是使用XILINX的FPGA的必备的设计工具。
目前官方提供下载的最新版本是14.4。
它可以完成FPGA开发的全部流程,包括设计输入、仿真、综合、布局布线、生成BIT文件、配置以及在线调试等,功能非常强大。
ISE除了功能完整,使用方便外,它的设计性能也非常好,拿ISE9.x来说,其设计性能比其他解决方案平均快30%,它集成的时序收敛流程整合了增强性物理综合优化,提供最佳的时钟布局、更好的封装和时序收敛映射,从而获得更高的设计性能。
先进的综合和实现算法将动态功耗降低了10%。
Basys2开发板:
Basys2开发板是一个电路设计实现平台,任何人都可以通过它来搭建一个真正的数字电路。
Basys2是围绕着一个XilinxSpartan-3EFPGA芯片和一个AtmelAT90USBUSB控制器搭建的,它提供了完整、随时可以使用的硬件平台,并且它适合于从基本逻辑器件到复杂控制器件的各种主机电路。
Basys2板上集成了大量的I/O设备和FPGA所需的支持电路,让用户能够构建无数的设计而不需要其他器件。
用户设计可以不局限于Basys2板本身,还可以通过四个标准的扩展连接口延伸到面包板、用户自定义电路或Pmod模板中。
所有6针接口上的信号都受到ESD和短路保护,从而确保在任何环境中的使用寿命。
Basys2开发板兼容所有版本的XilinxISE工具。
Basys2附带一个用于供电和编程的USB下载线,所以就不需要其他供电器件或编程下载线。
2基本方案设计
2.1设计需求
(1)电源开关同时作为电路总清零信号,当其状态为Off不工作,为On时电梯电路进入工作状态;
(2)电源打开,电源指示灯亮;
(3)电梯门开时,开关门指示灯亮,否则,灭;
(4)电梯上行时,上行指示灯亮,下行指示灯灭;
(5)电梯下行时,下行指示灯亮,上行指示灯灭;
(6)电梯处于某层时,所在楼层的led灯亮,否则灭;
(7)相邻两层运行时间为9s,用一盏Led灯连续闪烁9次表示,并用时间数码管显示倒计时;
(8)电梯初态1、3、6、8楼均可;
(9)电梯可上可下,它到达某楼层开门后有5s的自动关门设置,若在这5s期间,按下关门键,则立刻关门;
(10)楼层显示数码管显示电梯当前所在的楼层,同时计时显示数码管显示楼层间的倒计时,不运行时不显示时间;
(11)电梯处于某层时,可以选择要到达的楼层,但是选择本楼层没有任何反应;
(12)电梯运行原则
原则1:
每个被选择的楼层都要停,然后继续运行;
原则2:
目前运行方向优先,仅当电梯已到达当前设定的最高或最低层后,方能改变设定的运行方向和楼层;
原则3:
当电梯在运行过程中,按开门关门键无反应;
原则4:
当处理完所有的请求之后,电梯停在该层,如果再有请求,遵循就近原则。
2.2总体结构设计
图2-1
将电梯的运行简化为如图2-1的示意模型。
根据模型图,将电梯运行行为分状态进行处理,分为5个状态:
理想状态、上升状态、下降状态、开门状态和关门状态。
根据设计需求将电路分为以下6个模块:
电梯中心控制模块、请求综合模块、数码管译码显示模块、计数模块、楼层LED灯模块和时钟分频模块。
具体运行状态如下图2.2.1所示:
图2.2.1运行状态图
2.2.1时钟分频模块
模块需求:
该模块为时钟分频,共构建三个时钟脉冲,分别为1秒时钟,半秒时钟和显示扫描时钟。
1秒脉冲用于整个运行状态之中,所有模块和状态的改变时间为1秒。
半秒时钟用于9秒倒计时时的灯的闪烁控制,周期为半秒。
显示扫描时钟用于造成视觉延迟,使楼层和时间同时显示。
模块需求:
该模块是为了实现对Basys2开发板的系统时钟进行分频,以满足电路显示所需要的频率。
端口说明:
Inputports:
clk。
为Basys2开发板系统时钟
Outputports:
cp,cp2,cp3。
其中cp为一秒分频时钟,cp2为数码管显示扫描时钟,cp2为倒计时点的半秒闪点时钟。
引脚说明:
NET"clk"TNM_NET=clk;
TIMESPECTS_clk=PERIOD"clk"20nsHIGH50%;
NET"clk"LOC=B8;
2.2.2LED灯显示管理模块
模块需求:
该模块是为了直观的通过LED灯的亮暗来指示电路的运行状态和当前电梯所处在的状态以及楼层。
到达楼层则对应楼层灯亮起;上升和下降各对应一盏灯;开门灯亮关门灭;总开关开启则灯亮。
端口说明及引脚绑定:
Inputports:
总开关(reset),1秒时钟(cp),下一个状态(next_state),当前显示楼层(led),倒计时综合(tim),开关门键(open_close),5秒计数器(count1),9秒计数器(count2)。
Outputports:
电源灯(light_sum),开关门指示灯(light_5),楼层指示灯(light1,light3,light6,light8),上行指示灯(ligh_up),下行指示灯(light_dw)。
引脚绑定:
NET"light1"LOC=P4;
NET"light3"LOC=N4;
NET"light6"LOC=N5;
NET"light8"LOC=P6;
NET"light_5"LOC=M5;
NET"light_dw"LOC=M11;
NET"light_sum"LOC=G1;
NET"light_up"LOC=P7;
2.2.3数码管显示模块
模块需求:
该模块是为了显示当前电梯所在楼层、电梯运行时所要求的两项倒计时和半秒闪点,倒计时包括楼层间运行时间9s倒计时和开门后5s倒计时。
该模块同时又分为四个数码管位选模块和七段译码器显示模块。
数码管位选模块端口说明及引脚绑定:
Inputports:
数码管选位扫描时钟(cp2),倒计时(tim),当前楼层(led)。
Outputports:
输出数码管编码(dx),时间和楼层输出总汇总参数(dout),所选择的数码管接口(d_tmp_num)。
七段译码器显示模块端口说明及引脚绑定:
Inputports:
输出数码管编码(dx),时间和楼层输出总汇总参数(dout),所选择的数码管接口(d_tmp_num),半秒闪点参数(sec)。
Outputports:
译码器对应的显示编码(q_out)。
引脚绑定:
NET"dx[3]"LOC=F12;
NET"dx[2]"LOC=J12;
NET"dx[1]"LOC=M13;
NET"dx[0]"LOC=K14;
NET"dout[7]"LOC=L14;
NET"dout[6]"LOC=H12;
NET"dout[5]"LOC=N14;
NET"dout[4]"LOC=N11;
NET"dout[3]"LOC=P12;
NET"dout[2]"LOC=L13;
NET"dout[1]"LOC=M12;
NET"dout[0]"LOC=N13;
2.2.4电梯中心控制模块
模块需求:
该模块部分是电梯控制系统的核心部分,它的功能是对请求的一系列回应,不断改变电梯运行状态。
端口说明:
Inputports:
电源开关(reset),5秒计数器(count1),开关门请求(open_close),目的楼层请求(d),下降楼层请求(dw),上升楼层请求(up),当前楼层编码(now_f),当前模式(state),下一步模式(next_state),半秒时钟(cp3),楼层(led),电梯运行状态(ud_f)。
Outputports:
下一个状态(next_state),当前状态(state),到达当前最高楼层(top),到达当前最低楼层(down),楼层(led),当前楼层编码(now_f),电梯运行状态(ud_f)。
2.2.5请求综合模块
模块需求:
将所有电平信号转为冲激信号,对输入的命令进行综合分析。
Inputports:
所有上行请求(up3,up6,up1),所有下降请求(dw6,dw3,dw8),所有内部目的楼层请求(d1,d3,d6,d8),开关门信号(open_close),电源开关信号(reset)。
Outputports:
上行请求(up),下降请求(dw),目的楼层请求(d)。
引脚绑定:
NET"d1"LOC=A7;
NET"d3"LOC=M4;
NET"d6"LOC=C11;
NET"d8"LOC=G12;
NET"dw3"LOC=F3;
NET"dw6"LOC=B4;
NET"dw8"LOC=K3;
NET"up1"LOC=N3;
NET"up3"LOC=E2;
NET"up6"LOC=G3;
NET"open_close"LOC=P11;
NET"reset"LOC=L3;
NET"reset"CLOCK_DEDICATED_ROUTE=FALSE;
NET"d1"CLOCK_DEDICATED_ROUTE=FALSE;
NET"d3"CLOCK_DEDICATED_ROUTE=FALSE;
NET"d6"CLOCK_DEDICATED_ROUTE=FALSE;
NET"d8"CLOCK_DEDICATED_ROUTE=FALSE;
NET"dw3"CLOCK_DEDICATED_ROUTE=FALSE;
NET"dw6"CLOCK_DEDICATED_ROUTE=FALSE;
NET"dw8"CLOCK_DEDICATED_ROUTE=FALSE;
NET"up1"CLOCK_DEDICATED_ROUTE=FALSE;
NET"up3"CLOCK_DEDICATED_ROUTE=FALSE;
NET"up6"CLOCK_DEDICATED_ROUTE=FALSE;
NET"open_close"CLOCK_DEDICATED_ROUTE=FALSE;
2.2.6计数模块
模块需求:
该模块用于上行楼层的9秒计数、开门的5秒计数和半秒闪点的计数,最后对于要输出的时间进行汇总输出。
Inputports:
一秒分频信号(cp),开关门信号(opn_close),开关门信号(reset)。
Outputports:
9秒计数器(count2),5秒计数器(count1),倒计时时间汇总(tim),半秒计数(sec)。
2.3详细设计
该体统详细设计如下图2.3.1所示。
时钟分频模块产生实验所需脉冲;外部输入请求通过请求综合模块将所有电平信号转换为脉冲信号,并且将信号整理分类,将请求与楼层编码对应;整理好的请求将在电梯中心控制系统控制电梯的运行状态,根据不同的条件进行不同的变化。
当楼层数到达1、3、6或8层,对应LED灯亮起,同时上行、下行、开关门、电源总开关等均由LED等显示模块控制。
根据不同状态对应不同计数,最终由数码管显示模块控制显示楼层数和时间。
图2.3.1系统总体流程图
2.3.1时钟分频
该模块是为了实现对Basys2开发板的系统时钟进行分频,以满足电路显示所需要的频率。
该模块实现3种不同频率的信号以便实验,分别为1秒信号,半秒信号和数码管扫描信号。
具体设计如下2.3.2所示:
图2.3.2时钟分频流程图
2.3.2LED显示管理模块
该模块管理LED灯,当到达指定状态时对应LED灯亮起。
具体如下图2.3.3所示:
图2.3.3LED灯变化流程图
2.3.3数码管显示模块
该模块控制9秒倒计时、5秒倒计时、楼层数显示和半秒闪点显示。
具体如下图2.3.4所示。
图2.3.4数码管显示流程图
2.3.4电梯中心控制模块
根据命令调整电梯的运行状态,当完成某一状态时刷新命令。
具体如下图2.3.5所示。
图2.3.5电梯中心控制模块流程图
2.3.5请求综合模块
该模块实现对于机械输入请求的综合。
将所有电平请求转换为脉冲信号。
具体流程见下图2.3.6所示。
2.3.6请求综合流程图
2.3.6计数模块
该模块实现9秒计数、5秒计数和半秒闪点的计数,并将其综合至同一量统一输出。
具体流程图如下2.3.7所示。
图2.3.7计数流程图
2.4实验过程与调试
2.4.1仿真结果
主模块有13个输入,16个输出,其中输入依次为:
系统时钟(clk)、电源开关(reset)、内部请求(d1,d3,d6,d8)、外部请求(up1,up3,up6,dw3,dw6,dw8)、开关门键(open_close);输出依次为:
5秒计时器(count1)、9秒计时器(count2)、楼层灯(light1,light3,light6,light8)、开关门灯(light_5)、电源总开关灯(light_sum)、上行灯(light_up)、下行灯(light_dw)、楼层请求汇总(d,dw,up)、倒计时汇总(tim)、楼层(led)。
为仿真便利,所有时钟周期均对应缩小。
仿真文件如下所示:
moduletest;
//Inputs
regreset;
regclk;
regup3;
regup6;
regup1;
regdw6;
regdw3;
regdw8;
regd1;
regd3;
regd6;
regd8;
regopen_close;
wirelight1;
wirelight3;
wirelight6;
wirelight8;
wirelight_5;
wirelight_up;
wirelight_dw;
wirelight_sum;
wire[7:
0]dout;
wire[3:
0]led,tim;
wire[3:
0]count1;
wire[3:
0]count2;
wire[7:
0]d;
wire[7:
0]dw;
wire[7:
0]up;
//Outputs
//InstantiatetheUnitUnderTest(UUT)
tk1uut(
.reset(reset),
.clk(clk),
.up3(up3),
.up6(up6),
.up1(up1),
.dw6(dw6),
.dw3(dw3),
.dw8(dw8),
.d1(d1),
.d3(d3),
.d6(d6),
.d8(d8),
.light1(light1),
.light3(light3),
.light6(light6),
.light8(light8),
.light_5(light_5),
.light_up(light_up),
.light_dw(light_dw),
.light_sum(light_sum),
.open_close(open_close),
.dout(dout),
.led(led),
.tim(tim),
.count1(count1),
.count2(count2),
.up(up),
.dw(dw),
.d(d)
);
alwaysbegin
#1clk=~clk;
end
initialbegin
clk=1;
reset=0;
up1=0;
up3=0;
up6=0;
d1=0;
d3=0;
d6=0;
d8=0;
dw3=0;
dw6=0;
dw8=0;
open_close=0;
//Wait100nsforglobalresettofinish
#45reset=1;
#1reset=0;
//Addstimulushere
end
endmodule数据全部初始化为0,而后电源按键(reset)脉冲一次启动程序,所有数据处于初始化状态,电梯位于1楼。
电梯初始状态仿真图如2.4.1所示。
图2.4.1电梯初始状态仿真测试图
之后外部按键up1,门开,倒计时5秒关门,之后内部按键d3,电梯状态仿真图如下2.4.2所示。
图2.4.2电梯运行仿真测试图
此时电梯处于三楼时,同时又内部请求d8和外部请求dw6,up1。
此时light_up亮,电梯应向上升到6楼开门之后到8楼开门后下降(light_dw亮)至1楼停止,到达对应楼层时灯亮;开门时light_5亮。
电梯运行如下图2.4.3所示。
图2.4.3电梯运行仿真测试图
此时电梯处于一楼,按键up3;当电梯运行至2楼时输入请求d1。
电梯会先处理up3到达3楼,之后返回1楼停止。
到达对应状态时对应灯亮。
电梯运行仿真如下图2.4.4所示。
图2.4.4电梯运行仿真测试图
以上仿真均与理论相符,说明设计正确。
2.4.2主要故障与调试
(1)故障1
问题描述:
某些地方的reset不起初始化作用
问题分析:
在某些always的敏感信号中未加入reset的初始化部分。
解决方法:
在always的敏感信号中加入reset的初始化部分。
(2)故障2
问题描述:
在下降过程中外部输入向上信号或在上升过程中输入向下信号,到达该楼层时也会开门。
问题分析:
在上升和下降状态时没有对信号进行分类处理。
解决方法:
改变写法,让上升请求只能在上升状态下实现,下降请求只能在下降状态下实现。
2.4.3模块内部图
1、主模块
参见图2.4.5,其功能为实现电梯运行总控制。
图2.4.5电梯控制系统顶层模块
输入:
clk:
系统时钟端
reset:
开关键
up3:
上3楼
up6:
上6楼
up1:
上1楼
dw6:
下6楼
dw3:
下3楼
dw8:
下8楼
d1:
到1楼
d3:
到3楼
d6:
到6楼
d8:
到8楼
open_close:
开关门键
输出:
reg[3:
0]count1:
5秒计数器
reg[3:
0]count2:
9秒计数器
reglight_5:
电源灯
light_up:
上升灯
light_dw:
下降灯
light1:
1楼灯
light3:
3楼灯
light6:
6楼灯
light8:
8楼灯
reglight_sum;总开关灯
reg[7:
0]dout:
总输出
reg[7:
0]d:
'到'楼层汇总
reg[7:
0]up:
'上'楼层汇总
reg[7:
0]dw:
'下'楼层汇总
reg[3:
0]led:
楼层
reg[3:
0]tim:
时间汇总
2.5功能测试
2.5.1电源总开关功能测试
按下reset键,light_sum灯亮,楼层处于1楼,时间显示为0。
测试如下图2.5.1所示
图2.5.1电源总开关功能测试
2.5.2电梯控制系统功能测试
当前电梯处于1楼,按下up1键,5秒倒计时开门。
测试如下图2.5.2所示。
图2.5.2开关门功能测试
同时按下up3,d6,dw8键,电梯上升,在3,6,8楼各停一次。
测试结果如下图2.5.3至图2.5.7所示
图2.5.3电梯运行至3楼开门状态图
图2.5.4电梯继续向上运行状态图
图2.5.5电梯运行至6楼开门状态图
图2.5.6电梯继续上升运行状态图
图2.5.7电梯停留在8楼状态图
此时电梯位于8楼,按下dw6键,当楼层显示为7时按下d8,则电梯会先下降到6楼后上升至8楼,最后一直停留在8楼。
测试如下图2.5.8至图2.5.11所示。
图2.5.8电梯下降至7楼状态图
图2.5.9电梯至6楼开门状态图
图2.5.10电梯上升至7楼状态图
图2.5.11电梯停留在8楼状态图
3实验方案的改进意见
3.1设计需求
(1)在实际生活中,电梯的输入都是一次性按键,而给的开发板上使用开关来进行输入,所以开关要做到无论何时关对输入无影响。
(2)将数码管显示更加清晰化,将各显示分开,使不使用的数码管不亮。
3.2改进方案
3.2.1请求综合模块结构设计
将所有电平信号转换为脉冲信号,保证命令的一次性输入。
具体转变如下表3.2.1所示
表3.2.1电平信号转换为脉冲信号
输入
输出
posedgeup1
up1_change=1
posedgeup3
up3_change=1
posedgeup6
up6_change=1
posedgedw3
dw3_change=1
posedgedw6
dw6_change=1
posedgedw8
dw8_change=1
posedged1
d1_change=1
posedged3
d3_change=1
posedged6
d6_change=1
posedged8
d8_change=1
3.2.2数码管显示模块详细设计
该模块将进行数码管的选择显示,是输出更加清晰,符合实际生活。
具体如下图3.2.2所示。
图3.2.2数码管显示模块详细流程
3.3仿真与测试
3.3.1请求综合模块模块仿真
给出仿真程序:
`timescale1ns/