-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcpu.vhd
More file actions
138 lines (103 loc) · 3.27 KB
/
cpu.vhd
File metadata and controls
138 lines (103 loc) · 3.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
library IEEE;
use IEEE.std_logic_1164.all;
entity cpu is
port( clock : in std_logic;
reset : in std_logic;
address : out std_logic_vector(7 downto 0):= "00000000";
write : out std_logic:= '0';
to_memory : out std_logic_vector(7 downto 0):= "00000000";
from_memory : in std_logic_vector(7 downto 0):= "00000000"
);
end entity;
architecture cpu_arch of cpu is
component control_unit
port(
clock : in std_logic;
reset : in std_logic;
write : out std_logic;
IR_Load : out std_logic;
IR : in std_logic_vector(7 downto 0);
MAR_Load: out std_logic;
PC_Load : out std_logic;
PC_Inc : out std_logic;
A_Load : out std_logic;
B_Load : out std_logic;
ALU_Sel : out std_logic_vector(2 downto 0);
CCR_Result: in std_logic_vector(3 downto 0);
CCR_Load : out std_logic;
Bus2_Sel : out std_logic_vector(1 downto 0);
Bus1_Sel : out std_logic_vector(1 downto 0)
);
end component;
component data_path
port(
clock : in std_logic;
reset : in std_logic;
IR_Load : in std_logic;
IR : out std_logic_vector(7 downto 0);
MAR_Load: in std_logic;
PC_Load : in std_logic;
PC_Inc : in std_logic;
A_Load : in std_logic;
B_Load : in std_logic;
ALU_Sel : in std_logic_vector(2 downto 0);
CCR_Result: out std_logic_vector(3 downto 0);
CCR_Load : in std_logic;
Bus2_Sel : in std_logic_vector(1 downto 0);
Bus1_Sel : in std_logic_vector(1 downto 0);
from_memory : in std_logic_vector(7 downto 0);
to_memory : out std_logic_vector(7 downto 0);
address : out std_logic_vector(7 downto 0)
);
end component;
signal IR_Load : std_logic := '0';
signal IR : std_logic_vector(7 downto 0):= "00000000";
signal MAR_Load : std_logic:= '0';
signal PC_Load : std_logic:= '0';
signal PC_Inc : std_logic:= '0';
signal A_Load : std_logic:= '0';
signal B_Load : std_logic:= '0';
signal ALU_Sel : std_logic_vector(2 downto 0):= "000";
signal CCR_Result : std_logic_vector(3 downto 0):= "0000";
signal CCR_Load : std_logic:= '0';
signal Bus2_Sel : std_logic_vector(1 downto 0):= "00";
signal Bus1_Sel : std_logic_vector(1 downto 0):= "00";
begin
--Signals are named the same clock into control unit is clock from the cpu in, IR control unit connects to the IR signal which connects to IR data path
CU_1 : control_unit port map(
clock => clock,
reset => reset,
write => write,
IR_Load => IR_Load,
IR => IR,
MAR_Load => MAR_Load,
PC_Load => PC_Load,
PC_Inc => PC_Inc,
A_Load => A_Load,
B_Load => B_Load,
ALU_Sel => ALU_Sel,
CCR_Result => CCR_Result,
CCR_Load => CCR_Load,
Bus2_Sel => Bus2_Sel,
Bus1_Sel => Bus1_Sel
);
DP_1 : data_path port map(
clock => clock,
reset => reset,
IR_Load => IR_Load,
IR => IR,
MAR_Load => MAR_Load,
PC_Load => PC_Load,
PC_Inc => PC_Inc,
A_Load => A_Load,
B_Load => B_Load,
ALU_Sel => ALU_Sel,
CCR_Result => CCR_Result,
CCR_Load => CCR_Load,
Bus2_Sel => Bus2_Sel,
Bus1_Sel => Bus1_Sel,
from_memory => from_memory,
to_memory => to_memory,
address => address
);
end architecture;