Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / env / niu / vera / niu_pio / mac_init_class.vr
// ========== Copyright Header Begin ==========================================
//
// OpenSPARC T2 Processor File: mac_init_class.vr
// Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
// 4150 Network Circle, Santa Clara, California 95054, U.S.A.
//
// * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 2 of the License.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// For the avoidance of doubt, and except that if any non-GPL license
// choice is available it will apply instead, Sun elects to use only
// the General Public License version 2 (GPLv2) at this time for any
// software where a choice of GPL license versions is made
// available with the language indicating that GPLv2 or any later version
// may be used, or where a choice of which version of the GPL is applied is
// otherwise unspecified.
//
// Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
// CA 95054 USA or visit www.sun.com if you need additional information or
// have any questions.
//
// ========== Copyright Header End ============================================
#include <vera_defines.vrh>
#include "mac_pio_class.vrh"
#include "xmac_util.vrh"
#include "bmac_util.vrh"
#include "pcs_util.vrh"
#include "xpcs_util.vrh"
extern event mac_init_done;
extern mac_util_class mac_util;
extern bmac_util_class bmac_util;
extern pcs_util_class pcs_util;
extern xpcs_util_class xpcs_util;
extern mac_pio_cl mac_pio_class;
class mac_init_class {
task new();
task init_mac();
}
task mac_init_class::new() {
trigger(OFF,mac_init_done);
}
task mac_init_class::init_mac(){
integer mac_id, ii;
integer port_no[];
integer mac_speed0, mac_speed1, mac_speed2, mac_speed3;
string str;
string init_mac_ports,temp_port;
bit[2047:0] bit_str;
bit[3:0] rtl_mac;
bit[31:0] get_mac_port;
bit[31:0] rd_data;
integer mac_config0[4], mac_config1[4];
if(get_plus_arg(CHECK, "MAC_SPEED0=") ) {
mac_speed0 = get_plus_arg(NUM, "MAC_SPEED0") ;
printf("mac_init:MAC0 speed=%0d\n" ,mac_speed0);
}
if(get_plus_arg(CHECK, "MAC_SPEED1=") ) {
mac_speed1 = get_plus_arg(NUM, "MAC_SPEED1") ;
printf("mac_init:MAC1 speed=%0d\n" ,mac_speed1);
}
if(get_plus_arg(CHECK, "MAC_SPEED2=") ) {
mac_speed2 = get_plus_arg(NUM, "MAC_SPEED2") ;
printf("mac_init:MAC2 speed=%0d\n" ,mac_speed2);
}
if(get_plus_arg(CHECK, "MAC_SPEED3=") ) {
mac_speed3 = get_plus_arg(NUM, "MAC_SPEED3") ;
printf("mac_init:MAC3 speed=%0d\n" ,mac_speed3);
}
get_mac_port = get_plus_arg( STR, "GET_MAC_PORTS=");
printf("mac_init:GET_MAC_PORTS=%h\n",get_mac_port);
init_mac_ports.bittostr(get_mac_port);
for(ii=0; ii<init_mac_ports.len(); ii++) {
temp_port =init_mac_ports.substr(ii, ii);
port_no[ii]=temp_port.atoi();
}
mac_config0[0] =1; // config1 config0
mac_config0[1] =1; // 0 1 RTL
mac_config0[2] =1; // 1 1 DUmmy
mac_config0[3] =1;
mac_config1[0] =1;
mac_config1[1] =1;
mac_config1[2] =1;
mac_config1[3] =1;
for(ii=0; ii<init_mac_ports.len(); ii++) {
case(port_no[ii]) {
0: mac_config1[0]=0;
1: mac_config1[1]=0;
2: mac_config1[2]=0;
3: mac_config1[3]=0;
}
}
for(ii=0; ii<4; ii++) rtl_mac[ii] = (!mac_config1[ii] & mac_config0[ii]);
// XMAC INIT
if( get_plus_arg( CHECK, "REG_TEST")) { }
else {
for(mac_id=0; mac_id<2; mac_id++) {
case(mac_id){
0: case(mac_speed0){
10: if(rtl_mac[0]) {
printf("mac_init:MAC0 setting to 10 time=%0d\n", get_time(LO));
mac_util.xmii_init(0, MAC_CONF_10);
}
100: if(rtl_mac[0]) {
printf("mac_init:MAC0 setting to 100 time=%0d\n", get_time(LO));
mac_util.xmii_init(0, MAC_CONF_100);
}
1000: if(rtl_mac[0]) {
printf("mac_init:MAC0 setting to 1000 time=%0d\n", get_time(LO));
mac_util.xmii_init(0, MAC_CONF_1000);
pcs_util.pcs_init(0);
}
10000: if(rtl_mac[0]) {
printf("mac_init:MAC0 setting to 10000 time=%0d\n", get_time(LO));
mac_util.xmii_init(0, MAC_CONF_10000);
}
}
1: case(mac_speed1) {
10: if(rtl_mac[1]){
printf("mac_init:MAC1 setting to 10 time=%0d\n", get_time(LO));
mac_util.xmii_init(1, MAC_CONF_10);
}
100: if(rtl_mac[1]){
printf("mac_init:MAC1 setting to 100 time=%0d\n", get_time(LO));
mac_util.xmii_init(1, MAC_CONF_100);
}
1000: if(rtl_mac[1]) {
printf("mac_init:MAC1 setting to 1000 time=%0d\n", get_time(LO));
mac_util.xmii_init(1,MAC_CONF_1000);
pcs_util.pcs_init(1);
}
10000: if(rtl_mac[1]) {
printf("mac_init:MAC1 setting to 10000 time=%0d\n", get_time(LO));
mac_util.xmii_init(1,MAC_CONF_10000);
}
}
}
}
}
// XPCS INIT
if( get_plus_arg( CHECK, "REG_TEST")) { repeat(5) @(posedge CLOCK); }
else {
if((mac_speed0==10000)| (mac_speed1==10000)) {
printf("mac_init:before XPCS init \n");
for(mac_id =0; mac_id<2; mac_id++) {
case(mac_id){
0: xpcs_util.xpcs_init(0);
1: xpcs_util.xpcs_init(1);
}
}
}
}
// BMAC/PCS INIT
if( get_plus_arg( CHECK, "REG_TEST")) { repeat(5) @(posedge CLOCK); }
else {
for(mac_id =2; mac_id<4; mac_id++) {
case(mac_id) {
2: case(mac_speed2) {
10: if(rtl_mac[2]){
printf("mac_init:MAC2 setting to 10 time=%0d\n", get_time(LO));
bmac_util.bmac_init(mac_id, MAC_INIT_ALL_REG | MI_DEBUG | MAC_CONF_10);
}
100: if(rtl_mac[2]) {
printf("mac_init:MAC2 setting to 100 time=%0d\n", get_time(LO));
bmac_util.bmac_init(mac_id, MAC_INIT_ALL_REG | MI_DEBUG | MAC_CONF_100);
}
1000: if(rtl_mac[2]) {
pcs_util.pcs_init(2);
printf("mac_init:MAC2 setting to 1000 time=%0d\n", get_time(LO) );
bmac_util.bmac_init(mac_id, MAC_INIT_ALL_REG | MI_DEBUG | MAC_CONF_1000);
}
}
3: case(mac_speed3) {
10: if (rtl_mac[3]){
printf("mac_init:MAC3 setting to 10 time=%0d\n", get_time(LO));
bmac_util.bmac_init(mac_id, MAC_INIT_ALL_REG | MI_DEBUG | MAC_CONF_10);
}
100: if (rtl_mac[3]){
printf("mac_init:MAC3 setting to 100 time=%0d\n", get_time(LO));
bmac_util.bmac_init(mac_id, MAC_INIT_ALL_REG | MI_DEBUG | MAC_CONF_100);
}
1000: if (rtl_mac[3]){
printf("mac_init:MAC3 setting to 1000 time=%d\n", get_time(LO));
pcs_util.pcs_init(3);
bmac_util.bmac_init(mac_id, MAC_INIT_ALL_REG | MI_DEBUG | MAC_CONF_1000);
}
}
}
}
} //else
mac_pio_class.xmac_pio_rd(XPCS0_BASE + XPCS_CONTROL1, rd_data,1'b0);
printf("mac_init:READ FROM MAC_INIT TO COMPLETE THE INIT\n");
trigger(ON,mac_init_done);
}