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

Subversion Repositories c16

[/] [c16/] [trunk/] [vhdl/] [select_yy.vhd] - Blame information for rev 2

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

Line No. Rev Author Line
1 2 jsauermann
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.STD_LOGIC_ARITH.ALL;
4
use IEEE.STD_LOGIC_UNSIGNED.ALL;
5
 
6
--  Uncomment the following lines to use the declarations that are
7
--  provided for instantiating Xilinx primitive components.
8
--library UNISIM;
9
--use UNISIM.VComponents.all;
10
 
11
use work.cpu_pack.ALL;
12
 
13
entity select_yy is
14
    Port(       SY      : in  std_logic_vector( 3 downto 0);
15
                        IMM     : in  std_logic_vector(15 downto 0);
16
                        QUICK   : in  std_logic_vector( 3 downto 0);
17
                        M_RDAT  : in  std_logic_vector( 7 downto 0);
18
                        IO_RDAT : in  std_logic_vector( 7 downto 0);
19
                        RR      : in  std_logic_vector(15 downto 0);
20
                        YY      : out std_logic_vector(15 downto 0)
21
                );
22
end select_yy;
23
 
24
architecture Behavioral of select_yy is
25
 
26
        function b4(A : std_logic) return std_logic_vector is
27
        begin
28
                return A & A & A & A;
29
        end;
30
 
31
        function b8(A : std_logic) return std_logic_vector is
32
        begin
33
                return b4(A) & b4(A);
34
        end;
35
 
36
begin
37
 
38
        -- bits 1..0
39
        --
40
        s_1_0: process(SY, IMM(1 downto 0), QUICK(1 downto 0), M_RDAT(1 downto 0),
41
                    IO_RDAT(1 downto 0), RR(1 downto 0))
42
        begin
43
                case SY is
44
                        when SY_I16 | SY_SI8
45
                           | SY_UI8                     => YY(1 downto 0) <= IMM    (1 downto 0);
46
                        when SY_RR                      => YY(1 downto 0) <= RR     (1 downto 0);
47
                        when SY_SQ | SY_UQ      => YY(1 downto 0) <= QUICK  (1 downto 0);
48
                        when SY_SM | SY_UM      => YY(1 downto 0) <= M_RDAT (1 downto 0);
49
                        when SY_IO                      => YY(1 downto 0) <= IO_RDAT(1 downto 0);
50
                        when others                     => YY(1 downto 0) <= SY     (1 downto 0);
51
                end case;
52
        end process;
53
 
54
        -- bits 3..2
55
        --
56
        s_3_2: process(SY, IMM(3 downto 2), QUICK(3 downto 2), M_RDAT(3 downto 2),
57
                    IO_RDAT(3 downto 2), RR(3 downto 2))
58
        begin
59
                case SY is
60
                        when SY_I16 | SY_SI8
61
                           | SY_UI8                     => YY(3 downto 2) <= IMM    (3 downto 2);
62
                        when SY_RR                      => YY(3 downto 2) <= RR     (3 downto 2);
63
                        when SY_SQ | SY_UQ      => YY(3 downto 2) <= QUICK  (3 downto 2);
64
                        when SY_SM | SY_UM      => YY(3 downto 2) <= M_RDAT (3 downto 2);
65
                        when SY_IO                      => YY(3 downto 2) <= IO_RDAT(3 downto 2);
66
                        when others                     => YY(3 downto 2) <= "00";
67
                end case;
68
        end process;
69
 
70
        -- bits 7..4
71
        --
72
        s_7_4: process(SY, IMM(7 downto 4), QUICK(3), M_RDAT(7 downto 4),
73
                    IO_RDAT(7 downto 4), RR(7 downto 4))
74
        begin
75
                case SY is
76
                        when SY_I16 | SY_SI8
77
                           | SY_UI8                     => YY(7 downto 4) <= IMM    (7 downto 4);
78
                        when SY_RR                      => YY(7 downto 4) <= RR     (7 downto 4);
79
                        when SY_SQ                      => YY(7 downto 4) <= b4(QUICK(3));
80
                        when SY_SM | SY_UM      => YY(7 downto 4) <= M_RDAT (7 downto 4);
81
                        when SY_IO                      => YY(7 downto 4) <= IO_RDAT(7 downto 4);
82
                        when others                     => YY(7 downto 4) <= "0000";
83
                end case;
84
        end process;
85
 
86
        -- bits 15..8
87
        --
88
        s_15_8: process(SY, IMM(15 downto 7), QUICK(3), M_RDAT(7), RR(15 downto 8))
89
        begin
90
                case SY is
91
                        when SY_I16                     => YY(15 downto 8) <= IMM  (15 downto 8);
92
                        when SY_SI8                     => YY(15 downto 8) <= b8(IMM(7));
93
                        when SY_RR                      => YY(15 downto 8) <= RR(15 downto 8);
94
                        when SY_SQ                      => YY(15 downto 8) <= b8(QUICK(3));
95
                        when SY_SM                      => YY(15 downto 8) <= b8(M_RDAT(7));
96
                        when others                     => YY(15 downto 8) <= "00000000";
97
                end case;
98
        end process;
99
 
100
end Behavioral;

powered by: WebSVN 2.1.0

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