------------------------------------------------------------ -- Copyright Mentor Graphic Corporation 1991. -- All rights reserved. ------------------------------------------------------------ -- -- Model Title: package for cpu description -- Date Created: 94/09/06 (TUE) -- Author: T. Ohtsuka -- ------------------------------------------------------------ -- Model Description: -- ----------------------------------------------------------- -- LIBRARY IEEE,work ; USE IEEE.STD_LOGIC_1164.ALL ; USE IEEE.STD_LOGIC_1164_EXTENSIONS.ALL ; PACKAGE cpu_package IS CONSTANT Cycle : TIME := 200 ns ; CONSTANT Word_width : POSITIVE := 8 ; CONSTANT Addr_size : POSITIVE := 8 ; CONSTANT Mem_size : POSITIVE := 8 ; CONSTANT Z : STD_LOGIC_VECTOR(Word_width-1 DOWNTO 0) := "ZZZZZZZZ" ; CONSTANT Alu_ctl_width : POSITIVE := 5 ; CONSTANT C_ctl_width : POSITIVE := 3 ; SUBTYPE Wordtype IS STD_LOGIC_VECTOR(Word_width-1 DOWNTO 0) ; SUBTYPE Bustype IS STD_LOGIC_VECTOR(Word_width-1 DOWNTO 0) ; SUBTYPE Regtype IS STD_LOGIC_VECTOR(Word_width-1 DOWNTO 0) ; SUBTYPE Aluctltype IS STD_LOGIC_VECTOR(Alu_ctl_width-1 DOWNTO 0) ; SUBTYPE Cctltype IS STD_LOGIC_VECTOR(C_ctl_width-1 DOWNTO 0) ; FUNCTION P_rising(SIGNAL clk : STD_LOGIC) RETURN BOOLEAN ; FUNCTION P_falling(SIGNAL clk : STD_LOGIC) RETURN BOOLEAN ; FUNCTION Csar_int(CONSTANT csar : STD_LOGIC_VECTOR(11 DOWNTO 0)) RETURN integer ; FUNCTION Mar_int(CONSTANT addr : STD_LOGIC_VECTOR(7 DOWNTO 0)) RETURN integer ; FUNCTION Sw_rising(SIGNAL sw : STD_LOGIC) RETURN BOOLEAN ; END cpu_package ; -- --------------------------------------------------------- --Copyright Mentor Graphic Corporation 1991. --All rights reserved. -- --------------------------------------------------------- --Arch. Body for entity declared in ------------------------------------------------------------ -- LIBRARY IEEE,ARITHMETIC,work ; USE IEEE.STD_LOGIC_1164.ALL ; USE IEEE.STD_LOGIC_1164_EXTENSIONS.ALL ; USE work.ALL ; PACKAGE BODY cpu_package IS FUNCTION P_rising(SIGNAL clk : STD_LOGIC) RETURN BOOLEAN IS BEGIN IF clk = '1' AND clk'LAST_VALUE = '0' AND clk'EVENT THEN RETURN TRUE ; ELSE RETURN FALSE ; END IF ; END P_rising ; FUNCTION P_falling(SIGNAL clk : STD_LOGIC) RETURN BOOLEAN IS BEGIN IF clk = '0' AND clk'LAST_VALUE = '1' AND clk'EVENT THEN RETURN TRUE ; ELSE RETURN FALSE ; END IF ; END P_falling ; FUNCTION Csar_int(CONSTANT csar : IN STD_LOGIC_VECTOR(11 DOWNTO 0)) RETURN integer IS VARIABLE i_out : integer := 0 ; BEGIN IF csar(11) = '1' THEN i_out := i_out + 2048 ; END IF ; IF csar(10) = '1' THEN i_out := i_out + 1024 ; END IF ; IF csar( 9) = '1' THEN i_out := i_out + 512 ; END IF ; IF csar( 8) = '1' THEN i_out := i_out + 256 ; END IF ; IF csar( 7) = '1' THEN i_out := i_out + 128 ; END IF ; IF csar( 6) = '1' THEN i_out := i_out + 64 ; END IF ; IF csar( 5) = '1' THEN i_out := i_out + 32 ; END IF ; IF csar( 4) = '1' THEN i_out := i_out + 16 ; END IF ; IF csar( 3) = '1' THEN i_out := i_out + 8 ; END IF ; IF csar( 2) = '1' THEN i_out := i_out + 4 ; END IF ; IF csar( 1) = '1' THEN i_out := i_out + 2 ; END IF ; IF csar( 0) = '1' THEN i_out := i_out + 1 ; END IF ; RETURN i_out ; END Csar_int ; FUNCTION Mar_int(CONSTANT addr : IN STD_LOGIC_VECTOR(7 DOWNTO 0)) RETURN integer IS VARIABLE i_out : integer := 0 ; BEGIN IF addr( 7) = '1' THEN i_out := i_out + 128 ; END IF ; IF addr( 6) = '1' THEN i_out := i_out + 64 ; END IF ; IF addr( 5) = '1' THEN i_out := i_out + 32 ; END IF ; IF addr( 4) = '1' THEN i_out := i_out + 16 ; END IF ; IF addr( 3) = '1' THEN i_out := i_out + 8 ; END IF ; IF addr( 2) = '1' THEN i_out := i_out + 4 ; END IF ; IF addr( 1) = '1' THEN i_out := i_out + 2 ; END IF ; IF addr( 0) = '1' THEN i_out := i_out + 1 ; END IF ; RETURN i_out ; END Mar_int ; -- Detect the SW turning. FUNCTION Sw_rising(SIGNAL sw : STD_LOGIC) RETURN BOOLEAN IS BEGIN IF sw = '1' AND sw'EVENT THEN RETURN TRUE ; ELSE RETURN FALSE ; END IF ; END Sw_rising ; END cpu_package ;