OpenCores
URL https://opencores.org/ocsvn/hpc-16/hpc-16/trunk

Subversion Repositories hpc-16

[/] [hpc-16/] [tags/] [release1/] [impl0/] [rtl/] [vhdl/] [con_pkg.vhd] - Blame information for rev 15

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 umairsiddi
--------------------------------------------------------------
2
-- con_pkg.vhd
3
--------------------------------------------------------------
4
-- project: HPC-16 Microprocessor
5
--
6
-- usage: constants, component and type declarations for control unit(fsm) 
7
--
8
-- dependency: sync.vhd
9
--
10
---------------------------------------------------------------
11
library ieee;
12
use ieee.std_logic_1164.all;
13
 
14
package con_pkg is
15
 
16
-- intruction catagories
17
   constant mov_rn_rm    : std_logic_vector(7 downto 0) := b"00000_001";
18
   constant mov_sp_rm    : std_logic_vector(7 downto 0) := b"00000_010";
19
   constant mov_rn_sp    : std_logic_vector(7 downto 0) := b"00000_100";
20
 
21
   constant ld_rn_rb     : std_logic_vector(7 downto 0) := b"00001_000";
22
   constant ld_rn_rb_disp     : std_logic_vector(7 downto 0) := b"00001_001";
23
   constant ld_rn_sp     : std_logic_vector(7 downto 0) := b"00001_010";
24
   constant ld_rn_sp_disp     : std_logic_vector(7 downto 0) := b"00001_100";
25
 
26
   constant st_rn_rb     : std_logic_vector(7 downto 0) := b"00010_000";
27
   constant st_rn_rb_disp     : std_logic_vector(7 downto 0) := b"00010_001";
28
   constant st_rn_sp     : std_logic_vector(7 downto 0) := b"00010_010";
29
   constant st_rn_sp_disp     : std_logic_vector(7 downto 0) := b"00010_100";
30
 
31
   constant lbzx_rn_rb     : std_logic_vector(7 downto 0) := b"00011_000";
32
   constant lbzx_rn_rb_disp     : std_logic_vector(7 downto 0) := b"00011_100";
33
   constant lbsx_rn_rb     : std_logic_vector(7 downto 0) := b"00011_001";
34
   constant lbsx_rn_rb_disp     : std_logic_vector(7 downto 0) := b"00011_101";
35
 
36
   constant sb_rn_rb     : std_logic_vector(7 downto 0) := b"00100_001";
37
   constant sb_rn_rb_disp     : std_logic_vector(7 downto 0) := b"00100_010";
38
 
39
   constant sing_dec   : std_logic_vector(7 downto 0) := b"00101_000";
40
   constant sing_inc   : std_logic_vector(7 downto 0) := b"00101_001";
41
 
42
   constant alur    : std_logic_vector(4 downto 0) := "00110";
43
 
44
   constant shiftr  : std_logic_vector(4 downto 0) := "00111";
45
 
46
   constant cmp_cmp    : std_logic_vector(7 downto 0) := b"01000_000";
47
   constant cmp_tst    : std_logic_vector(7 downto 0) := b"01000_101";
48
 
49
   constant li_rn     : std_logic_vector(7 downto 0) := b"01001_001";
50
   constant li_sp     : std_logic_vector(7 downto 0) := b"01001_010";
51
 
52
   constant alui   : std_logic_vector(4 downto 0) := "01010";
53
 
54
   constant shifti : std_logic_vector(4 downto 0) := "01011";
55
 
56
   constant cmpi_cmp   : std_logic_vector(7 downto 0) := b"01100_000";
57
   constant cmpi_tst   : std_logic_vector(7 downto 0) := b"01100_101";
58
 
59
   constant alusp_sub  : std_logic_vector(7 downto 0) := b"01101_000";
60
   constant alusp_add  : std_logic_vector(7 downto 0) := b"01101_001";
61
 
62
   constant stk_pushr    : std_logic_vector(7 downto 0) := b"01110_000";
63
   constant stk_pushf    : std_logic_vector(7 downto 0) := b"01110_001";
64
   constant stk_popr    : std_logic_vector(7 downto 0) := b"01110_100";
65
   constant stk_popf    : std_logic_vector(7 downto 0) := b"01110_101";
66
 
67
   constant acall   : std_logic_vector(7 downto 0) := b"01111_001";
68
 
69
   constant lcall   : std_logic_vector(7 downto 0) := b"01111_010";
70
 
71
   constant scall   : std_logic_vector(4 downto 0) := "10000";
72
 
73
   constant ret    : std_logic_vector(4 downto 0) := "10001";
74
 
75
   constant int    : std_logic_vector(4 downto 0) := "10010";
76
 
77
   constant into   : std_logic_vector(4 downto 0) := "10011";
78
 
79
   constant iret   : std_logic_vector(4 downto 0) := "10100";
80
 
81
   constant ajmp    : std_logic_vector(7 downto 0) := b"10101_001";
82
 
83
   constant ljmp    : std_logic_vector(7 downto 0) := b"10101_010";
84
 
85
   constant sjmp    : std_logic_vector(4 downto 0) := "10110";
86
 
87
   constant jcc    : std_logic_vector(4 downto 0) := "10111";
88
 
89
   constant fop_clc    : std_logic_vector(7 downto 0) := b"11000_000";
90
   constant fop_stc    : std_logic_vector(7 downto 0) := b"11000_001";
91
   constant fop_cmc    : std_logic_vector(7 downto 0) := b"11000_010";
92
   constant fop_cli    : std_logic_vector(7 downto 0) := b"11000_100";
93
   constant fop_sti    : std_logic_vector(7 downto 0) := b"11000_101";
94
 
95
   constant nop    : std_logic_vector(4 downto 0) := "11110";
96
 
97
   constant hlt    : std_logic_vector(4 downto 0) := "11111";
98
 
99
   -- subop/subtype field
100
 
101
   constant a_sub         : std_logic_vector(2 downto 0) := "000";
102
   constant a_add         : std_logic_vector(2 downto 0) := "001";
103
   constant a_sbb         : std_logic_vector(2 downto 0) := "010";
104
   constant a_adc         : std_logic_vector(2 downto 0) := "011";
105
   constant a_not         : std_logic_vector(2 downto 0) := "100";
106
   constant a_and         : std_logic_vector(2 downto 0) := "101";
107
   constant a_or          : std_logic_vector(2 downto 0) := "110";
108
   constant a_xor         : std_logic_vector(2 downto 0) := "111";
109
 
110
   constant s_sll       : std_logic_vector(2 downto 0) := "000";
111
   constant s_slr       : std_logic_vector(2 downto 0) := "001";
112
   constant s_sal       : std_logic_vector(2 downto 0) := "010";
113
   constant s_sar       : std_logic_vector(2 downto 0) := "011";
114
   constant s_rol       : std_logic_vector(2 downto 0) := "100";
115
   constant s_ror       : std_logic_vector(2 downto 0) := "101";
116
   constant s_rcl       : std_logic_vector(2 downto 0) := "110";
117
   constant s_rcr       : std_logic_vector(2 downto 0) := "111";
118
 
119
   -- alu operations
120
   constant asopsel_sub : std_logic_vector(3 downto 0) := "0000";
121
   constant asopsel_add : std_logic_vector(3 downto 0) := "0001";
122
   constant asopsel_sbb : std_logic_vector(3 downto 0) := "0010";
123
   constant asopsel_adc : std_logic_vector(3 downto 0) := "0011";
124
   constant asopsel_not : std_logic_vector(3 downto 0) := "0100";
125
   constant asopsel_and : std_logic_vector(3 downto 0) := "0101";
126
   constant asopsel_or  : std_logic_vector(3 downto 0) := "0110";
127
   constant asopsel_xor : std_logic_vector(3 downto 0) := "0111";
128
 
129
   -- shifter operations
130
   constant asopsel_sll : std_logic_vector(3 downto 0) := "1000";
131
   constant asopsel_slr : std_logic_vector(3 downto 0) := "1001";
132
   constant asopsel_sal : std_logic_vector(3 downto 0) := "1010";
133
   constant asopsel_sar : std_logic_vector(3 downto 0) := "1011";
134
   constant asopsel_rol : std_logic_vector(3 downto 0) := "1100";
135
   constant asopsel_ror : std_logic_vector(3 downto 0) := "1101";
136
   constant asopsel_rcl : std_logic_vector(3 downto 0) := "1110";
137
   constant asopsel_rcr : std_logic_vector(3 downto 0) := "1111";
138
 
139
   constant intno_mux_sel_invalid : std_logic_vector(2 downto 0) := "000";
140
   constant intno_mux_sel_align : std_logic_vector(2 downto 0) := "001";
141
   constant intno_mux_sel_stk : std_logic_vector(2 downto 0) := "010";
142
   constant intno_mux_sel_df  : std_logic_vector(2 downto 0) := "011";
143
   constant intno_mux_sel_ir : std_logic_vector(2 downto 0) := "100";
144
   constant intno_mux_sel_intr : std_logic_vector(2 downto 0) := "101";
145
 
146
   constant adin_mux_sel_tr2 : std_logic_vector(2 downto 0) := "000";
147
   constant adin_mux_sel_tr5 : std_logic_vector(2 downto 0) := "001";
148
   constant adin_mux_sel_sp  : std_logic_vector(2 downto 0) := "010";
149
   constant adin_mux_sel_mdri : std_logic_vector(2 downto 0) := "011";
150
   constant adin_mux_sel_mdri_high : std_logic_vector(2 downto 0) := "100";
151
   constant adin_mux_sel_mdri_low : std_logic_vector(2 downto 0) := "101";
152
 
153
   constant pcin_mux_sel_aluout : std_logic_vector(1 downto 0) := "00";
154
   constant pcin_mux_sel_intno : std_logic_vector(1 downto 0) := "01";
155
   constant pcin_mux_sel_mdri : std_logic_vector(1 downto 0) := "10";
156
 
157
   constant spin_mux_sel_aluout : std_logic := '0';
158
   constant spin_mux_sel_mdri : std_logic := '1';
159
 
160
   constant alua_mux_sel_pc : std_logic_vector(1 downto 0) := "00";
161
   constant alua_mux_sel_sp : std_logic_vector(1 downto 0) := "01";
162
   constant alua_mux_sel_tr1 : std_logic_vector(1 downto 0) := "10";
163
   constant alua_mux_sel_tr2 : std_logic_vector(1 downto 0) := "11";
164
 
165
   constant alub_mux_sel_tr2 : std_logic_vector(2 downto 0) := "000";
166
   constant alub_mux_sel_2 : std_logic_vector(2 downto 0) := "001";
167
   constant alub_mux_sel_1 : std_logic_vector(2 downto 0) := "010";
168
   constant alub_mux_sel_0 : std_logic_vector(2 downto 0) := "011";
169
   constant alub_mux_sel_tr3 : std_logic_vector(2 downto 0) := "100";
170
   constant alub_mux_sel_tr4 : std_logic_vector(2 downto 0) := "101";
171
   constant alub_mux_sel_mdri : std_logic_vector(2 downto 0) := "110";
172
 
173
   constant sbin_mux_sel_tr2 : std_logic := '0';
174
   constant sbin_mux_sel_ir : std_logic := '1';
175
 
176
   constant coszin_mux_sel_asresult : std_logic := '0';
177
   constant coszin_mux_sel_mdri     : std_logic := '1';
178
 
179
   constant marin_mux_sel_pc : std_logic_vector(1 downto 0) := "00";
180
   constant marin_mux_sel_aluout : std_logic_vector(1 downto 0) := "01";
181
   constant marin_mux_sel_sp : std_logic_vector(1 downto 0) := "10";
182
 
183
   constant mdroin_mux_sel_pc : std_logic_vector(2 downto 0) := "000";
184
   constant mdroin_mux_sel_tr1 : std_logic_vector(2 downto 0) := "001";
185
   constant mdroin_mux_sel_flags : std_logic_vector(2 downto 0) := "010";
186
   constant mdroin_mux_sel_dfh : std_logic_vector(2 downto 0) := "011";
187
   constant mdroin_mux_sel_intno : std_logic_vector(2 downto 0) := "100";
188
   constant mdroin_mux_sel_tr1_loweven : std_logic_vector(2 downto 0) := "101";
189
   constant mdroin_mux_sel_tr1_lowodd : std_logic_vector(2 downto 0) := "110";
190
 
191
   type ic is (
192
   ic_mov_rn_rm, ic_mov_sp_rm, ic_mov_rn_sp,
193
 
194
   ic_ld_rn_rb, ic_ld_rn_rb_disp, ic_ld_rn_sp, ic_ld_rn_sp_disp,
195
 
196
   ic_st_rn_rb, ic_st_rn_rb_disp, ic_st_rn_sp, ic_st_rn_sp_disp,
197
 
198
   ic_lbzx_rn_rb, ic_lbzx_rn_rb_disp, ic_lbsx_rn_rb, ic_lbsx_rn_rb_disp,
199
 
200
   ic_sb_rn_rb, ic_sb_rn_rb_disp,
201
 
202
   ic_sing_dec, ic_sing_inc,
203
 
204
   ic_alur,
205
 
206
   ic_shiftr,
207
 
208
   ic_cmp_cmp, ic_cmp_tst,
209
 
210
   ic_li_rn, ic_li_sp,
211
 
212
   ic_alui,
213
 
214
   ic_shifti,
215
 
216
   ic_cmpi_cmp, ic_cmpi_tst,
217
 
218
   ic_alusp_sub, ic_alusp_add,
219
 
220
   ic_stk_pushr, ic_stk_pushf, ic_stk_popr, ic_stk_popf,
221
 
222
   ic_acall, ic_lcall, ic_scall,
223
 
224
   ic_ret,
225
 
226
   ic_int,
227
 
228
   ic_into,
229
 
230
   ic_iret,
231
 
232
   ic_ajmp, ic_ljmp, ic_sjmp,
233
 
234
   ic_jcc,
235
 
236
   ic_fop_clc, ic_fop_stc, ic_fop_cmc, ic_fop_cli, ic_fop_sti,
237
 
238
   ic_nop,
239
 
240
   ic_hlt,
241
 
242
   ic_invalid);
243
 
244
   type state is (
245
      reset,
246
      fetch0, fetch1, fetch2,
247
      exec0, exec1, exec2, exec3, exec4, exec5,
248
      int_chk,
249
      int0, int1, int2, int3, int4,
250
      align0, align1, align2, align3, align4,
251
      stkerr0, stkerr1, stkerr2, stkerr3, stkerr4, stkerr5, stkerr6, stkerr7,
252
      invalid0, invalid1, invalid2, invalid3, invalid4,
253
      df0, df1, df2, df3, df4, df5, df6, df7, df8, df9,
254
      halted
255
   );
256
 
257
   component sync is
258
      port
259
      (
260
      d : in std_logic;
261
      clk : in std_logic;
262
      q : out std_logic
263
      );
264
   end component;
265
 
266
end package;

powered by: WebSVN 2.1.0

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