📄 p_altst2.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 + -