EDA课设(数字系统设计)

您所在的位置:网站首页 如何设qq密码锁 EDA课设(数字系统设计)

EDA课设(数字系统设计)

2024-07-08 15:03| 来源: 网络整理| 查看: 265

目录

1,注意

2,可能遇到的问题

3,题目描述

4,实现前期准备

5,实现代码

6,引脚设置

7,部分验证

1,注意

该博客是根据自己的课设报告写的,所以大家不要抄袭,仅用作给大家提供实现思路以及一些经验,希望大家根据我写的东西,理解关键的代码,较为熟练的掌握VHDL语言的语法,规则以及流程,学会如何自己实现所有的功能;

2,可能遇到的问题

1,对于不会安装quartusII 9.0的同学可以参考前一篇博客:EDA课设(数字系统设计)--quartusII 9.0安装及altera usb-blaster驱动识别失败解决

2,如果大家不知道如何使用板载的led灯,8段数码管,clk信号,可以参考前一篇博客里面下载的资源,在目录:数字系统设计实验\实验,下的EDA-I便携式数字系统实验与设计平台说明书.pdf文件;

3,题目描述

完成一简易密码锁的设计,实现6位密码的设定与开锁。

1)使用6个按键进行密码输入,K0-K5,分别代表数字键0-5,用右边6个数码管显示;

2)密码初始值为555555;开锁方式:xxxxxx(x代表密码数字,位数等于6位);上电后,初始显示:"PP------";输入一个数字就在最右数码管显示,前面的数字均左移一个数码管。输入正确显示“--OPEN--”,输入错误显示“--EEEE--”。

3)设计一个重新输入按钮K6,在输入未全或者错误(没达到3次)时,恢复输入,按下后显示“PP------”

4)工作时钟1khz;连续3次输错密码则锁死,只有重启电路;连续2次错误点亮警报灯。

5) 用按键k7设置密码,设定方式:旧密码,输入两次,输入前显示为“OP------”,正确后提示输入新密码:“NP------”,连续输入2次。以上出错均显示“--EEEE--”,可按K7恢复设置,或者K6。

4,实现前期准备

根据题目的描述,我们可以将大体的设计分成两个主要部分,第一个部分是开锁,第二个部分是重置密码;

想明白自己要实现的功能之后,下面就是设计程序的流程了,因为VHDL内部绝大部分是并行执行的,但是我习惯了写顺序的代码,所以在编写程序时犯了许多的逻辑错误,比如对一些信号赋值时,本来想要的是一个一个改变,但是由于是并行执行,它总是全部一起赋值,导致数码管只能显示一样的内容,不能得到我想要的结果,后面我自己想了很久,也参考了一些别人的文章,经过自己的反复测试,发现状态的转换可以实现我想要的功能,所以我最后决定用类似状态转换的方式来实现我想要的效果,实现这个题目的要求并非几句话就可以说清楚的,过程是非常痛苦的,但是大家也不要因为一些困难就选择摆烂,应该要了解VHDL的结构,尽量理解书上的知识以及参考代码,达到能自己实现所有功能的目的,这应该也是课设的目的;

下面这个是我做这个题目的自己做思维导图,这个图是我实现密码锁所有之后才做的,算是后期的东西,放在这里主要是便于大家理解下面的代码,了解思路;

5,实现代码 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity seg is port( clk : in std_logic; key0,key1,key2,key3,key4,key5,key6,key7 : in std_logic; led_warning : out std_logic_vector(7 downto 0); smg_led : out std_logic_vector(7 downto 0);--数码管8段led smg_code : out std_logic_vector(7 downto 0)--8个数码管 ); end entity seg; architecture display of seg is type smg_led_array is array (7 downto 0) of std_logic_vector(7 downto 0); signal smg_leds : smg_led_array; signal smg_index : integer range 0 to 7 :=0; type smg_code_array is array (0 to 9) of std_logic_vector(7 downto 0); signal smg_codes : smg_code_array; --存放字符 signal password : std_logic_vector(17 downto 0); signal password_code:std_logic_vector(17 downto 0) :="101101101101101101"; type smg_int_array is array (7 downto 0) of integer; signal smg_int : smg_int_array :=(7,7,6,6,6,6,6,6); --存放字符对应的数字 signal counter,count : std_logic_vector(1 downto 0) := "00"; signal i : std_logic_vector(2 downto 0) := "000"; signal state : std_logic_vector(3 downto 0) := "0000"; signal k0,k1,k2,k3,k4,k5,k6,k7 : std_logic; begin smg_codes(0)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3