基于FPGA和Verilog实现的9层电梯控制器仿真设计

这篇具有很好参考价值的文章主要介绍了基于FPGA和Verilog实现的9层电梯控制器仿真设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

资源下载地址:https://download.csdn.net/download/sheziqiong/85628810
资源下载地址:https://download.csdn.net/download/sheziqiong/85628810

数字逻辑与数字系统设计之电梯控制器设计

一、设计目的及要求

设计要求

  1. 电梯最少可以往返于0—9层楼。

  2. 乘客要去的楼层数A可手动输入并显示,按取消键可清除本次输入。

  3. 可自动显示电梯运行的楼层数B

  4. 当A>B时,电梯上升;

    当A<B时,电梯下降;

    当A=B时,电梯停止运行并开门;

  5. 可以自动显示电梯每一次启停之间的运行时间

  6. 任何时候按下复位键,电梯回到1层。

设计目的

目的是对“数字逻辑”课程内容全面、系统的总结、巩固和提高。根据数字逻辑的特点,选择相应的题目,在老师的指导下,由学生独立完成。通过实验使我们掌握数字逻辑电路设计的基本方法和技巧,正确运用vivado软件及实验室多功能学习机硬件平台,完成所选题目的设计任务,并掌握数字逻辑电路测试的基本方法,训练学生的动手能力和思维方法。通过实验,一方面提高运用数字逻辑电路解决实际问题的能力,另一方面使学生更深入的理解所学知识,为以后的计算机硬件课程的学习奠定良好的基础。

二、工作原理和系统框图

工作原理

本实验使用板上的四个开关来模拟电梯的叫梯按键,其中每个按钮有两个状态0和1,4个组成了电梯的叫楼层,将这4位二进制数字看成8421BCD码,转换成十进制数字。

对于电梯按键,当没用用户叫梯时,叫梯的数码管BIT5(G1)显示为0;当有用户叫梯时,控制叫梯的数码管显示为用户所叫的电梯楼层。

电梯运行时,显示电梯运行层数的数码管BIT1(G2)显示电梯运行的层数,假设电梯每运行一层的时间为1s,则该数码管BIT1(G2)数码管在转变为“0”之前显示的数字即为电梯运行的时间。

当SW1-N4 为1时,电梯回到0层。

系统框图

(1) 电梯最少可以往返于 0—9 层楼,任何时候按下复位键,电梯回到 1 层。 (2) 乘客,fpga开发,Verilog,9层电梯控制,电梯控制器仿真,课程设计
(1) 电梯最少可以往返于 0—9 层楼,任何时候按下复位键,电梯回到 1 层。 (2) 乘客,fpga开发,Verilog,9层电梯控制,电梯控制器仿真,课程设计

三、各部分模块具体功能及设计思路

各部分选定方案

1.目的:电梯可以往返于0~9层楼,显示当前电梯的楼层B

​ 实现方法:用计数器来实现0~9之间的变化,并通过译码器接到数码管(BIT8)上显示

2.目的:手动输入要去的楼层A ,按取消键可清除本次输入。

​ 实现方法:A 用四个开关来表示,通过译码器接到7段数码管(BIT5)上显示相应的楼层数A。

3.目的:当A>B 时,电梯上升;当A<B 时,电梯下降;当A=B 时,电梯停止运行。

​ 实现方法:通过比较器来比较A 与B 的大小,若A>B 电梯上升,否则电梯下降,

4.目的:可以自动显示电梯每一次启停之间的运行时间。

​ 实现方法;继承3)的实现方法,若A>B 则计数器正向计数,若A<B 则计数器逆向计数。

5.目的:按下复位键时,电梯回到0层

​ 实现方法:当复位启动时,则不论A 怎么输入,电梯都停在第0层。

相关模块

比较器(Compare)

输入电梯所在楼层B ,乘客要去的楼层 A ,输出O1O2,当A>B 时,输出01;当A<B 时,输出10;当A=B 时,输出00;

代码:

module Compare(A,B,O1,O2);
			input [3:0]A;//要去的楼层A
			input [3:0]B;//电梯所在楼层B
			output O1;
			output O2;
			assign O1 = (A>B);//A>B 输出01
			assign O2 = (A<B);	//A<B 输出10
		endmodule

复位模块(IfReset)

输入reset 和In ,In 是一个4位的数组。当reset=1时,Out=0,电梯无论在几楼都会回到0楼;当reset==0时,输出Out=In ,接着运行下面的功能。

代码:

module IfReset (In, Out, reset);
		input [3:0] In;
		input reset;
		output reg [3:0]Out;
		always begin #2
			if(reset)
				Out = 0;//如果reset = 1 则清零
			else 
				Out = In;//如果reset!=1 则输入即为输出
		end
	endmodule

节拍发生器(BeatGenerator)

由于数码管只有七个管脚,AB 不能同时显示在同一个数码管上,所以通过节拍发生器来选择显示。因为时钟频率高达100MHz,所以肉眼所见的是A 和B 同时显示。

代码:

module BeatGenerator(in1,in2,clk,sec,Out);
			input [6:0]in1;//输入A
			input [6:0]in2;//输入B
			input clk;//时钟信号
			output reg [1:0]sec;
			output reg [6:0]Out;
			reg [7:0]ControlLED;//七段数码管
			initial 			//初始化变量
begin
					sec = 1;
					Out = in1;
					ControlLED = 0;
				end
			always @(posedge clk)
				begin
					ControlLED = ControlLED + 1;
					if(sec==1) //分频显示
						begin
							Out =in2;
						end
					else 
						begin
							Out=in1;
						end
				end
			always @(negedge ControlLED)
				begin
				if(sec==1)
					begin
						sec=2;
					end
				else
					begin
						sec=1;
					end
				end
			endmodule

分频模块(FrequenceDivide)

将100MHz的时钟信号转换为肉眼可见的信号

代码:

module FrequenceDivide(inClk, outClk);
				input inClk; //输入时钟信号
				output outClk;//输出时钟信号
				reg [31:0]timeClk;//暂存时钟信号(32位)
				assign outClk = timeClk[19];//每2^20ns 时钟沿变化一次
				initial begin
					timeClk = 0;
				end
				always@(posedge inClk)
					begin
						timeClk = timeClk + 1;
					end
			endmodule

译码器(Decoder)

将4位的A和B转换为七段数码管显示对应的数字

代码:

module Decoder(floor, outLED, on);
				input [3:0]floor;//楼层
				input on;//运行状态 运行on=1,未运行on=0
				output reg[6:0]outLED;//输出的显示
				always @(*)
					begin
						if(!on)
						outLED=7’b0000001;//未运行状态
						else
							case(floor)
								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: outLED= 7’b1001111; /E(error) endcase
						end
					endmodule

计时器(clock)

计时器有一个暂停键与计数器的使能端相连,当switch1=switch0=0时,计时器的暂停键有效,计时器不计时;当switch1=1或switch0=1,计时器工作,且每次计时完成后归零,并从下一次电梯开始工作时计时。

代码:

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

可逆计数器

module counter(
    input clk,
    input switch0,
    input switch1,
    output reg[3:0] sl_reg
);
	initial begin
	sl_reg = 0;
end
always @(posedge clk)
    begin
        case({switch0,switch1})
        2’b01:sl_reg=sl_reg-1;
        2’b10:sl_reg=sl_reg+1;
        default:;
    	endcase
    end
endmodule

四、调试过程

  1. 检查Verilog 代码是否有语法错误(由vivado 自动检测)
  2. 检查各个IP 核的功能是否正确,看它的仿真波形图是否正确
  3. 检查逻辑图中的IP 核连线是否正确,人工代特值进入电路看是否有输出错误。
  4. 至此调试过程结束

附录:各模块仿真结果

1比较器

(1) 电梯最少可以往返于 0—9 层楼,任何时候按下复位键,电梯回到 1 层。 (2) 乘客,fpga开发,Verilog,9层电梯控制,电梯控制器仿真,课程设计

2复位模块

(1) 电梯最少可以往返于 0—9 层楼,任何时候按下复位键,电梯回到 1 层。 (2) 乘客,fpga开发,Verilog,9层电梯控制,电梯控制器仿真,课程设计

3节拍发生器

(1) 电梯最少可以往返于 0—9 层楼,任何时候按下复位键,电梯回到 1 层。 (2) 乘客,fpga开发,Verilog,9层电梯控制,电梯控制器仿真,课程设计

4译码器

(1) 电梯最少可以往返于 0—9 层楼,任何时候按下复位键,电梯回到 1 层。 (2) 乘客,fpga开发,Verilog,9层电梯控制,电梯控制器仿真,课程设计

5计时器

(1) 电梯最少可以往返于 0—9 层楼,任何时候按下复位键,电梯回到 1 层。 (2) 乘客,fpga开发,Verilog,9层电梯控制,电梯控制器仿真,课程设计

6可逆计数器

(1) 电梯最少可以往返于 0—9 层楼,任何时候按下复位键,电梯回到 1 层。 (2) 乘客,fpga开发,Verilog,9层电梯控制,电梯控制器仿真,课程设计
资源下载地址:https://download.csdn.net/download/sheziqiong/85628810
资源下载地址:https://download.csdn.net/download/sheziqiong/85628810文章来源地址https://www.toymoban.com/news/detail-785705.html

到了这里,关于基于FPGA和Verilog实现的9层电梯控制器仿真设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • m基于FPGA的FOC控制器verilog实现,包括CLARK,PARK,PID及SVPWM,含testbench

    目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件 Quartus II 12.1(64-Bit) ModelSim-Altera 6.6d Starter Edition 仿真结果如下: 整个系统的结构如下所示: 1、采集到两相电流 2、经过clarke变换后得到两轴正交电流量, 3、经过旋转变换后得到正交的电流量

    2024年02月15日
    浏览(37)
  • 基于FPGA的电风扇控制器verilog,视频/代码

    名称:基于FPGA的电风扇控制器verilog 软件:QuartusII 语言:Verilog 代码功能: 基于FPGA的电风扇控制器  运用 EDA SOPO实验开发系统设计一个基于FPGA的电风扇定时开关控制器,能实现手动和自动模式之间的切换。要求:  (1)KI为电源开关由电源开关控制电风扇的开关,即当K1为高电平“

    2024年02月07日
    浏览(37)
  • 基于EDA的电烤箱控制器设计Verilog代码Quartus 新起点FPGA开发板

    名称:基于EDA的电烤箱控制器设计Verilog代码Quartus  新起点FPGA开发板(文末获取) 软件:Quartus 语言:Verilog 代码功能: 基于EDA的电烤箱控制器设计 主要研究内容 设计一个电烤箱控制器电路,要求具有三档加热功能,分别表示烧烤加热为低火、中火、高火。具有复位开关、启动

    2024年02月01日
    浏览(27)
  • 微波炉控制器Verilog代码Quartus仿真

    名称:微波炉控制器Verilog代码Quartus仿真(文末获取) 软件:Quartus 语言:Verilog 代码功能: 微波炉控制器 用芯片Altera Cyclone IV FPGA作为控制芯片,实现时间设置、温度设定、火力选择、声音提示,在硬件组成上,涉及到电源供电、按键输入、数码管显示、指示灯提示等。 由按

    2024年01月20日
    浏览(47)
  • 【DDR】基于Verilog的DDR控制器的简单实现(一)——初始化

    在FPGA中,大规模数据的存储常常会用到DDR。为了方便用户使用,Xilinx提供了DDR MIG IP核,用户能够通过AXI接口进行DDR的读写访问,然而MIG内部自动实现了许多环节,不利于用户深入理解DDR的底层逻辑。 本文以美光(Micron)公司生产的DDR3芯片MT41J512M8RH-093为例,说明DDR芯片的操作

    2024年02月02日
    浏览(34)
  • FPGA实现PID控制器——基于Quartus prime 18.0

    目录  1. PID控制器和离散化PID控制器 1.1 PID控制器 1.1.1 P控制器 1.1.2 稳态误差和I控制器 1.1.3 超调和D控制器 1.2 离散式PID控制器——位置式PID控制器 2.PID控制系统Simulink仿真 3.Verilog代码编写和Modelsim仿真 3.1 误差计算模块和PID算法模块编写 3.1.1 误差计算模块 3.1.2 PID算法模块 3

    2024年02月03日
    浏览(32)
  • 多路彩灯控制器LED流水灯花型verilog仿真图视频、源代码

    名称:多路彩灯控制器LED流水灯花型verilog 软件:Quartus 语言:Verilog 代码功能:      用quartus和modelism,设计一个多路彩灯控制器,能够使花型循环变化,具有复位清零功能,并可以选择花型变化节奏。具体要求如下:  1)彩灯控制器由16路发光二极管构成,当控制开关打开时

    2024年02月04日
    浏览(36)
  • 基于AHB协议的SRAM控制器的Verilog实现(详解代码)(一)——sram_core的实现

    目录  一、sramc(sram_controller)的总框架和模块划分 Features of sramc 结构框图和信号描述 二、sram_core的Verilog实现 动手开敲前的构思 Verilog代码和代码分析 三、sram_core的仿真验证 下载链接 sram因为其高读写速度常常作为CPU和嵌入式IC的缓存,是一个数字系统中必不可少的存在,因此

    2024年01月16日
    浏览(34)
  • 9-基于STM32无刷直流电机控制器的设计仿真与实现(原理图+源码+仿真工程+论文+PPT+参考英文文献)

    包含此题目毕业设计全套资料: 原理图工程文件 原理图截图 仿真模型工程文件 仿真截图 低重复率文档(22642字) 英文文献及翻译 资料链接 1.基于单片机实现无刷直流电机控制器的设计,完成系统芯片选型; 2.确定无刷直流电机控制器的总体设计方案; 3.给出系统的硬件设计

    2024年02月07日
    浏览(39)
  • 基于FPGA 的SDRAM控制器

    4X16X4=256(Mbit),注意不是MByte sdram包含两个部分:sdram_ctrl、fifo_ctrl。 sdram_ctrl:其顶层为SDRAM的控制模块内部实例化了5个模块,有初始化、自刷新、写和读模块,还有一个仲裁模块对这四个不同操作进行分配; fifo_ctrl:其顶层为SDRAM的数据输入输出,内部实例化了两个用于连

    2024年02月08日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包