赞
踩
名称:基于FPGA的通用电子密码锁VHDL代码Quartus仿真(文末获取)
软件:Quartus
语言:VHDL
代码功能:
任务
使用一片CPLD/FPGA设计实现一个具有较高安全性和较低成本的通用电子密
码锁,其具体功能要求如下:←
1)数码输入:每按下一个数字键,就输入一个数值,并在显示器上的最右方显示出该数值,同时将先前输入的数据依序左移一个数字位置。←
(2)数码清除:按下此键可清除前面所有的输入值,清除成为“0000
(3)密码更改:按下此键时会将目前的数字设定成新的密码。←
(4)激活电锁:按下此键可将密码锁上锁。←
(5)解除电锁:按下此键会检査输入的密码是否正确,密码正确即开锁。←
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. Testbench
6. 仿真图
整体仿真图
显示模块
密码输入模块
密码锁控制模块
密码修改模块
部分代码展示:
--设计一个四位的电子密码锁, --每按下一个数字键,就输入一个数字, --并在显示器上显示该数值,同时将先前输入的数据左移。 --密码清除(清除结果为0000), --密码更改(按下更改键可将目前的密码设定为新密码), --密码上锁(激活电锁) --解除电锁(按下解除首先检查密码是否正确,密码正确就开锁)功能。 LIBRARY ieee; USE ieee.std_logic_1164.all; --顶层模块 ENTITY mimasuo IS PORT ( clk : IN STD_LOGIC;--时钟 key_0 : IN STD_LOGIC;--按键输入0 key_1 : IN STD_LOGIC;--按键输入1 key_2 : IN STD_LOGIC;--按键输入2 key_3 : IN STD_LOGIC;--按键输入3 key_4 : IN STD_LOGIC;--按键输入4 key_5 : IN STD_LOGIC;--按键输入5 key_6 : IN STD_LOGIC;--按键输入6 key_7 : IN STD_LOGIC;--按键输入7 key_8 : IN STD_LOGIC;--按键输入8 key_9 : IN STD_LOGIC;--按键输入9 confirm : IN STD_LOGIC;--确认键(开锁) modify : IN STD_LOGIC;--修改键(更改) lock_up : IN STD_LOGIC;--锁住键(上锁) delect : IN STD_LOGIC;--删除键(清除) led_open : OUT STD_LOGIC;--开锁指示信号,高电平表示开锁,低电平表示锁住 HEX0 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--数码管显示密码 HEX1 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--数码管显示密码 HEX2 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--数码管显示密码 HEX3 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) --数码管显示密码 ); END mimasuo; ARCHITECTURE trans OF mimasuo IS --例化重置模块 COMPONENT reset_password IS PORT ( clk : IN STD_LOGIC; password : IN STD_LOGIC_VECTOR(15 DOWNTO 0); correct_password : OUT STD_LOGIC_VECTOR(15 DOWNTO 0); modify : IN STD_LOGIC; current_state : IN STD_LOGIC_VECTOR(2 DOWNTO 0) ); END COMPONENT; --例化显示模块 COMPONENT display IS PORT ( clk : IN STD_LOGIC; password : IN STD_LOGIC_VECTOR(15 DOWNTO 0);--输入密码 HEX0 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--数码管显示密码 HEX1 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--数码管显示密码 HEX2 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--数码管显示密码 HEX3 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) --数码管显示密码 ); END COMPONENT; --例化密码输入模块 COMPONENT mima_input IS PORT ( clk : IN STD_LOGIC; key_0 : IN STD_LOGIC; key_1 : IN STD_LOGIC; key_2 : IN STD_LOGIC; key_3 : IN STD_LOGIC; key_4 : IN STD_LOGIC; key_5 : IN STD_LOGIC; key_6 : IN STD_LOGIC; key_7 : IN STD_LOGIC; key_8 : IN STD_LOGIC; key_9 : IN STD_LOGIC; delect : IN STD_LOGIC;--删除键 current_state : IN STD_LOGIC_VECTOR(2 DOWNTO 0); password : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) ); END COMPONENT; --例化密码锁控制模块 COMPONENT mimasuo_ctrl IS PORT ( clk : IN STD_LOGIC; password : IN STD_LOGIC_VECTOR(15 DOWNTO 0); correct_password : IN STD_LOGIC_VECTOR(15 DOWNTO 0); confirm : IN STD_LOGIC; modify : IN STD_LOGIC; lock_up : IN STD_LOGIC; led_open : OUT STD_LOGIC; current_state : OUT STD_LOGIC_VECTOR(2 DOWNTO 0) ); END COMPONENT; --定义信号 SIGNAL current_state : STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL password : STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL correct_password : STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL led_open_signal : STD_LOGIC; BEGIN led_open <= led_open_signal; --调用密码输入模块 i_mima_input : mima_input PORT MAP ( clk => clk, key_0 => key_0, key_1 => key_1, key_2 => key_2, key_3 => key_3, key_4 => key_4, key_5 => key_5, key_6 => key_6, key_7 => key_7, key_8 => key_8, key_9 => key_9, delect => delect, current_state => current_state, password => password );
扫描文章末尾的公众号二维码
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。