基于FPGA的4位十进制密码锁VHDL代码Quartus仿真

名称:基于FPGA的4位十进制密码锁VHDL代码Quartus仿真(文末获取)

软件:Quartus

语言:VHDL

代码功能:

4位十进制密码锁

1、可以输入0~9个数字

2、密码为4位,输入错误可以删除

3、密码正确led提示开锁,密码错误达3次报警

4、可以通过按键修改密码

1. 工程文件

2. 程序文件

3. 程序编译

4. RTL图

5. Testbench

6. 仿真图

整体仿真图

显示模块

密码输入模块

密码锁控制模块

密码修改模块

部分代码展示:

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
   USE ieee.std_logic_unsigned.all;
--密码输入模块
ENTITY mima_input 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
  
      delect         : IN STD_LOGIC;--删除键
      current_state  : IN STD_LOGIC_VECTOR(2 DOWNTO 0);--当前状态
      
      password       : OUT STD_LOGIC_VECTOR(15 DOWNTO 0)--4位密码,用BCD码表示,一共16位
   );
END mima_input;
-- current_state=3'd0;锁住
-- current_state=3'd1;密码比对
-- current_state=3'd2;开锁
-- current_state=3'd3;密码错误
-- current_state=3'd4;修改密码
-- current_state=3'd5;报警
ARCHITECTURE trans OF mima_input IS
 --定义中间信号
   SIGNAL current_num_buf  : STD_LOGIC_VECTOR(2 DOWNTO 0):="000";--当前输入密码个数
   SIGNAL delect_buf1   : STD_LOGIC := '0'; 
   SIGNAL delect_buf2   : STD_LOGIC := '0'; 
   SIGNAL key_0_buf1   : STD_LOGIC := '0';
   SIGNAL key_1_buf1   : STD_LOGIC := '0';
   SIGNAL key_2_buf1   : STD_LOGIC := '0';
   SIGNAL key_3_buf1   : STD_LOGIC := '0';
   SIGNAL key_4_buf1   : STD_LOGIC := '0';
   SIGNAL key_5_buf1   : STD_LOGIC := '0';
   SIGNAL key_6_buf1   : STD_LOGIC := '0';
   SIGNAL key_7_buf1   : STD_LOGIC := '0';
   SIGNAL key_8_buf1   : STD_LOGIC := '0';
   SIGNAL key_9_buf1   : STD_LOGIC := '0';
   
   SIGNAL key_0_buf2   : STD_LOGIC := '0';
   SIGNAL key_1_buf2   : STD_LOGIC := '0';
   SIGNAL key_2_buf2   : STD_LOGIC := '0';
   SIGNAL key_3_buf2   : STD_LOGIC := '0';
   SIGNAL key_4_buf2   : STD_LOGIC := '0';
   SIGNAL key_5_buf2   : STD_LOGIC := '0';
   SIGNAL key_6_buf2   : STD_LOGIC := '0';
   SIGNAL key_7_buf2   : STD_LOGIC := '0';
   SIGNAL key_8_buf2   : STD_LOGIC := '0';
   SIGNAL key_9_buf2   : STD_LOGIC := '0';
   
   SIGNAL key_0_rise   : STD_LOGIC;
   SIGNAL key_1_rise   : STD_LOGIC;
   SIGNAL key_2_rise   : STD_LOGIC;
   SIGNAL key_3_rise   : STD_LOGIC;
   SIGNAL key_4_rise   : STD_LOGIC;
   SIGNAL key_5_rise   : STD_LOGIC;
   SIGNAL key_6_rise   : STD_LOGIC;
   SIGNAL key_7_rise   : STD_LOGIC;
   SIGNAL key_8_rise   : STD_LOGIC;
   SIGNAL key_9_rise   : STD_LOGIC;
   SIGNAL delect_rise   : STD_LOGIC;
   SIGNAL password_buf : STD_LOGIC_VECTOR(15 DOWNTO 0) := "0000000000000000";
BEGIN
--信号缓存
源代码

 扫描文章末尾的公众号二维码

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于VHDL设计用PGA实现一款简易电子密码锁QUARTUS工程源码+文档说明 library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; use IEEE.std_logic_arith.all; entity time_counter is port( clk:in std_logic; --50M时钟输入 reset_n:in std_logic; --复信号输入 password1_in:in std_logic_vector(3 downto 0); -- password2_in:in std_logic_vector(3 downto 0); -- password3_in:in std_logic_vector(3 downto 0); -- password4_in:in std_logic_vector(3 downto 0); -- ok_signal_counter_in:in std_logic_vector(2 downto 0); seg_duan:out std_logic_vector(7 downto 0); --数码管段信号输出 seg_wei:out std_logic_vector(7 downto 0) --数码管信号输出 ); end time_counter; architecture time_counter_behave of time_counter is signal clk_1hz: std_logic; signal count: std_logic_vector(24 downto 0); signal clk_scan: std_logic; signal seg_select: std_logic_vector(2 downto 0); signal scan_count: std_logic_vector(13 downto 0); begin -- //**************************************************************************************************** -- // 模块名称:50M时钟分频至1HZ模块 -- // 功能描述: -- //**************************************************************************************************** process(clk,reset_n) begin if(reset_n = '0')then clk_1hz <= '0'; count <= "0000000000000000000000000"; elsif(clk'event and clk = '1')then--上升沿触发 if(count = "1011111010111100001000000")then-- count <= "0000000000000000000000000"; clk_1hz <= not clk_1hz; else count <= count + '1'; end if; end if; end process; -- //**************************************************************************************************** -- // 模块名称:数码管扫描时钟产生模块 -- // 功能描述: -- //************************************************************************************
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值