⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p_altst2.vhd

📁 Workshop vhdl code from Esperan
💻 VHD
字号:
-----------------------------------------------------------------------
-- 
-- Original Code Copyright (c) 1999 by Esperan. All rights reserved.
-- www.esperan.com
-- 
-- This source file may be used and distributed without restriction
-- provided that this copyright statement is not removed from the file
-- and that any derivative work contains this copyright notice. 
--
-- Esperan VHDL Alarm Clock Lab Exercise Design V5.0
--
-- P_altst2.vhd
-- Package defining procedures used in the testbench for the
-- Alarm Clock Controller and Keyscan blocks (T_a_fsm2.vhd)
--
----------------------------------------------------

Library IEEE;
use IEEE.Std_Logic_1164.all; 
use std.textio.all;

------------------------------------------------------------------------
-- Package Declaration
------------------------------------------------------------------------

package P_ALARM_TEST is

-- type for telephone keypad keys - 
--'-' is the "no key" value, put first in declaration so sim initialises to it!
   type T_KEYPAD is ('-', '0',  '1', '2', '3', '4', '5', '6', '7', '8', '9', '*', '#');

-- Constant for the clock period we will use
constant PERIOD : time := 3.9 ms;

-- Constants to determine time for a keypress 
-- and time between keypresses
constant KEYPRESS : time := 100 ms;
constant KEYOFF : time := 300 ms;

-- This function converts std_logic to character so the standard 
-- write routine for character can be used

   function STDU2CHAR (LOGIC: std_logic) return character;

------------------------------------------------------------------------
-- The following procedures perform the actions required of the commands
-- SHALM, SETAL, SETTI, COUNT and KTOUT
------------------------------------------------------------------------

   procedure DO_SHALM(signal KEY: out T_KEYPAD);

   procedure DO_SETAL(SETTING: in string(1 to 4);
                      signal KEY : out T_KEYPAD);

   procedure DO_SETTI(SETTING: in string(1 to 4);
                      signal KEY : out T_KEYPAD);

   procedure DO_COUNT(CYCLES: in character);

   procedure DO_KTOUT(signal KEY : out T_KEYPAD);

end P_ALARM_TEST;


------------------------------------------------------------------------
-- Package Body Declaration
------------------------------------------------------------------------
package body P_ALARM_TEST is
------------------------------------------------------------------------

------------------------------------------------------------------------
-- STDU2CHAR type conversion function
------------------------------------------------------------------------
   function STDU2CHAR (LOGIC: std_logic) return character is
      variable CHAR : character;
   begin 
      case LOGIC is
         when '1' => CHAR := '1';
         when '0' => CHAR := '0';
         when others => CHAR := '-';
      end case;
      return CHAR;
   end STDU2CHAR;

------------------------------------------------------------------------
-- CHAR2KEY type conversion function
--
-- Define this function in package body but not in package - only visible 
-- to definitions within package body
------------------------------------------------------------------------
   function CHAR2KEY (CHAR : character) return T_KEYPAD is
      variable KEYOUT : T_KEYPAD;
   begin
      case CHAR is
         when '0' => KEYOUT := '0';
         when '1' => KEYOUT:= '1';
         when '2' => KEYOUT:= '2';
         when '3' => KEYOUT:= '3';
         when '4' => KEYOUT:= '4';
         when '5' => KEYOUT:= '5';
         when '6' => KEYOUT:= '6';
         when '7' => KEYOUT:= '7';
         when '8' => KEYOUT:= '8';
         when '9' => KEYOUT:= '9';
         when others => 
      end case;
      return KEYOUT;
   end CHAR2KEY;

function CHAR2INT (CHAR : character) return integer  is
      variable INT : integer;
   begin
      case CHAR is
         when '0' => INT := 0;
         when '1' => INT:= 1;
         when '2' => INT:= 2;
         when '3' => INT:= 3;
         when '4' => INT:= 4;
         when '5' => INT:= 5;
         when '6' => INT:= 6;
         when '7' => INT:= 7;
         when '8' => INT:= 8;
         when '9' => INT:= 9;
         when others => 
      end case;
      return INT;
   end CHAR2INT;


------------------------------------------------------------------------
-- SHALM command
------------------------------------------------------------------------
   procedure DO_SHALM(signal KEY : out T_KEYPAD) is
   begin
      KEY <= '*'; -- alarm button set
      wait for KEYPRESS;
      KEY <= '-';
      wait for KEYOFF;
   end DO_SHALM;
       
------------------------------------------------------------------------
-- SETAL command
------------------------------------------------------------------------
   procedure DO_SETAL(SETTING: in string(1 to 4);
                      signal KEY : out  T_KEYPAD) is
   begin
      for I in 1 to 4 loop
         KEY <= CHAR2KEY(SETTING(I));
         wait for KEYPRESS;
         KEY <= '-';
         wait for KEYOFF;
      end loop;

      KEY <= '*'; -- alarm button set
      wait for KEYPRESS;
      KEY <= '-';
      wait for KEYOFF;
   end DO_SETAL;

------------------------------------------------------------------------
-- SETTI command
------------------------------------------------------------------------
   procedure DO_SETTI(SETTING: in string(1 to 4);
                      signal KEY : out T_KEYPAD) is
   begin
      for I in 1 to 4 loop
         KEY <= CHAR2KEY(SETTING(I));
         wait for KEYPRESS;
         KEY <= '-';
         wait for KEYOFF;
      end loop;

      KEY <= '#';
      wait for KEYPRESS;
      KEY  <= '-';
    wait for KEYOFF;
   end DO_SETTI;

------------------------------------------------------------------------
-- COUNT command
------------------------------------------------------------------------
   procedure DO_COUNT(CYCLES: in character) is
   begin
      wait for (CHAR2INT(CYCLES)) * 1000 ms;
   end DO_COUNT;

------------------------------------------------------------------------
-- KTOUT command
------------------------------------------------------------------------
   procedure DO_KTOUT(signal KEY : out T_KEYPAD) is
   begin
      KEY <= '7';
      wait for KEYPRESS;
      KEY <= '-';
      wait for 15*KEYOFF;
   end DO_KTOUT;

end P_ALARM_TEST;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -