OpenCores
URL https://opencores.org/ocsvn/v65c816/v65c816/trunk

Subversion Repositories v65c816

[/] [v65c816/] [trunk/] [yr.vhd] - Blame information for rev 3

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 Valerio63
library IEEE;
2
use IEEE.std_logic_1164.all;  -- defines std_logic types
3
use IEEE.STD_LOGIC_unsigned.all;
4
use IEEE.STD_LOGIC_arith.all;
5
 
6
-- 16 bit index register "Y"
7
entity yr is
8
  port(    clk:  in STD_LOGIC;
9
         fwait:  in STD_LOGIC;
10
                    size:  in STD_LOGIC;
11
        ld_lsb:  in STD_LOGIC;
12
        ld_msb:  in STD_LOGIC;
13
                  u:  in STD_LOGIC;
14
                       d:  in STD_LOGIC;
15
           din:  in STD_LOGIC_VECTOR(15 downto 0);
16
          dout: out STD_LOGIC_VECTOR(15 downto 0)
17
      );
18
end yr;
19
 
20
architecture rtl of yr is
21
signal reg: STD_LOGIC_VECTOR(15 downto 0);
22
signal op:  STD_LOGIC_VECTOR(3 downto 0);
23
begin
24
  op <= u & d & ld_msb & ld_lsb;
25
  process(clk)
26
    begin
27
      if (clk'event and clk = '1') then
28
        if fwait = '1' then
29
          reg <= reg;
30
        else
31
        if fwait = '1' then
32
          reg <= reg;
33
        else
34
                                 case op is
35
                                        when   "0001" => reg(7 downto 0) <= din(7 downto 0);              -- load lsb
36
                                                                                reg(15 downto 8) <= reg(15 downto 8);
37
                                        when   "0010" => reg(15 downto 8) <= din(7 downto 0);             -- load msb
38
                                                                                reg(7 downto 0) <= reg(7 downto 0);
39
                                        when   "0011" => reg <= din;                                      -- load msb & lsb                                             
40
                                        when   "0100" => reg <= reg - "0000000000000001";                 -- decrement
41
                                        when   "1000" => reg <= reg + "0000000000000001";                 -- increment
42
                                        when others   => reg <= reg;
43
                                 end case;
44
                                 if size = '1' then
45
                                   reg(15 downto 8) <= (others => '0');                              -- with size = '1' (X = '1') the msb of index register is always zero
46
                                 end if;
47
                  end if;
48
        end if;
49
      end if;
50
  end process;
51
  dout <= reg;
52
end rtl;
53
 
54
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.