1 |
2 |
thasega |
/***************************************************************************
|
2 |
|
|
This file is part of "HD63701V0 Compatible Processor Core".
|
3 |
|
|
****************************************************************************/
|
4 |
|
|
`include "HD63701_defs.i"
|
5 |
|
|
|
6 |
|
|
module HD63701_MCROM
|
7 |
|
|
(
|
8 |
|
|
input CLK,
|
9 |
|
|
input [5:0] PHASE,
|
10 |
|
|
input [7:0] OPCODE,
|
11 |
|
|
|
12 |
|
|
output `mcwidth mcode
|
13 |
|
|
);
|
14 |
|
|
|
15 |
|
|
`include "HD63701_MCODE.i"
|
16 |
|
|
|
17 |
|
|
reg [5:0] p;
|
18 |
|
|
always @( posedge CLK ) p <= PHASE;
|
19 |
|
|
|
20 |
|
|
wire `mcwidth mc0,mc1,mc2,mc3,mc4,mc5,mc6,mc7,mc8,mc9;
|
21 |
|
|
HD63701_MCROM_S0 r0(CLK,OPCODE,mc0);
|
22 |
|
|
HD63701_MCROM_S1 r1(CLK,OPCODE,mc1);
|
23 |
|
|
HD63701_MCROM_S2 r2(CLK,OPCODE,mc2);
|
24 |
|
|
HD63701_MCROM_S3 r3(CLK,OPCODE,mc3);
|
25 |
|
|
HD63701_MCROM_S4 r4(CLK,OPCODE,mc4);
|
26 |
|
|
HD63701_MCROM_S5 r5(CLK,OPCODE,mc5);
|
27 |
|
|
HD63701_MCROM_S6 r6(CLK,OPCODE,mc6);
|
28 |
|
|
HD63701_MCROM_S7 r7(CLK,OPCODE,mc7);
|
29 |
|
|
HD63701_MCROM_S8 r8(CLK,OPCODE,mc8);
|
30 |
|
|
HD63701_MCROM_S9 r9(CLK,OPCODE,mc9);
|
31 |
|
|
|
32 |
|
|
assign mcode =
|
33 |
|
|
(p==`phRST ) ? {`mcLDV, `vaRST, `mcrn,`mcpN,`amE0,`pcN}: //(Load Reset Vector)
|
34 |
|
|
|
35 |
|
|
(p==`phVECT ) ? {`mcLDN,`mcrM,`mcrn,`mcrU,`mcpN,`amE0,`pcN}: //(Load VectorH)
|
36 |
|
|
(p==`phVEC1 ) ? {`mcLDN,`mcrM,`mcrn,`mcrV,`mcpN,`amE1,`pcN}: //(Load VectorL)
|
37 |
|
|
(p==`phVEC2 ) ? {`mcLDN,`mcrT,`mcrn,`mcrP,`mcp0,`amPC,`pcN}: //(Load to PC)
|
38 |
|
|
|
39 |
|
|
(p==`phEXEC ) ? mc0 :
|
40 |
|
|
(p==`phEXEC1) ? mc1 :
|
41 |
|
|
(p==`phEXEC2) ? mc2 :
|
42 |
|
|
(p==`phEXEC3) ? mc3 :
|
43 |
|
|
(p==`phEXEC4) ? mc4 :
|
44 |
|
|
(p==`phEXEC5) ? mc5 :
|
45 |
|
|
(p==`phEXEC6) ? mc6 :
|
46 |
|
|
(p==`phEXEC7) ? mc7 :
|
47 |
|
|
(p==`phEXEC8) ? mc8 :
|
48 |
|
|
(p==`phEXEC9) ? mc9 :
|
49 |
|
|
|
50 |
|
|
(p==`phINTR ) ? {`mcLDN,`mcrC,`mcrn,`mcrT,`mcpN,`amPC,`pcN}: //(T=C)
|
51 |
|
|
(p==`phINTR1) ? {`mcPSH,`mcrP,`mcrn,`mcrM,`mcpN,`amSP,`pcN}: //[PUSH PL]
|
52 |
|
|
(p==`phINTR2) ? {`mcPSH,`mcrP,`mcrn,`mcrN,`mcpN,`amSP,`pcN}: //[PUSH PH]
|
53 |
|
|
(p==`phINTR3) ? {`mcPSH,`mcrX,`mcrn,`mcrM,`mcpN,`amSP,`pcN}: //[PUSH XL]
|
54 |
|
|
(p==`phINTR4) ? {`mcPSH,`mcrX,`mcrn,`mcrN,`mcpN,`amSP,`pcN}: //[PUSH XH]
|
55 |
|
|
(p==`phINTR5) ? {`mcPSH,`mcrA,`mcrn,`mcrM,`mcpN,`amSP,`pcN}: //[PUSH A]
|
56 |
|
|
(p==`phINTR6) ? {`mcPSH,`mcrB,`mcrn,`mcrM,`mcpN,`amSP,`pcN}: //[PUSH B]
|
57 |
|
|
(p==`phINTR7) ? {`mcPSH,`mcrT,`mcrn,`mcrM,`mcpN,`amSP,`pcN}: //[PUSH T]
|
58 |
|
|
(p==`phINTR8) ? 0:
|
59 |
|
|
(p==`phINTR9) ? 0:
|
60 |
|
|
`MC_HALT;
|
61 |
|
|
|
62 |
|
|
endmodule
|
63 |
|
|
|
64 |
|
|
module HD63701_MCROM_S0( input CLK, input [7:0] OPCODE, output reg `mcwidth mcode );
|
65 |
|
|
`include "HD63701_MCODE.i"
|
66 |
|
|
always @( posedge CLK ) mcode <= MCODE_S0(OPCODE);
|
67 |
|
|
endmodule
|
68 |
|
|
|
69 |
|
|
module HD63701_MCROM_S1( input CLK, input [7:0] OPCODE, output reg `mcwidth mcode );
|
70 |
|
|
`include "HD63701_MCODE.i"
|
71 |
|
|
always @( posedge CLK ) mcode <= MCODE_S1(OPCODE);
|
72 |
|
|
endmodule
|
73 |
|
|
|
74 |
|
|
module HD63701_MCROM_S2( input CLK, input [7:0] OPCODE, output reg `mcwidth mcode );
|
75 |
|
|
`include "HD63701_MCODE.i"
|
76 |
|
|
always @( posedge CLK ) mcode <= MCODE_S2(OPCODE);
|
77 |
|
|
endmodule
|
78 |
|
|
|
79 |
|
|
module HD63701_MCROM_S3( input CLK, input [7:0] OPCODE, output reg `mcwidth mcode );
|
80 |
|
|
`include "HD63701_MCODE.i"
|
81 |
|
|
always @( posedge CLK ) mcode <= MCODE_S3(OPCODE);
|
82 |
|
|
endmodule
|
83 |
|
|
|
84 |
|
|
module HD63701_MCROM_S4( input CLK, input [7:0] OPCODE, output reg `mcwidth mcode );
|
85 |
|
|
`include "HD63701_MCODE.i"
|
86 |
|
|
always @( posedge CLK ) mcode <= MCODE_S4(OPCODE);
|
87 |
|
|
endmodule
|
88 |
|
|
|
89 |
|
|
module HD63701_MCROM_S5( input CLK, input [7:0] OPCODE, output reg `mcwidth mcode );
|
90 |
|
|
`include "HD63701_MCODE.i"
|
91 |
|
|
always @( posedge CLK ) mcode <= MCODE_S5(OPCODE);
|
92 |
|
|
endmodule
|
93 |
|
|
|
94 |
|
|
module HD63701_MCROM_S6( input CLK, input [7:0] OPCODE, output reg `mcwidth mcode );
|
95 |
|
|
`include "HD63701_MCODE.i"
|
96 |
|
|
always @( posedge CLK ) mcode <= MCODE_S6(OPCODE);
|
97 |
|
|
endmodule
|
98 |
|
|
|
99 |
|
|
module HD63701_MCROM_S7( input CLK, input [7:0] OPCODE, output reg `mcwidth mcode );
|
100 |
|
|
`include "HD63701_MCODE.i"
|
101 |
|
|
always @( posedge CLK ) mcode <= MCODE_S7(OPCODE);
|
102 |
|
|
endmodule
|
103 |
|
|
|
104 |
|
|
module HD63701_MCROM_S8( input CLK, input [7:0] OPCODE, output reg `mcwidth mcode );
|
105 |
|
|
`include "HD63701_MCODE.i"
|
106 |
|
|
always @( posedge CLK ) mcode <= MCODE_S8(OPCODE);
|
107 |
|
|
endmodule
|
108 |
|
|
|
109 |
|
|
module HD63701_MCROM_S9( input CLK, input [7:0] OPCODE, output reg `mcwidth mcode );
|
110 |
|
|
`include "HD63701_MCODE.i"
|
111 |
|
|
always @( posedge CLK ) mcode <= MCODE_S9(OPCODE);
|
112 |
|
|
endmodule
|
113 |
|
|
|