Commit | Line | Data |
---|---|---|
86530b38 AT |
1 | // ========== Copyright Header Begin ========================================== |
2 | // | |
3 | // OpenSPARC T2 Processor File: mcuesr_mon.v | |
4 | // Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved | |
5 | // 4150 Network Circle, Santa Clara, California 95054, U.S.A. | |
6 | // | |
7 | // * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
8 | // | |
9 | // This program is free software; you can redistribute it and/or modify | |
10 | // it under the terms of the GNU General Public License as published by | |
11 | // the Free Software Foundation; version 2 of the License. | |
12 | // | |
13 | // This program is distributed in the hope that it will be useful, | |
14 | // but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 | // GNU General Public License for more details. | |
17 | // | |
18 | // You should have received a copy of the GNU General Public License | |
19 | // along with this program; if not, write to the Free Software | |
20 | // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
21 | // | |
22 | // For the avoidance of doubt, and except that if any non-GPL license | |
23 | // choice is available it will apply instead, Sun elects to use only | |
24 | // the General Public License version 2 (GPLv2) at this time for any | |
25 | // software where a choice of GPL license versions is made | |
26 | // available with the language indicating that GPLv2 or any later version | |
27 | // may be used, or where a choice of which version of the GPL is applied is | |
28 | // otherwise unspecified. | |
29 | // | |
30 | // Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, | |
31 | // CA 95054 USA or visit www.sun.com if you need additional information or | |
32 | // have any questions. | |
33 | // | |
34 | // ========== Copyright Header End ============================================ | |
35 | module mcuesr_mon(); | |
36 | ||
37 | reg MCUesr_mon_debugon; | |
38 | ||
39 | initial | |
40 | begin | |
41 | MCUesr_mon_debugon = 1 ;//Enabled by default | |
42 | if($test$plusargs("mcuesr_mon_disable")) | |
43 | MCUesr_mon_debugon = 0; | |
44 | end | |
45 | ||
46 | wire [25:0] esr_mcu0 = tb_top.cpu.mcu0.rdpctl.rdpctl_err_sts_reg[25:0]; | |
47 | wire [25:0] esr_mcu1 = tb_top.cpu.mcu1.rdpctl.rdpctl_err_sts_reg[25:0]; | |
48 | wire [25:0] esr_mcu2 = tb_top.cpu.mcu2.rdpctl.rdpctl_err_sts_reg[25:0]; | |
49 | wire [25:0] esr_mcu3 = tb_top.cpu.mcu3.rdpctl.rdpctl_err_sts_reg[25:0]; | |
50 | ||
51 | wire [30:0] mcu0_fbd_synd = tb_top.cpu.mcu0.fbdic.fbdic_mcu_syndrome[30:0]; | |
52 | wire [30:0] mcu1_fbd_synd = tb_top.cpu.mcu1.fbdic.fbdic_mcu_syndrome[30:0]; | |
53 | wire [30:0] mcu2_fbd_synd = tb_top.cpu.mcu2.fbdic.fbdic_mcu_syndrome[30:0]; | |
54 | wire [30:0] mcu3_fbd_synd = tb_top.cpu.mcu3.fbdic.fbdic_mcu_syndrome[30:0]; | |
55 | ||
56 | /** Error Status Register***/ | |
57 | ||
58 | always @(esr_mcu0 or MCUesr_mon_debugon) | |
59 | begin | |
60 | if(MCUesr_mon_debugon && esr_mcu0) | |
61 | begin | |
62 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU0)\tError Status Register; Detected"); | |
63 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU0)\tMCUESR.MEU = %b,MCUESR.MEC = %b",esr_mcu0[25],esr_mcu0[24]); | |
64 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU0)\tMCUESR.DAC = %b,MCUESR.DAU = %b",esr_mcu0[23],esr_mcu0[22]); | |
65 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU0)\tMCUESR.DSC = %b,MCUESR.DSU = %b",esr_mcu0[21],esr_mcu0[20]); | |
66 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU0)\tMCUESR.DBU = %b,MCUESR.MEB = %b",esr_mcu0[19],esr_mcu0[18]); | |
67 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU0)\tMCUESR.FBU = %b,MCUESR.FBR = %b",esr_mcu0[17],esr_mcu0[16]); | |
68 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU0)\tMCUESR.ECC.SYND[15:0] = %h",esr_mcu0[15:0]); | |
69 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU0)\tMCUESR.FBD.SYND[29:0] = %h", mcu0_fbd_synd[29:0]); | |
70 | end | |
71 | end | |
72 | ||
73 | always @(esr_mcu1 or MCUesr_mon_debugon) | |
74 | begin | |
75 | if(MCUesr_mon_debugon && esr_mcu1) | |
76 | begin | |
77 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU1)\tError Status Register; Detected"); | |
78 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU1)\tMCUESR.MEU = %b,MCUESR.MEC = %b",esr_mcu1[25],esr_mcu1[24]); | |
79 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU1)\tMCUESR.DAC = %b,MCUESR.DAU = %b",esr_mcu1[23],esr_mcu1[22]); | |
80 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU1)\tMCUESR.DSC = %b,MCUESR.DSU = %b",esr_mcu1[21],esr_mcu1[20]); | |
81 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU1)\tMCUESR.DBU = %b,MCUESR.MEB = %b",esr_mcu1[19],esr_mcu1[18]); | |
82 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU1)\tMCUESR.FBU = %b,MCUESR.FBR = %b",esr_mcu1[17],esr_mcu1[16]); | |
83 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU1)\tMCUESR.ECC.SYND[15:0] = %h",esr_mcu1[15:0]); | |
84 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU1)\tMCUESR.FBD.SYND[29:0] = %h", mcu1_fbd_synd[29:0]); | |
85 | end | |
86 | end | |
87 | ||
88 | always @(esr_mcu2 or MCUesr_mon_debugon) | |
89 | begin | |
90 | if(MCUesr_mon_debugon && esr_mcu2) | |
91 | begin | |
92 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU2)\tError Status Register; Detected"); | |
93 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU2)\tMCUESR.MEU = %b,MCUESR.MEC = %b",esr_mcu2[25],esr_mcu2[24]); | |
94 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU2)\tMCUESR.DAC = %b,MCUESR.DAU = %b",esr_mcu2[23],esr_mcu2[22]); | |
95 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU2)\tMCUESR.DSC = %b,MCUESR.DSU = %b",esr_mcu2[21],esr_mcu2[20]); | |
96 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU2)\tMCUESR.DBU = %b,MCUESR.MEB = %b",esr_mcu2[19],esr_mcu2[18]); | |
97 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU2)\tMCUESR.FBU = %b,MCUESR.FBR = %b",esr_mcu2[17],esr_mcu2[16]); | |
98 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU2)\tMCUESR.ECC.SYND[15:0] = %h",esr_mcu2[15:0]); | |
99 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU2)\tMCUESR.FBD.SYND[29:0] = %h", mcu2_fbd_synd[29:0]); | |
100 | end | |
101 | end | |
102 | ||
103 | always @(esr_mcu3 or MCUesr_mon_debugon) | |
104 | begin | |
105 | if(MCUesr_mon_debugon && esr_mcu3) | |
106 | begin | |
107 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU3)\tError Status Register; Detected"); | |
108 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU3)\tMCUESR.MEU = %b,MCUESR.MEC = %b",esr_mcu3[25],esr_mcu3[24]); | |
109 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU3)\tMCUESR.DAC = %b,MCUESR.DAU = %b",esr_mcu3[23],esr_mcu3[22]); | |
110 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU3)\tMCUESR.DSC = %b,MCUESR.DSU = %b",esr_mcu3[21],esr_mcu3[20]); | |
111 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU3)\tMCUESR.DBU = %b,MCUESR.MEB = %b",esr_mcu3[19],esr_mcu3[18]); | |
112 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU3)\tMCUESR.FBU = %b,MCUESR.FBR = %b",esr_mcu3[17],esr_mcu3[16]); | |
113 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU3)\tMCUESR.ECC.SYND[15:0] = %h",esr_mcu3[15:0]); | |
114 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU3)\tMCUESR.FBD.SYND[29:0] = %h", mcu3_fbd_synd[29:0]); | |
115 | end | |
116 | end | |
117 | ||
118 | /** Error Address Register***/ | |
119 | ||
120 | wire [39:0] mcu0_error_addr = { tb_top.cpu.mcu0.rdpctl_err_addr_reg[35:0], { 4{1'b0} } }; | |
121 | wire [39:0] mcu1_error_addr = { tb_top.cpu.mcu1.rdpctl_err_addr_reg[35:0], { 4{1'b0} } }; | |
122 | wire [39:0] mcu2_error_addr = { tb_top.cpu.mcu2.rdpctl_err_addr_reg[35:0], { 4{1'b0} } }; | |
123 | wire [39:0] mcu3_error_addr = { tb_top.cpu.mcu3.rdpctl_err_addr_reg[35:0], { 4{1'b0} } }; | |
124 | ||
125 | always @( mcu0_error_addr ) | |
126 | begin | |
127 | if (MCUesr_mon_debugon==1 && (|mcu0_error_addr) ) | |
128 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU0)\t MCU Error Address Register[39:0] = 0x%h", mcu0_error_addr); | |
129 | end | |
130 | ||
131 | always @( mcu1_error_addr ) | |
132 | begin | |
133 | if (MCUesr_mon_debugon==1 && (|mcu1_error_addr) ) | |
134 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU1)\t MCU Error Address Register[39:0] = 0x%h", mcu1_error_addr); | |
135 | end | |
136 | ||
137 | always @( mcu2_error_addr ) | |
138 | begin | |
139 | if (MCUesr_mon_debugon==1 && (|mcu2_error_addr) ) | |
140 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU2)\t MCU Error Address Register[39:0] = 0x%h", mcu2_error_addr); | |
141 | end | |
142 | ||
143 | always @( mcu3_error_addr ) | |
144 | begin | |
145 | if (MCUesr_mon_debugon==1 && (|mcu3_error_addr) ) | |
146 | `PR_ALWAYS("MCUesr_mon",`ALWAYS," (MCU3)\t MCU Error Address Register[39:0] = 0x%h", mcu3_error_addr); | |
147 | end | |
148 | ||
149 | ||
150 | endmodule |