2 use ieee.std_logic_1164.all;
\r
3 use ieee.std_logic_unsigned.all;
\r
7 pi_rst_n : in std_logic;
\r
8 pi_base_clk : in std_logic;
\r
9 pi_cpu_en : in std_logic_vector (7 downto 0);
\r
10 pi_rdy : in std_logic;
\r
11 pi_irq_n : in std_logic;
\r
12 pi_nmi_n : in std_logic;
\r
13 po_r_nw : out std_logic;
\r
14 po_addr : out std_logic_vector ( 15 downto 0);
\r
15 pio_d_io : inout std_logic_vector ( 7 downto 0)
\r
19 architecture rtl of mos6502 is
\r
22 type cpu_main_state is (
\r
23 --common state. idle and inst fetch.
\r
27 --single byte inst execute.
\r
30 --mem data operation
\r
32 ST_A22_T1, ST_A22_T2,
\r
33 ST_A23_T1, ST_A23_T2, ST_A23_T3,
\r
34 ST_A24_T1, ST_A24_T2, ST_A24_T3, ST_A24_T4, ST_A24_T5,
\r
35 ST_A25_T1, ST_A25_T2, ST_A25_T3, ST_A25_T4,
\r
36 ST_A26_T1, ST_A26_T2, ST_A26_T3,
\r
37 ST_A27_T1, ST_A27_T2, ST_A27_T3, ST_A27_T4, ST_A27_T5,
\r
40 ST_A31_T1, ST_A31_T2,
\r
41 ST_A32_T1, ST_A32_T2, ST_A32_T3,
\r
42 ST_A33_T1, ST_A33_T2, ST_A33_T3, ST_A33_T4, ST_A33_T5,
\r
43 ST_A34_T1, ST_A34_T2, ST_A34_T3, ST_A34_T4,
\r
44 ST_A35_T1, ST_A35_T2, ST_A35_T3,
\r
45 ST_A36_T1, ST_A36_T2, ST_A36_T3, ST_A36_T4, ST_A36_T5,
\r
47 --memory to memory op.
\r
48 ST_A41_T1, ST_A41_T2, ST_A41_T3, ST_A41_T4,
\r
49 ST_A42_T1, ST_A42_T2, ST_A42_T3, ST_A42_T4, ST_A42_T5,
\r
50 ST_A43_T1, ST_A43_T2, ST_A43_T3, ST_A43_T4, ST_A43_T5,
\r
51 ST_A44_T1, ST_A44_T2, ST_A44_T3, ST_A44_T4, ST_A44_T5, ST_A44_T6,
\r
54 ST_A51_T1, ST_A51_T2,
\r
55 ST_A52_T1, ST_A52_T2, ST_A52_T3,
\r
56 ST_A53_T1, ST_A53_T2, ST_A53_T3,ST_A53_T4, ST_A53_T5,
\r
57 ST_A55_T1, ST_A55_T2, ST_A55_T3, ST_A55_T4, ST_A55_T5,
\r
58 ST_A561_T1, ST_A561_T2,
\r
59 ST_A562_T1, ST_A562_T2, ST_A562_T3, ST_A562_T4,
\r
60 ST_A57_T1, ST_A57_T2, ST_A57_T3, ST_A57_T4, ST_A57_T5,
\r
61 ST_A58_T1, ST_A58_T2, ST_A58_T3,
\r
64 ST_RS_T0, ST_RS_T1, ST_RS_T2, ST_RS_T3, ST_RS_T4, ST_RS_T5, ST_RS_T6, ST_RS_T7
\r
68 --1 cpu clock is split into 8 state.
\r
69 --1 cpu clock = 32 x base clock.
\r
70 type cpu_sub_state is (
\r
71 ST_SUB00, ST_SUB01, ST_SUB02, ST_SUB03,
\r
72 ST_SUB10, ST_SUB11, ST_SUB12, ST_SUB13,
\r
73 ST_SUB20, ST_SUB21, ST_SUB22, ST_SUB23,
\r
74 ST_SUB30, ST_SUB31, ST_SUB32, ST_SUB33,
\r
75 ST_SUB40, ST_SUB41, ST_SUB42, ST_SUB43,
\r
76 ST_SUB50, ST_SUB51, ST_SUB52, ST_SUB53,
\r
77 ST_SUB60, ST_SUB61, ST_SUB62, ST_SUB63,
\r
78 ST_SUB70, ST_SUB71, ST_SUB72, ST_SUB73
\r
81 signal reg_main_state : cpu_main_state;
\r
82 signal reg_main_next_state : cpu_main_state;
\r
83 signal reg_sub_state : cpu_sub_state;
\r
84 signal reg_sub_next_state : cpu_sub_state;
\r
86 --6502 register definition...
\r
87 signal reg_inst : std_logic_vector (7 downto 0);
\r
88 signal reg_acc : std_logic_vector (7 downto 0);
\r
89 signal reg_x : std_logic_vector (7 downto 0);
\r
90 signal reg_y : std_logic_vector (7 downto 0);
\r
91 signal reg_idl_l : std_logic_vector (7 downto 0);
\r
92 signal reg_idl_h : std_logic_vector (7 downto 0);
\r
93 signal reg_sp : std_logic_vector (7 downto 0);
\r
94 signal reg_status : std_logic_vector (7 downto 0);
\r
95 signal reg_pc_l : std_logic_vector (7 downto 0);
\r
96 signal reg_pc_h : std_logic_vector (7 downto 0);
\r
99 signal reg_r_nw : std_logic;
\r
100 signal reg_addr : std_logic_vector (15 downto 0);
\r
101 signal reg_d_in : std_logic_vector (7 downto 0);
\r
102 signal reg_d_out : std_logic_vector (7 downto 0);
\r
106 --state transition process...
\r
107 set_stat_p : process (pi_rst_n, pi_base_clk)
\r
109 if (pi_rst_n = '0') then
\r
110 reg_main_state <= ST_IDLE;
\r
111 reg_sub_state <= ST_SUB00;
\r
112 elsif (rising_edge(pi_base_clk)) then
\r
113 reg_main_state <= reg_main_next_state;
\r
114 reg_sub_state <= reg_sub_next_state;
\r
115 end if;--if (pi_rst_n = '0') then
\r
118 --state change to next.
\r
119 tx_next_sub_stat_p : process (reg_sub_state, pi_cpu_en)
\r
121 case reg_sub_state is
\r
123 if (pi_cpu_en(0) = '1') then
\r
124 reg_sub_next_state <= ST_SUB01;
\r
126 reg_sub_next_state <= reg_sub_state;
\r
129 reg_sub_next_state <= ST_SUB02;
\r
131 reg_sub_next_state <= ST_SUB03;
\r
133 reg_sub_next_state <= ST_SUB10;
\r
135 reg_sub_next_state <= ST_SUB11;
\r
137 reg_sub_next_state <= ST_SUB12;
\r
139 reg_sub_next_state <= ST_SUB13;
\r
141 reg_sub_next_state <= ST_SUB20;
\r
143 reg_sub_next_state <= ST_SUB21;
\r
145 reg_sub_next_state <= ST_SUB22;
\r
147 reg_sub_next_state <= ST_SUB23;
\r
149 reg_sub_next_state <= ST_SUB30;
\r
151 reg_sub_next_state <= ST_SUB31;
\r
153 reg_sub_next_state <= ST_SUB32;
\r
155 reg_sub_next_state <= ST_SUB33;
\r
157 reg_sub_next_state <= ST_SUB40;
\r
159 reg_sub_next_state <= ST_SUB41;
\r
161 reg_sub_next_state <= ST_SUB42;
\r
163 reg_sub_next_state <= ST_SUB43;
\r
165 reg_sub_next_state <= ST_SUB50;
\r
167 reg_sub_next_state <= ST_SUB51;
\r
169 reg_sub_next_state <= ST_SUB52;
\r
171 reg_sub_next_state <= ST_SUB53;
\r
173 reg_sub_next_state <= ST_SUB60;
\r
175 reg_sub_next_state <= ST_SUB61;
\r
177 reg_sub_next_state <= ST_SUB62;
\r
179 reg_sub_next_state <= ST_SUB63;
\r
181 reg_sub_next_state <= ST_SUB70;
\r
183 reg_sub_next_state <= ST_SUB71;
\r
185 reg_sub_next_state <= ST_SUB72;
\r
187 reg_sub_next_state <= ST_SUB73;
\r
189 reg_sub_next_state <= ST_SUB00;
\r
193 --state change to next.
\r
194 tx_next_main_stat_p : process (reg_main_state, reg_sub_state, pi_rst_n)
\r
196 ---fake docode function...
\r
197 variable test_index : integer range 0 to 26 := 0;
\r
198 variable next_inst_state : cpu_main_state;
\r
200 procedure get_next_inst_state is
\r
202 if (test_index <= 25) then
\r
203 test_index := test_index + 1;
\r
208 if (test_index = 1) then
\r
209 next_inst_state := ST_A1_T1;
\r
210 elsif (test_index = 2) then
\r
211 next_inst_state := ST_A22_T1;
\r
212 elsif (test_index = 3) then
\r
213 next_inst_state := ST_A23_T1;
\r
214 elsif (test_index = 4) then
\r
215 next_inst_state := ST_A24_T1;
\r
216 elsif (test_index = 5) then
\r
217 next_inst_state := ST_A25_T1;
\r
218 elsif (test_index = 6) then
\r
219 next_inst_state := ST_A26_T1;
\r
220 elsif (test_index = 7) then
\r
221 next_inst_state := ST_A27_T1;
\r
222 elsif (test_index = 8) then
\r
223 next_inst_state := ST_A31_T1;
\r
224 elsif (test_index = 9) then
\r
225 next_inst_state := ST_A32_T1;
\r
226 elsif (test_index = 10) then
\r
227 next_inst_state := ST_A33_T1;
\r
228 elsif (test_index = 11) then
\r
229 next_inst_state := ST_A34_T1;
\r
230 elsif (test_index = 12) then
\r
231 next_inst_state := ST_A35_T1;
\r
232 elsif (test_index = 13) then
\r
233 next_inst_state := ST_A36_T1;
\r
234 elsif (test_index = 14) then
\r
235 next_inst_state := ST_A41_T1;
\r
236 elsif (test_index = 15) then
\r
237 next_inst_state := ST_A42_T1;
\r
238 elsif (test_index = 16) then
\r
239 next_inst_state := ST_A43_T1;
\r
240 elsif (test_index = 17) then
\r
241 next_inst_state := ST_A44_T1;
\r
242 elsif (test_index = 18) then
\r
243 next_inst_state := ST_A51_T1;
\r
244 elsif (test_index = 19) then
\r
245 next_inst_state := ST_A52_T1;
\r
246 elsif (test_index = 20) then
\r
247 next_inst_state := ST_A53_T1;
\r
248 elsif (test_index = 21) then
\r
249 next_inst_state := ST_A55_T1;
\r
250 elsif (test_index = 22) then
\r
251 next_inst_state := ST_A561_T1;
\r
252 elsif (test_index = 23) then
\r
253 next_inst_state := ST_A562_T1;
\r
254 elsif (test_index = 24) then
\r
255 next_inst_state := ST_A57_T1;
\r
256 elsif (test_index = 25) then
\r
257 next_inst_state := ST_A58_T1;
\r
259 next_inst_state := ST_IDLE;
\r
264 case reg_main_state is
\r
267 if (pi_rst_n = '0') then
\r
268 reg_main_next_state <= reg_main_state;
\r
270 reg_main_next_state <= ST_RS_T0;
\r
274 if (reg_sub_state = ST_SUB73) then
\r
275 reg_main_next_state <= ST_RS_T1;
\r
277 reg_main_next_state <= reg_main_state;
\r
280 if (reg_sub_state = ST_SUB73) then
\r
281 reg_main_next_state <= ST_RS_T2;
\r
283 reg_main_next_state <= reg_main_state;
\r
286 if (reg_sub_state = ST_SUB73) then
\r
287 reg_main_next_state <= ST_RS_T3;
\r
289 reg_main_next_state <= reg_main_state;
\r
292 if (reg_sub_state = ST_SUB73) then
\r
293 reg_main_next_state <= ST_RS_T4;
\r
295 reg_main_next_state <= reg_main_state;
\r
298 if (reg_sub_state = ST_SUB73) then
\r
299 reg_main_next_state <= ST_RS_T5;
\r
301 reg_main_next_state <= reg_main_state;
\r
304 if (reg_sub_state = ST_SUB73) then
\r
305 reg_main_next_state <= ST_RS_T6;
\r
307 reg_main_next_state <= reg_main_state;
\r
310 if (reg_sub_state = ST_SUB73) then
\r
311 reg_main_next_state <= ST_RS_T7;
\r
313 reg_main_next_state <= reg_main_state;
\r
316 if (reg_sub_state = ST_SUB73) then
\r
317 reg_main_next_state <= ST_CM_T0;
\r
319 reg_main_next_state <= reg_main_state;
\r
322 --instruction fetch
\r
324 if (reg_sub_state = ST_SUB73) then
\r
325 get_next_inst_state;
\r
326 reg_main_next_state <= next_inst_state;
\r
328 reg_main_next_state <= reg_main_state;
\r
331 --A1 inst.(single byte)
\r
333 if (reg_sub_state = ST_SUB73) then
\r
334 reg_main_next_state <= ST_CM_T0;
\r
336 reg_main_next_state <= reg_main_state;
\r
341 if (reg_sub_state = ST_SUB73) then
\r
342 reg_main_next_state <= ST_CM_T0;
\r
344 reg_main_next_state <= reg_main_state;
\r
347 if (reg_sub_state = ST_SUB73) then
\r
348 reg_main_next_state <= ST_A22_T2;
\r
350 reg_main_next_state <= reg_main_state;
\r
353 if (reg_sub_state = ST_SUB73) then
\r
354 reg_main_next_state <= ST_CM_T0;
\r
356 reg_main_next_state <= reg_main_state;
\r
359 if (reg_sub_state = ST_SUB73) then
\r
360 reg_main_next_state <= ST_A23_T2;
\r
362 reg_main_next_state <= reg_main_state;
\r
365 if (reg_sub_state = ST_SUB73) then
\r
366 reg_main_next_state <= ST_A23_T3;
\r
368 reg_main_next_state <= reg_main_state;
\r
371 if (reg_sub_state = ST_SUB73) then
\r
372 reg_main_next_state <= ST_CM_T0;
\r
374 reg_main_next_state <= reg_main_state;
\r
377 if (reg_sub_state = ST_SUB73) then
\r
378 reg_main_next_state <= ST_A24_T2;
\r
380 reg_main_next_state <= reg_main_state;
\r
383 if (reg_sub_state = ST_SUB73) then
\r
384 reg_main_next_state <= ST_A24_T3;
\r
386 reg_main_next_state <= reg_main_state;
\r
389 if (reg_sub_state = ST_SUB73) then
\r
390 reg_main_next_state <= ST_A24_T4;
\r
392 reg_main_next_state <= reg_main_state;
\r
395 if (reg_sub_state = ST_SUB73) then
\r
396 reg_main_next_state <= ST_A24_T5;
\r
398 reg_main_next_state <= reg_main_state;
\r
401 if (reg_sub_state = ST_SUB73) then
\r
402 reg_main_next_state <= ST_CM_T0;
\r
404 reg_main_next_state <= reg_main_state;
\r
407 if (reg_sub_state = ST_SUB73) then
\r
408 reg_main_next_state <= ST_A25_T2;
\r
410 reg_main_next_state <= reg_main_state;
\r
413 if (reg_sub_state = ST_SUB73) then
\r
414 reg_main_next_state <= ST_A25_T3;
\r
416 reg_main_next_state <= reg_main_state;
\r
419 if (reg_sub_state = ST_SUB73) then
\r
420 reg_main_next_state <= ST_A25_T4;
\r
422 reg_main_next_state <= reg_main_state;
\r
425 if (reg_sub_state = ST_SUB73) then
\r
426 reg_main_next_state <= ST_CM_T0;
\r
428 reg_main_next_state <= reg_main_state;
\r
431 if (reg_sub_state = ST_SUB73) then
\r
432 reg_main_next_state <= ST_A26_T2;
\r
434 reg_main_next_state <= reg_main_state;
\r
437 if (reg_sub_state = ST_SUB73) then
\r
438 reg_main_next_state <= ST_A26_T3;
\r
440 reg_main_next_state <= reg_main_state;
\r
443 if (reg_sub_state = ST_SUB73) then
\r
444 reg_main_next_state <= ST_CM_T0;
\r
446 reg_main_next_state <= reg_main_state;
\r
449 if (reg_sub_state = ST_SUB73) then
\r
450 reg_main_next_state <= ST_A27_T2;
\r
452 reg_main_next_state <= reg_main_state;
\r
455 if (reg_sub_state = ST_SUB73) then
\r
456 reg_main_next_state <= ST_A27_T3;
\r
458 reg_main_next_state <= reg_main_state;
\r
461 if (reg_sub_state = ST_SUB73) then
\r
462 reg_main_next_state <= ST_A27_T4;
\r
464 reg_main_next_state <= reg_main_state;
\r
467 if (reg_sub_state = ST_SUB73) then
\r
468 reg_main_next_state <= ST_A27_T5;
\r
470 reg_main_next_state <= reg_main_state;
\r
473 if (reg_sub_state = ST_SUB73) then
\r
474 reg_main_next_state <= ST_CM_T0;
\r
476 reg_main_next_state <= reg_main_state;
\r
481 if (reg_sub_state = ST_SUB73) then
\r
482 reg_main_next_state <= ST_A31_T2;
\r
484 reg_main_next_state <= reg_main_state;
\r
487 if (reg_sub_state = ST_SUB73) then
\r
488 reg_main_next_state <= ST_CM_T0;
\r
490 reg_main_next_state <= reg_main_state;
\r
493 if (reg_sub_state = ST_SUB73) then
\r
494 reg_main_next_state <= ST_A32_T2;
\r
496 reg_main_next_state <= reg_main_state;
\r
499 if (reg_sub_state = ST_SUB73) then
\r
500 reg_main_next_state <= ST_A32_T3;
\r
502 reg_main_next_state <= reg_main_state;
\r
505 if (reg_sub_state = ST_SUB73) then
\r
506 reg_main_next_state <= ST_CM_T0;
\r
508 reg_main_next_state <= reg_main_state;
\r
511 if (reg_sub_state = ST_SUB73) then
\r
512 reg_main_next_state <= ST_A33_T2;
\r
514 reg_main_next_state <= reg_main_state;
\r
517 if (reg_sub_state = ST_SUB73) then
\r
518 reg_main_next_state <= ST_A33_T3;
\r
520 reg_main_next_state <= reg_main_state;
\r
523 if (reg_sub_state = ST_SUB73) then
\r
524 reg_main_next_state <= ST_A33_T4;
\r
526 reg_main_next_state <= reg_main_state;
\r
529 if (reg_sub_state = ST_SUB73) then
\r
530 reg_main_next_state <= ST_A33_T5;
\r
532 reg_main_next_state <= reg_main_state;
\r
535 if (reg_sub_state = ST_SUB73) then
\r
536 reg_main_next_state <= ST_CM_T0;
\r
538 reg_main_next_state <= reg_main_state;
\r
541 if (reg_sub_state = ST_SUB73) then
\r
542 reg_main_next_state <= ST_A34_T2;
\r
544 reg_main_next_state <= reg_main_state;
\r
547 if (reg_sub_state = ST_SUB73) then
\r
548 reg_main_next_state <= ST_A34_T3;
\r
550 reg_main_next_state <= reg_main_state;
\r
553 if (reg_sub_state = ST_SUB73) then
\r
554 reg_main_next_state <= ST_A34_T4;
\r
556 reg_main_next_state <= reg_main_state;
\r
559 if (reg_sub_state = ST_SUB73) then
\r
560 reg_main_next_state <= ST_CM_T0;
\r
562 reg_main_next_state <= reg_main_state;
\r
565 if (reg_sub_state = ST_SUB73) then
\r
566 reg_main_next_state <= ST_A35_T2;
\r
568 reg_main_next_state <= reg_main_state;
\r
571 if (reg_sub_state = ST_SUB73) then
\r
572 reg_main_next_state <= ST_A35_T3;
\r
574 reg_main_next_state <= reg_main_state;
\r
577 if (reg_sub_state = ST_SUB73) then
\r
578 reg_main_next_state <= ST_CM_T0;
\r
580 reg_main_next_state <= reg_main_state;
\r
583 if (reg_sub_state = ST_SUB73) then
\r
584 reg_main_next_state <= ST_A36_T2;
\r
586 reg_main_next_state <= reg_main_state;
\r
589 if (reg_sub_state = ST_SUB73) then
\r
590 reg_main_next_state <= ST_A36_T3;
\r
592 reg_main_next_state <= reg_main_state;
\r
595 if (reg_sub_state = ST_SUB73) then
\r
596 reg_main_next_state <= ST_A36_T4;
\r
598 reg_main_next_state <= reg_main_state;
\r
601 if (reg_sub_state = ST_SUB73) then
\r
602 reg_main_next_state <= ST_A36_T5;
\r
604 reg_main_next_state <= reg_main_state;
\r
607 if (reg_sub_state = ST_SUB73) then
\r
608 reg_main_next_state <= ST_CM_T0;
\r
610 reg_main_next_state <= reg_main_state;
\r
616 if (reg_sub_state = ST_SUB73) then
\r
617 reg_main_next_state <= ST_A41_T2;
\r
619 reg_main_next_state <= reg_main_state;
\r
622 if (reg_sub_state = ST_SUB73) then
\r
623 reg_main_next_state <= ST_A41_T3;
\r
625 reg_main_next_state <= reg_main_state;
\r
628 if (reg_sub_state = ST_SUB73) then
\r
629 reg_main_next_state <= ST_A41_T4;
\r
631 reg_main_next_state <= reg_main_state;
\r
634 if (reg_sub_state = ST_SUB73) then
\r
635 reg_main_next_state <= ST_CM_T0;
\r
637 reg_main_next_state <= reg_main_state;
\r
640 if (reg_sub_state = ST_SUB73) then
\r
641 reg_main_next_state <= ST_A42_T2;
\r
643 reg_main_next_state <= reg_main_state;
\r
646 if (reg_sub_state = ST_SUB73) then
\r
647 reg_main_next_state <= ST_A42_T3;
\r
649 reg_main_next_state <= reg_main_state;
\r
652 if (reg_sub_state = ST_SUB73) then
\r
653 reg_main_next_state <= ST_A42_T4;
\r
655 reg_main_next_state <= reg_main_state;
\r
658 if (reg_sub_state = ST_SUB73) then
\r
659 reg_main_next_state <= ST_A42_T5;
\r
661 reg_main_next_state <= reg_main_state;
\r
664 if (reg_sub_state = ST_SUB73) then
\r
665 reg_main_next_state <= ST_CM_T0;
\r
667 reg_main_next_state <= reg_main_state;
\r
670 if (reg_sub_state = ST_SUB73) then
\r
671 reg_main_next_state <= ST_A43_T2;
\r
673 reg_main_next_state <= reg_main_state;
\r
676 if (reg_sub_state = ST_SUB73) then
\r
677 reg_main_next_state <= ST_CM_T0;
\r
679 reg_main_next_state <= reg_main_state;
\r
682 if (reg_sub_state = ST_SUB73) then
\r
683 reg_main_next_state <= ST_A43_T4;
\r
685 reg_main_next_state <= reg_main_state;
\r
688 if (reg_sub_state = ST_SUB73) then
\r
689 reg_main_next_state <= ST_A43_T5;
\r
691 reg_main_next_state <= reg_main_state;
\r
694 if (reg_sub_state = ST_SUB73) then
\r
695 reg_main_next_state <= ST_CM_T0;
\r
697 reg_main_next_state <= reg_main_state;
\r
700 if (reg_sub_state = ST_SUB73) then
\r
701 reg_main_next_state <= ST_A44_T2;
\r
703 reg_main_next_state <= reg_main_state;
\r
706 if (reg_sub_state = ST_SUB73) then
\r
707 reg_main_next_state <= ST_A44_T3;
\r
709 reg_main_next_state <= reg_main_state;
\r
712 if (reg_sub_state = ST_SUB73) then
\r
713 reg_main_next_state <= ST_A44_T4;
\r
715 reg_main_next_state <= reg_main_state;
\r
718 if (reg_sub_state = ST_SUB73) then
\r
719 reg_main_next_state <= ST_A44_T5;
\r
721 reg_main_next_state <= reg_main_state;
\r
724 if (reg_sub_state = ST_SUB73) then
\r
725 reg_main_next_state <= ST_A44_T6;
\r
727 reg_main_next_state <= reg_main_state;
\r
730 if (reg_sub_state = ST_SUB73) then
\r
731 reg_main_next_state <= ST_CM_T0;
\r
733 reg_main_next_state <= reg_main_state;
\r
739 if (reg_sub_state = ST_SUB73) then
\r
740 reg_main_next_state <= ST_A51_T2;
\r
742 reg_main_next_state <= reg_main_state;
\r
745 if (reg_sub_state = ST_SUB73) then
\r
746 reg_main_next_state <= ST_CM_T0;
\r
748 reg_main_next_state <= reg_main_state;
\r
751 if (reg_sub_state = ST_SUB73) then
\r
752 reg_main_next_state <= ST_A52_T2;
\r
754 reg_main_next_state <= reg_main_state;
\r
757 if (reg_sub_state = ST_SUB73) then
\r
758 reg_main_next_state <= ST_A52_T3;
\r
760 reg_main_next_state <= reg_main_state;
\r
763 if (reg_sub_state = ST_SUB73) then
\r
764 reg_main_next_state <= ST_CM_T0;
\r
766 reg_main_next_state <= reg_main_state;
\r
769 if (reg_sub_state = ST_SUB73) then
\r
770 reg_main_next_state <= ST_A53_T2;
\r
772 reg_main_next_state <= reg_main_state;
\r
775 if (reg_sub_state = ST_SUB73) then
\r
776 reg_main_next_state <= ST_A53_T3;
\r
778 reg_main_next_state <= reg_main_state;
\r
781 if (reg_sub_state = ST_SUB73) then
\r
782 reg_main_next_state <= ST_A53_T4;
\r
784 reg_main_next_state <= reg_main_state;
\r
787 if (reg_sub_state = ST_SUB73) then
\r
788 reg_main_next_state <= ST_A53_T5;
\r
790 reg_main_next_state <= reg_main_state;
\r
793 if (reg_sub_state = ST_SUB73) then
\r
794 reg_main_next_state <= ST_CM_T0;
\r
796 reg_main_next_state <= reg_main_state;
\r
799 if (reg_sub_state = ST_SUB73) then
\r
800 reg_main_next_state <= ST_A55_T2;
\r
802 reg_main_next_state <= reg_main_state;
\r
805 if (reg_sub_state = ST_SUB73) then
\r
806 reg_main_next_state <= ST_A55_T3;
\r
808 reg_main_next_state <= reg_main_state;
\r
811 if (reg_sub_state = ST_SUB73) then
\r
812 reg_main_next_state <= ST_A55_T4;
\r
814 reg_main_next_state <= reg_main_state;
\r
817 if (reg_sub_state = ST_SUB73) then
\r
818 reg_main_next_state <= ST_A55_T5;
\r
820 reg_main_next_state <= reg_main_state;
\r
823 if (reg_sub_state = ST_SUB73) then
\r
824 reg_main_next_state <= ST_CM_T0;
\r
826 reg_main_next_state <= reg_main_state;
\r
829 if (reg_sub_state = ST_SUB73) then
\r
830 reg_main_next_state <= ST_A561_T2;
\r
832 reg_main_next_state <= reg_main_state;
\r
835 if (reg_sub_state = ST_SUB73) then
\r
836 reg_main_next_state <= ST_CM_T0;
\r
838 reg_main_next_state <= reg_main_state;
\r
841 if (reg_sub_state = ST_SUB73) then
\r
842 reg_main_next_state <= ST_A562_T2;
\r
844 reg_main_next_state <= reg_main_state;
\r
847 if (reg_sub_state = ST_SUB73) then
\r
848 reg_main_next_state <= ST_A562_T3;
\r
850 reg_main_next_state <= reg_main_state;
\r
853 if (reg_sub_state = ST_SUB73) then
\r
854 reg_main_next_state <= ST_A562_T4;
\r
856 reg_main_next_state <= reg_main_state;
\r
859 if (reg_sub_state = ST_SUB73) then
\r
860 reg_main_next_state <= ST_CM_T0;
\r
862 reg_main_next_state <= reg_main_state;
\r
865 if (reg_sub_state = ST_SUB73) then
\r
866 reg_main_next_state <= ST_A57_T2;
\r
868 reg_main_next_state <= reg_main_state;
\r
871 if (reg_sub_state = ST_SUB73) then
\r
872 reg_main_next_state <= ST_A57_T3;
\r
874 reg_main_next_state <= reg_main_state;
\r
877 if (reg_sub_state = ST_SUB73) then
\r
878 reg_main_next_state <= ST_A57_T4;
\r
880 reg_main_next_state <= reg_main_state;
\r
883 if (reg_sub_state = ST_SUB73) then
\r
884 reg_main_next_state <= ST_A57_T5;
\r
886 reg_main_next_state <= reg_main_state;
\r
889 if (reg_sub_state = ST_SUB73) then
\r
890 reg_main_next_state <= ST_CM_T0;
\r
892 reg_main_next_state <= reg_main_state;
\r
895 if (reg_sub_state = ST_SUB73) then
\r
896 reg_main_next_state <= ST_A58_T2;
\r
898 reg_main_next_state <= reg_main_state;
\r
901 if (reg_sub_state = ST_SUB73) then
\r
902 reg_main_next_state <= ST_A58_T3;
\r
904 reg_main_next_state <= reg_main_state;
\r
907 if (reg_sub_state = ST_SUB73) then
\r
908 reg_main_next_state <= ST_CM_T0;
\r
910 reg_main_next_state <= reg_main_state;
\r
913 -- ---not ready yet...
\r
915 -- reg_main_next_state <= reg_main_state;
\r
919 --addressing general process...
\r
920 --pc, io bus, r/w, instruction regs...
\r
921 ad_general_p : process (pi_rst_n, pi_base_clk)
\r
923 if (pi_rst_n = '0') then
\r
924 reg_pc_l <= (others => '0');
\r
925 reg_pc_h <= (others => '0');
\r
926 reg_addr <= (others => 'Z');
\r
927 reg_d_out <= (others => 'Z');
\r
929 elsif (rising_edge(pi_base_clk)) then
\r
930 if (reg_main_state = ST_RS_T0) then
\r
931 reg_pc_l <= (others => '0');
\r
932 reg_pc_h <= (others => '0');
\r
933 reg_inst <= (others => '0');
\r
934 reg_addr <= (others => '0');
\r
935 reg_d_out <= (others => 'Z');
\r
937 elsif (reg_main_state = ST_RS_T6) then
\r
938 --reset vector low...
\r
939 reg_addr <= "1111111111111100";
\r
940 reg_d_out <= (others => 'Z');
\r
942 reg_pc_l <= reg_d_in;
\r
943 elsif (reg_main_state = ST_RS_T7) then
\r
944 --reset vector high...
\r
945 reg_addr <= "1111111111111101";
\r
946 reg_d_out <= (others => 'Z');
\r
948 reg_pc_h <= reg_d_in;
\r
949 elsif (reg_main_state = ST_CM_T0) then
\r
950 if (reg_sub_state = ST_SUB00) then
\r
951 reg_addr <= reg_pc_h & reg_pc_l;
\r
952 reg_d_out <= (others => 'Z');
\r
954 elsif (reg_sub_state = ST_SUB60) then
\r
955 reg_inst <= reg_d_in;
\r
956 elsif (reg_sub_state = ST_SUB70) then
\r
957 reg_pc_l <= reg_pc_l + 1;
\r
960 end if;--if (pi_rst_n = '0') then
\r
963 po_r_nw <= reg_r_nw;
\r
964 po_addr <= reg_addr;
\r
965 pio_d_io <= reg_d_out;
\r
966 reg_d_in <= pio_d_io;
\r