| 1 | 2 | petebleack | -- ***** BEGIN LICENSE BLOCK *****
 | 
      
         | 2 |  |  | -- 
 | 
      
         | 3 | 5 | petebleack | -- $Id: STORAGE_REGISTER.vhd,v 1.2 2005-05-27 16:00:29 petebleackley Exp $ $Name: not supported by cvs2svn $
 | 
      
         | 4 | 2 | petebleack | -- *
 | 
      
         | 5 |  |  | -- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 | 
      
         | 6 |  |  | -- *
 | 
      
         | 7 |  |  | -- * The contents of this file are subject to the Mozilla Public License
 | 
      
         | 8 |  |  | -- * Version 1.1 (the "License"); you may not use this file except in compliance
 | 
      
         | 9 |  |  | -- * with the License. You may obtain a copy of the License at
 | 
      
         | 10 |  |  | -- * http://www.mozilla.org/MPL/
 | 
      
         | 11 |  |  | -- *
 | 
      
         | 12 |  |  | -- * Software distributed under the License is distributed on an "AS IS" basis,
 | 
      
         | 13 |  |  | -- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
 | 
      
         | 14 |  |  | -- * the specific language governing rights and limitations under the License.
 | 
      
         | 15 |  |  | -- *
 | 
      
         | 16 |  |  | -- * The Original Code is BBC Research and Development code.
 | 
      
         | 17 |  |  | -- *
 | 
      
         | 18 |  |  | -- * The Initial Developer of the Original Code is the British Broadcasting
 | 
      
         | 19 |  |  | -- * Corporation.
 | 
      
         | 20 |  |  | -- * Portions created by the Initial Developer are Copyright (C) 2004.
 | 
      
         | 21 |  |  | -- * All Rights Reserved.
 | 
      
         | 22 |  |  | -- *
 | 
      
         | 23 |  |  | -- * Contributor(s): Peter Bleackley (Original author)
 | 
      
         | 24 |  |  | -- *
 | 
      
         | 25 |  |  | -- * Alternatively, the contents of this file may be used under the terms of
 | 
      
         | 26 |  |  | -- * the GNU General Public License Version 2 (the "GPL"), or the GNU Lesser
 | 
      
         | 27 |  |  | -- * Public License Version 2.1 (the "LGPL"), in which case the provisions of
 | 
      
         | 28 |  |  | -- * the GPL or the LGPL are applicable instead of those above. If you wish to
 | 
      
         | 29 |  |  | -- * allow use of your version of this file only under the terms of the either
 | 
      
         | 30 |  |  | -- * the GPL or LGPL and not to allow others to use your version of this file
 | 
      
         | 31 |  |  | -- * under the MPL, indicate your decision by deleting the provisions above
 | 
      
         | 32 |  |  | -- * and replace them with the notice and other provisions required by the GPL
 | 
      
         | 33 |  |  | -- * or LGPL. If you do not delete the provisions above, a recipient may use
 | 
      
         | 34 |  |  | -- * your version of this file under the terms of any one of the MPL, the GPL
 | 
      
         | 35 |  |  | -- * or the LGPL.
 | 
      
         | 36 |  |  | -- * ***** END LICENSE BLOCK ***** */
 | 
      
         | 37 |  |  |  
 | 
      
         | 38 |  |  |  
 | 
      
         | 39 |  |  | library IEEE;
 | 
      
         | 40 |  |  | use IEEE.STD_LOGIC_1164.ALL;
 | 
      
         | 41 |  |  | use IEEE.STD_LOGIC_ARITH.ALL;
 | 
      
         | 42 |  |  | use IEEE.STD_LOGIC_UNSIGNED.ALL;
 | 
      
         | 43 |  |  |  
 | 
      
         | 44 |  |  | --  Uncomment the following lines to use the declarations that are
 | 
      
         | 45 |  |  | --  provided for instantiating Xilinx primitive components.
 | 
      
         | 46 |  |  | --library UNISIM;
 | 
      
         | 47 |  |  | --use UNISIM.VComponents.all;
 | 
      
         | 48 |  |  |  
 | 
      
         | 49 | 5 | petebleack |   entity STORAGE_REGISTER is
 | 
      
         | 50 | 2 | petebleack |     Port ( LOAD : in std_logic_vector(15 downto 0);
 | 
      
         | 51 |  |  |                           SHIFT_IN : in std_logic;
 | 
      
         | 52 |  |  |            SET_VALUE : in std_logic;
 | 
      
         | 53 |  |  |            SHIFT_ALL : in std_logic;
 | 
      
         | 54 |  |  |            SHIFT_MOST : in std_logic;
 | 
      
         | 55 |  |  |                           RESET : in std_logic;
 | 
      
         | 56 |  |  |            CLOCK : in std_logic;
 | 
      
         | 57 |  |  |            OUTPUT : out std_logic_vector(15 downto 0));
 | 
      
         | 58 |  |  | end entity STORAGE_REGISTER;
 | 
      
         | 59 |  |  |  
 | 
      
         | 60 |  |  | architecture RTL of STORAGE_REGISTER is
 | 
      
         | 61 | 5 | petebleack |  
 | 
      
         | 62 | 2 | petebleack |         signal SHIFT_LSBS: std_logic;
 | 
      
         | 63 |  |  |         signal SET_RESET: std_logic;
 | 
      
         | 64 |  |  |         signal ENABLE_MSB: std_logic;
 | 
      
         | 65 |  |  |         signal ENABLE_LSBS: std_logic;
 | 
      
         | 66 | 5 | petebleack |         signal D:       std_logic_vector(15 downto 0);
 | 
      
         | 67 |  |  |         signal Q:       std_logic_vector(15 downto 0);
 | 
      
         | 68 | 2 | petebleack | begin
 | 
      
         | 69 |  |  |  
 | 
      
         | 70 |  |  | -- control logic
 | 
      
         | 71 |  |  |         SET_RESET <= SET_VALUE or RESET;
 | 
      
         | 72 |  |  |         ENABLE_MSB <= SET_RESET or SHIFT_ALL;
 | 
      
         | 73 |  |  |         SHIFT_LSBS <= SHIFT_ALL or SHIFT_MOST;
 | 
      
         | 74 |  |  |         ENABLE_LSBS <= SET_RESET or SHIFT_LSBS;
 | 
      
         | 75 |  |  |  
 | 
      
         | 76 |  |  | -- outputs
 | 
      
         | 77 |  |  |  
 | 
      
         | 78 | 5 | petebleack |         OUTPUT <= Q;
 | 
      
         | 79 | 2 | petebleack |  
 | 
      
         | 80 | 5 | petebleack |  
 | 
      
         | 81 | 2 | petebleack | -- initialisation
 | 
      
         | 82 |  |  |  
 | 
      
         | 83 |  |  | INIT:   process(RESET,LOAD)
 | 
      
         | 84 |  |  | begin
 | 
      
         | 85 |  |  |         if RESET = '1' then
 | 
      
         | 86 | 5 | petebleack |                 D <= "0000000000000000";
 | 
      
         | 87 | 2 | petebleack |         else
 | 
      
         | 88 | 5 | petebleack |                 D <= LOAD;
 | 
      
         | 89 | 2 | petebleack |         end if;
 | 
      
         | 90 |  |  | end process INIT;
 | 
      
         | 91 |  |  |  
 | 
      
         | 92 |  |  | -- storage
 | 
      
         | 93 |  |  |  
 | 
      
         | 94 | 5 | petebleack |         STORE: process (CLOCK)
 | 
      
         | 95 |  |  |         begin
 | 
      
         | 96 |  |  |                 if CLOCK'event and CLOCK = '1' then
 | 
      
         | 97 |  |  |                         if      ENABLE_LSBS = '1' then
 | 
      
         | 98 |  |  |                                 if      SHIFT_LSBS = '1' then
 | 
      
         | 99 |  |  |                                         Q(14 downto 0) <= Q(13 downto 0) & SHIFT_IN;
 | 
      
         | 100 |  |  |                                 else
 | 
      
         | 101 |  |  |                                         Q(14 downto 0) <= D(14 downto 0);
 | 
      
         | 102 |  |  |                                 end if;
 | 
      
         | 103 |  |  |                         end if;
 | 
      
         | 104 |  |  |                         if ENABLE_MSB = '1' then
 | 
      
         | 105 |  |  |                                 if SHIFT_ALL = '1' then
 | 
      
         | 106 |  |  |                                         Q(15) <= Q(14);
 | 
      
         | 107 |  |  |                                 else
 | 
      
         | 108 |  |  |                                         Q(15) <= D(15);
 | 
      
         | 109 |  |  |                                 end if;
 | 
      
         | 110 |  |  |                         end if;
 | 
      
         | 111 |  |  |                 end if;
 | 
      
         | 112 |  |  |         end process STORE;
 | 
      
         | 113 | 2 | petebleack |  
 | 
      
         | 114 |  |  |  
 | 
      
         | 115 |  |  | end architecture RTL;
 | 
      
         | 116 |  |  |  
 |