数字逻辑课程设计 您所在的位置:网站首页 数字解锁密码 数字逻辑课程设计

数字逻辑课程设计

2024-06-30 16:02| 来源: 网络整理| 查看: 265

前言

        作者目前(2023年12月)是一名计算机大三学生,该课程设计是我半年前写的,发出来供大家参考。由于VHDL在之后的学习中用的不多,所以不帮忙做数字密码锁外的其他需求。数字逻辑是我觉得最有意思的一门课,希望大家可以根据我给的框架独立完成,对数字密码锁设计有疑问或需求的话可以私信我(留下联系方式,备注来意,急的话加我小号QQ 1242484192),大家加油。

2024年6月25日补充:项目已开源,要下载完整资源的移步至https://download.csdn.net/download/systemcall0122/89481456?spm=1001.2014.3001.5503

一、课程设计目的

        1、学会应用数字系统设计方法进行数字电路设计;

        2、进一步提高quartus II软件的开发应用能力;

        3、提高VHDL进行综合设计的能力;

        4、培养学生书写综合实验报告的能力。

二、课程设计内容

        根据所选题目列出具体内容要求

        1、密码锁采用十进制数形式,可以进行密码修改,错误报警等功能。

        2、如果输入的密码与设置的密码相同,则密码锁被打开,控制器的输出端key=0;否则控制输出端warn=1,发出警报。

        3、实验时,“上锁”状态通过发光的LED灯显示,声、光报警通过有源蜂鸣器和LED灯指示

        4、写出设计步骤,对各个模块设计VHDL代码

        5、画出电路原理图

        6、对设计的电路进行仿真、修改,使仿真结果达到设计要求。

三、实验方案分析与设计

        根据“自顶向下”的设计方法,先确定系统顶层实体的功能设计,按功能划分为若干模块,然后对每一个模块进一步细分,得到简单易实现的子模块。

        经分析,该数字密码锁有如下模块:控制器、用于记录输入密码位数的计数器1、用于记录错误次数的计数器2、比较器、译码器、寄存器。

        控制器本质上为一个具有7个状态的状态机,由各转移信号控制以进入对应的状态。具体状态有:OUTLOCK(开锁)、INLOCK(关锁)、PS_INPUT(输入密码)、PS_CHANGE(修改密码)、PS_RIGHT(密码正确)、PS_WRONG(密码错误)、ALARM(警报)。

        (下面几个模块写得简略一点)

        译码器:将输入信号转为二进制

        比较器:比较译码器输出信号是否与寄存器中预设密码相同

        计数器1:记录密码输入位数

        计数器2:记录错误次数

        寄存器:根据使能信号的不同实现不同功能,修改密码 / 传输密码

四、具体实现过程描述

        (VHDL的层次化是相当显著的,这边我给大家一个顶层封装逻辑图和一个重要模块的底层代码设计)

        注意:只是供大家参考,根据每个人设计的不同,每个模块会有不同的端口。

        顶层封装逻辑图:

        下面给出最重要的控制器的底层逻辑,给出了两个状态对应的逻辑信号控制和状态转移控制。如果读者理解了数字密码锁的要求(什么状态读什么信号转移成什么状态)和上面的顶层封装逻辑图的话,仿照给出模块将控制器代码补全并不是难事。

library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity control1 is port( clk:in std_logic; --时钟信号 lock:in std_logic; --上锁信号 start:in std_logic; --开始输入密码信号 off_al:in std_logic; --消除警报信号 ps_ch:in std_logic; --修改密码信号 enter:in std_logic; --确认信号 wro_count:in std_logic; --错误次数 ps_i:in std_logic; --输入密码 cmp_r:in std_logic; --比较器结果 cin:in std_logic; --密码位数是否正确 code_en:out std_logic; --译码器使能 cnt_clr:out std_logic; --计数器1清零 cnt_clr2:out std_logic; --计数器2清零 cnt_clk2:out std_logic; --计数器2时钟 reg_wr:out std_logic; --决定寄存器当前作用是输出密码还是修改密码 key:out std_logic; --锁的开关 warn:out std_logic --警报信号 ); end control1; architecture behave of control1 is CONSTANT KEY_ACTIVE:STD_LOGIC:='1'; --有效电平 type state_type is (OUTLOCK,INLOCK,PS_INPUT,PS_RIGHT,PS_WRONG,ALARM,PS_CHANGE); --七个状态 signal state:state_type; begin process(clk) begin if rising_edge(clk) then case state is -------------------------- when OUTLOCK=> --开锁状态 key


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有