• 基于Vivado软件实现电梯控制器仿真设计


    Contents
    1设计目的及要求 2
    1.1设计要求 2
    1.2设计H的 2
    2工作原理和系统框图 2
    3各部分选定方案及电路组成、相关器件说明 2
    3.1各部分选定方案 2
    3.2相关器件说明 3
    4调试过程 8
    4.1调试步骤 8
    4.2调试过程中出现的错误及修正方案 8
    5功能测试 10
    6设计结论 12
    7设计心得与总结 12
    7.1设计心得 12
    7.2设计总结 13
    8参考文献 13
    9 附录 14
    9.1附录一总体器件表及相关器件的功能表、管脚分布 14
    9.2附录二总体设计图 14
    9.3附录三仿真结果 14
    9.4附录四小组各成员分工表及个人工作时间表 14
    6设计结论
    为了实现电梯控制器的设计,我们做了以下几点工作:
    (1)整个设计过程分为了早期的基本功能的实现,中期的加速修改功能添加以及后期的
    系统的仿真分析和请教同学,完成了对主要模块的仿真以及总体功能的测试。
    (2)编写可逆计数器模块,通过正向和逆向计数,实现了电梯的上下楼功能;
    (3)编写比较器模块,通过按键输入与计数器输入的比较,来控制计数器是正向计数还
    是逆向计数;
    (4)编写计时器模块,通过vivado自带的分频器和我们写的分频器进行二次分频,从而
    可以在七段数码管上显示出计数的过程;
    (5)编写译码器模块,将译码器的输入转化成可以有七段数码管绑定的管脚,从而实现
    了整个电梯控制系统的显示模块;
    (6)编写节拍发生器模块,通过FPGA有效的片选信号和段选信号实现了电梯所在楼层的
    显示和乘客想去楼层的显示;
    (7)后期我们进行了分模块的仿真和总体功能的测试,对出现的问题进行了反复的测试
    和调试。

    7设计心得与总结
    7.1设计心得
    【就本次实验来说】
    (1)时钟的分频和调试花费了很长时间,EGO1开发板上给定的时钟是100MHZ,频率大快,刚开始时进行了2^15次方分频,调试之后发现,频率还是大快,计数器和计时器不 能显示数字的变化过程,通过查阅资料后发现,FPGA内部自带MMCM,于是进行了二次分频,显示恢复正常;
    (2)绑定管脚之后,发现计数器总是在0和9之间变动,仔细查错后发现,计数器和比较
    器的两个接口连接反了,调整连线后显示恢复正常;
    (3)译码器的编写是本次实验的一个亮点,通过译码器将计数和计时直接译码显示在七
    段数码管上,既方便又简单,避免了很多繁杂的小器件;

    (4)节拍发生器的编写也是本次实验的一个亮点,开始实验时不大了解七段数码管的段选和片选,查阅资料和请教同学之后发现,编写一个节拍发生器,前一时刻显示电梯所在 楼层,后一时刻显示乘客要去楼层,由于时钟的脉冲较快,肉眼看来就是两片数码管同时 显示的;
    (5)七段数码管的消隐,实验时发现七段数码管上各段都会亮,只不过不该亮的段颜色较晤,但也不易于区分,反复调试后发现是由于节拍发生器的时钟脉冲大快,在进行片选 时出现了显示的暂留,本文转载自http://www.biyezuopin.vip/onews.asp?id=15000对节拍发生器进行再次分频之后成功消隐;
    (6)实验后期,我对实验的代码进行了简化,计时器、计数器、节拍发生器中都含有分
    频的代码,于是我另做了分频器,将重复的代码删去,简化了代码的风格。

    7.2设计总结
    【总的来说】
    (1)对数字逻辑和Verilog语言进行了巩固,运用更加熟练,对以后硬件方面的学习打
    下坚实的基础。
    (2)做实验要有充足的耐心,虽然会出现各种小bug,但通过思考、查阅资料、请教老师
    同学之后总能解决的;
    (3)一项成功的实验离不开正确的实验设计,确定实验选题之后,我就开始了对整个实
    验框图的设计,反复修改并验证了可行性;
    (4)把课上所学的知识运用到实践,和同组同学合力实现了电梯控制器的设计。电梯是我们日常生店中每天都在使用的器件,通过这个设计拉近了学习与生店之间的距离,也让 我更加了解自己的专业。
    (5)对模块化程序设计的感触更加深刻,分模块编写最后组装,给实验的进行带来了很
    大方便。

    计时器有一个暂停键与计数器的使能瑞相连,当SW1=SW0=0时,计时器的暂停键有效,计时器不计时;当SW1=1或SW0=1,计时器工作,且每次计时完成后归0,并从下一次电梯开始工作时计时。
    
    代码:module clock( input show, input   clk, input pause, input rst,
    output reg sm_bit, output reg[6:0]sm_seg
    );
    
    
    reg [3:0]timesec0;
    
    
    initial begin sm_bit=1; sm_seg=1; timesec0=0; end
    
    always @(posedge clk) begin if(pause) begin if(timesec0==9)
    timesec0=0; else
    timesec0=timesec0+1; end
    end
    
    
    always@(posedge show) begin
    case(timesec0)
    0:sm_seg= 7’b1111110;	//显示0
    1:sm_seg= 7’b0110000;	//显示1
    2:sm_seg= 7’b1101101;	//显示2
    3:sm_seg= 7’b1111001;	//显示3
    4:sm_seg= 7’b0110011;	//显示4
    5:sm_seg= 7’b1011011;	//显示5
    6:sm_seg= 7’b1011111;	//显示6
    7:sm_seg= 7’b1110000;	//显示7
    8:sm_seg= 7’b1111111;	//显示8
    9:sm_seg= 7’b1111011;	//显示9 default:
    
    sm_seg= 7’b0000000;	//不显示
    endcase end
    
    endmodule
    
    5)译码器
    
    该译码器不同于一般的译码器,它有四个输入七个输出,四个输入直接接A或B,通过译码
    器与七段数码管连接,显示出来。
    代码:module translater(value,outled,en); input [3:0]value;
    input en;
    output reg [6:0]outled; always @(*)
    begin if(!en)
    outled=7’b0000001; else
    case(value) 4’b0000:outled=7’b1111110;	//显示0
    4’b0001:outled=7’b0110000;	//显示1
    4’b0010:outled=7’b1101101;	//显示2
    4’b0011:outled=7’b1111001;	//显示3
    4’b0100:outled=7’b0110011;	//显示4
    4’b0101:outled=7’b1011011;	//显示5
    4’b0110:outled=7’b1011111;	//显示6
    4’b0111:outled=7’b1110000;	//显示7
    4’b1000:outled=7’b1111111;	//显示8
    4’b1001:outled=7’b1111011;	//显示9 default:;
    endcase end
    endmodule
    
    
    6)分频装置
    
    因为时钟的频率大快了,实验结果不明显,所以我们采取分频的装置。
    代码:module FenPin( input inclk, output outclk
    
    );
    reg [31:0]timeclk;
    assign outclk = timeclk[19]; initial begin
    timeclk = 0; end
    always@(posedge inclk)begin timeclk = timeclk +1;
    end endmodule
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    外包干了2年,技术退步明显
    开源地图库OpenLayers的简单使用
    python测试开发django-198.bootstrap-formvalidation校验成功发ajax请求
    内网渗透之Linux反弹shell(综合)
    SAP-QM-动态检验规则
    URL工具-URLUtil
    什么是高防服务器?如何正确的选择高防服务器
    Java OutputStream类简介说明
    【老生谈算法】matlab实现CDS启发式算法源码——CDS启发式算法
    python-37-python微服务框架Nameko
  • 原文地址:https://blog.csdn.net/sheziqiong/article/details/126966135