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

Subversion Repositories diogenes

[/] [diogenes/] [trunk/] [vhdl/] [cpu/] [cpu.vhd] - Blame information for rev 236

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 160 fellnhofer
 
2
----------------------------------------------------------------------------------
3
-- Company: 
4
-- Engineer: 
5
-- 
6
-- Create Date:    18:54:11 02/07/2007 
7
-- Design Name: 
8
-- Module Name:    test - Behavioral 
9
-- Project Name: 
10
-- Target Devices: 
11
-- Tool versions: 
12
-- Description: 
13
--
14
-- Dependencies: 
15
--
16
-- Revision: 
17
-- Revision 0.01 - File Created
18
-- Additional Comments: 
19
--
20
----------------------------------------------------------------------------------
21
library IEEE;
22
use IEEE.STD_LOGIC_1164.ALL;
23
use IEEE.STD_LOGIC_ARITH.ALL;
24
use IEEE.STD_LOGIC_UNSIGNED.ALL;
25
 
26
use work.types.all;
27
 
28
---- Uncomment the following library declaration if instantiating
29
---- any Xilinx primitives in this code.
30
library UNISIM;
31
use UNISIM.Vcomponents.ALL;
32
 
33
 
34
entity cpu is
35
    Port ( clk_in : in STD_LOGIC;
36
           reset_in : in STD_LOGIC;
37
 
38
                          paddr: out std_logic_VECTOR(9 downto 0);
39
                          pdin: in slv_16;
40
 
41
                          extrd: out std_logic;
42
                          extwr: out std_logic;
43
                          extaddr: out slv_16;
44
                          extdout: out slv_16;
45
                          extdin: in slv_16
46
                        );
47
end cpu;
48
 
49
architecture Behavioral of cpu is
50
 
51
 
52
component fetch is
53
    Port ( clk : in STD_LOGIC;
54
                          reset : in STD_LOGIC;
55
                          pc : out slv_32;
56
                          brzero: in std_logic_vector(2 downto 0);
57
                          newpc: in slv_32;
58
                          testv: in slv_32;
59
                          result: in slv_32;
60
                          fw: in std_logic;
61
                          fw2_pc: in std_logic;
62
 
63
                          instr : out slv_16;
64
 
65
                                paddr: out std_logic_VECTOR(9 downto 0);
66
                                pdin: in slv_16
67
                        );
68
end component;
69
 
70
 
71
 
72
component decode
73
    Port ( clk : in STD_LOGIC;
74
           reset : in STD_LOGIC;
75
                          pc : in slv_32;
76
                          brzero: out std_logic_vector(2 downto 0);
77
                          newpc: out slv_32;
78
 
79
                          instr : in slv_16;
80
--                        instr_out : out slv_16;
81
                          op1 : out slv_32;
82
                          fwop1: out std_logic;
83
                          op2 : out slv_32;
84
                          fwop2: out std_logic;
85
                          fw_pc: out std_logic;
86
 
87
                          fwshiftop: out std_logic;
88
                          destreg : out std_logic_VECTOR(3 downto 0);
89
 
90
                          regaddr : in std_logic_VECTOR(3 downto 0);
91
                          result : in slv_32;
92
                          big_op : out std_logic_VECTOR(15 downto 0)
93
                        );
94
end component;
95
 
96
component execute
97
    Port ( clk : in STD_LOGIC;
98
           reset : in STD_LOGIC;
99
                          big_op : in std_logic_VECTOR(15 downto 0);
100
                          op1 : in slv_32;
101
                          fwop1: in std_logic;
102
                          op2 : in slv_32;
103
                          fwop2: in std_logic;
104
                          fwshiftop: in std_logic;
105
                          destreg : in std_logic_VECTOR(3 downto 0);
106
                          regaddr : out std_logic_VECTOR(3 downto 0);
107
                          result : out slv_32;
108
                          fb_result : out slv_32;
109
 
110
                          extrd: out std_logic;
111
                          extwr: out std_logic;
112
                          extaddr: out slv_16;
113
                          extdin: in slv_16;
114
                          extdout: out slv_16
115
          );
116
end component;
117
 
118
signal pc: slv_32;
119
signal brzero: std_logic_vector(2 downto 0);
120
signal newpc: slv_32;
121
 
122
signal instrf: slv_16;
123
--signal instrd: slv_16;
124
 
125
signal op1: slv_32;
126
signal fwop1: std_logic;
127
signal op2: slv_32;
128
signal fwop2: std_logic;
129
signal fw_pc: std_logic;
130
signal fwshiftop: std_logic;
131
signal destreg: std_logic_VECTOR(3 downto 0);
132
 
133
signal big_op : std_logic_VECTOR(15 downto 0);
134
 
135
signal regaddr : std_logic_VECTOR(3 downto 0);
136
signal result : slv_32;
137
signal fb_result : slv_32;
138
 
139
signal testv: slv_32;
140
 
141
begin
142
 
143
 
144
--      instr <= instr;
145
 
146
testv <= op1;
147
 
148
pipestage1: fetch
149
        port map( clk => clk_in, reset => reset_in,
150
                pc => pc, brzero => brzero, newpc => newpc, testv => testv,
151
                result => fb_result, fw => fwop1, fw2_pc => fw_pc,
152
                instr => instrf,
153
                paddr => paddr, pdin => pdin
154
        );
155
 
156
 
157
pipestage2: decode
158
        port map( clk => clk_in, reset => reset_in,
159
                pc => pc, brzero => brzero, newpc => newpc,
160
                instr => instrf,
161
                op1 => op1, fwop1 => fwop1, op2 => op2, fwop2 => fwop2, fwshiftop => fwshiftop, fw_pc => fw_pc,
162
                destreg => destreg,
163
 
164
                result => result, regaddr => regaddr, big_op => big_op
165
        );
166
 
167
 
168
pipestage3: execute
169
        port map( clk => clk_in, reset => reset_in,
170
           op1 => op1, fwop1 => fwop1, op2 => op2, fwop2 => fwop2, fwshiftop => fwshiftop,
171
           destreg => destreg, result => result, regaddr => regaddr, big_op => big_op,
172
                fb_result => fb_result,
173
                extrd => extrd,
174
                extwr => extwr,
175
                extaddr => extaddr,
176
                extdin => extdin,
177
                extdout => extdout
178
        );
179
 
180
 
181
--process (clk_in, reset_in)
182
--      begin
183
--              if (reset_in='0') then 
184
--                 counter <= (others => '0'); 
185
--                      c <= (others => '0');
186
--     elsif rising_edge(clk_in) then
187
--                      counter <= counter + 1;
188
--                      c <= std_logic_vector(counter);
189
--              end if;
190
--      end process;
191
 
192
 
193
 
194
end Behavioral;

powered by: WebSVN 2.1.0

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