Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / env / common / verilog / tlb_sync / tlb_misc.v
// ========== Copyright Header Begin ==========================================
//
// OpenSPARC T2 Processor File: tlb_misc.v
// 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 ============================================
`ifdef CORE_0
module tlb_misc_c0();
`ifndef GATESIM
// common defines
`include "defines.vh"
`include "tlb_sync.vh"
//---------------------
// Signals for ASI_I/DTLB_TAG_READ followme
wire [7:0] select_pc_b;
wire [7:0] dtag_read_active;
wire [2:0] dtlb_tid;
wire [63:0] dtlb_va;
wire [63:0] dtlb_value;
wire [2:0] fetch_tid_f;
reg [2:0] fetch_tid_c;
reg [2:0] fetch_tid;
wire [7:0] itag_read_active_bf;
reg [7:0] itag_read_active_f;
reg [7:0] itag_read_active_c;
reg [7:0] itag_read_active;
wire [63:0] itlb_va_bf;
reg [63:0] itlb_va_f;
reg [63:0] itlb_va_c;
reg [63:0] itlb_va;
wire [63:0] itlb_value;
//---------------------
// Signals for ASI_I/DTLB_DATA_ACCESS followme
wire [7:0] d_data_access_active;
wire [7:0] i_data_access_active_bf;
reg [7:0] i_data_access_active_f;
reg [7:0] i_data_access_active_c;
reg [7:0] i_data_access_active;
//---------------------
// Signals for ASI_ITLB_PROBE followme
wire probe_active_bf;
reg probe_active_f;
reg probe_active_c;
reg probe_active;
wire [7:0] probe_tid_bf;
reg [7:0] probe_tid_f;
reg [7:0] probe_tid_c;
reg [7:0] probe_tid;
wire [63:0] probe_value;
//---------------------
// Misc
reg [2:0] mycid;
reg [2:0] mytid;
reg [5:0] mytnum;
reg [7:0] myasi;
reg [(`TS_WIDTH-1):0] tstamp;
integer i;
integer junk;
initial begin // {
mycid = 0;
end //}
//----------------------------------------------------------
// DUT probes
//---------------------
// Probes for ASI_DTLB_TAG_READ & ASI_DTLB_DATA_ACCESS followme
assign select_pc_b = `PROBES0.select_pc_b;
assign dtlb_tid = `SPC0.lsu.dcc.tid_b;
assign dtlb_va = `SPC0.lsu_mmu_va_b;
assign dtlb_value = `SPC0.lsu.tgd.ldxa_asi_data_b;
assign dtag_read_active = {
({4{`SPC0.lsu.dcc.dcc_tlb_tag_read_b &
dtlb_tid[2] &
!`SPC0.lsu.lsu_illegal_inst_b &
!`SPC0.tlu.fls1.dae_invalid_asi_w_in &
(!`SPC0.tlu_flush_lsu_b |`SPC0.tlu.fls1.va_watchpoint_w_in)}} &
(select_pc_b[7:4])),
({4{`SPC0.lsu.dcc.dcc_tlb_tag_read_b &
!dtlb_tid[2] &
!`SPC0.lsu.lsu_illegal_inst_b &
!`SPC0.tlu.fls0.dae_invalid_asi_w_in &
(!`SPC0.tlu_flush_lsu_b |`SPC0.tlu.fls0.va_watchpoint_w_in)}} &
(select_pc_b[3:0]))
};
assign d_data_access_active = {
({4{`SPC0.lsu.dcc.dcc_tlb_data_read_b &
dtlb_tid[2] &
!`SPC0.lsu.lsu_illegal_inst_b &
(!`SPC0.tlu_flush_lsu_b |`SPC0.tlu.fls1.va_watchpoint_w_in)}} &
(select_pc_b[7:4])),
({4{`SPC0.lsu.dcc.dcc_tlb_data_read_b &
!dtlb_tid[2] &
!`SPC0.lsu.lsu_illegal_inst_b &
(!`SPC0.tlu_flush_lsu_b |`SPC0.tlu.fls0.va_watchpoint_w_in)}} &
(select_pc_b[3:0]))
};
//---------------------
// Probes for ASI_ITLB_TAG_READ & ASI_ITLB_DATA_ACCESS followme
assign fetch_tid_f = `SPC0.ifu_ftu.ftu_asi_ctl.indet_tid_f;
assign itag_read_active_bf = `SPC0.ifu_ftu.ftu_ftp_ctl.ftp_itt_rd_req_bf;
assign i_data_access_active_bf = `SPC0.ifu_ftu.ftu_ftp_ctl.ftp_itd_rd_req_bf;
assign itlb_va_bf = {24'b0,`SPC0.ifu_ftu.asi_addr_bf[39:3],3'b0};
assign itlb_value = `SPC0.ifu_ftu.it_rd_data; // [63:0]
//---------------------
// Probes for ASI_ITLB_PROBE followme
assign probe_active_bf = `SPC0.ifu_ftu.ftp_ith_det_req_bf;
assign probe_tid_bf = `SPC0.ifu_ftu.ftu_ftp_ctl.ith_det_thr_id;
assign probe_value = `SPC0.ifu_ftu.it_rd_data;
//----------------------------------------------------------
//----------------------------------------------------------
always @ (posedge `SPC0.l2clk) begin // {
tstamp = `TOP.core_cycle_cnt - 1;
//---------------------------------
// Pipeline signals
// Have to pipline these past where the TLB was accessed
// to get the parity bits for follow me
// Then we need to subtract 2 from the timestamp so get back
// get the correct time the tlb was accessed.
itag_read_active_f <= itag_read_active_bf;
itag_read_active_c <= itag_read_active_f;
itag_read_active <= itag_read_active_c;
itlb_va_f <= itlb_va_bf;
itlb_va_c <= itlb_va_f;
itlb_va <= itlb_va_c;
fetch_tid_c <= fetch_tid_f;
fetch_tid <= fetch_tid_c;
i_data_access_active_f <= i_data_access_active_bf;
i_data_access_active_c <= i_data_access_active_f;
i_data_access_active <= i_data_access_active_c;
probe_active_f <= probe_active_bf;
probe_active_c <= probe_active_f;
probe_active <= probe_active_c;
probe_tid_f <= probe_tid_bf;
probe_tid_c <= probe_tid_f;
probe_tid <= probe_tid_c;
//---------------------------------
//---------------------------------
//---------------------------------
// DTLB_TAG_READ_REG followme & sync
if (dtag_read_active) begin // {
myasi = 8'h5e;
// Determine which thread is active
mytid = dtlb_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp - 1);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, dtlb_va, dtlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp - 1);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum, tstamp - 1, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
end //}
end // }
//---------------------------------
// DTLB_DATA_ACCESS_REG followme & sync
if (d_data_access_active) begin // {
myasi = 8'h5d;
mytid = dtlb_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp-1);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum,myasi, dtlb_va, dtlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp-1);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-1, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
end //}
end // }
//---------------------------------
// ITLB_TAG_READ_REG followme & sync
if (itag_read_active) begin // {
myasi = 8'h56;
mytid = fetch_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, itlb_va, itlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
end //}
end // }
//---------------------------------
// ITLB_DATA_ACCESS_REG followme & sync
if (i_data_access_active) begin // {
myasi = 8'h55;
mytid = fetch_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, itlb_va, itlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
end //}
end // }
//---------------------------------
// ITLB_PROBE - followme & sync
if (probe_active) begin // {
myasi = 8'h53;
for (i=0; i<=7; i=i+1) begin // {
if (probe_tid[i]==1'b1) begin // {
mytid = i;
mytnum = (mycid * 8) + mytid;
end // }
end // }
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, itlb_va, probe_value, tstamp-2);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, itlb_va, probe_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp-2);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-2, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
end //}
end // }
end // always }
//----------------------------------------------------------
`endif
endmodule
`endif
`ifdef CORE_1
module tlb_misc_c1();
`ifndef GATESIM
// common defines
`include "defines.vh"
`include "tlb_sync.vh"
//---------------------
// Signals for ASI_I/DTLB_TAG_READ followme
wire [7:0] select_pc_b;
wire [7:0] dtag_read_active;
wire [2:0] dtlb_tid;
wire [63:0] dtlb_va;
wire [63:0] dtlb_value;
wire [2:0] fetch_tid_f;
reg [2:0] fetch_tid_c;
reg [2:0] fetch_tid;
wire [7:0] itag_read_active_bf;
reg [7:0] itag_read_active_f;
reg [7:0] itag_read_active_c;
reg [7:0] itag_read_active;
wire [63:0] itlb_va_bf;
reg [63:0] itlb_va_f;
reg [63:0] itlb_va_c;
reg [63:0] itlb_va;
wire [63:0] itlb_value;
//---------------------
// Signals for ASI_I/DTLB_DATA_ACCESS followme
wire [7:0] d_data_access_active;
wire [7:0] i_data_access_active_bf;
reg [7:0] i_data_access_active_f;
reg [7:0] i_data_access_active_c;
reg [7:0] i_data_access_active;
//---------------------
// Signals for ASI_ITLB_PROBE followme
wire probe_active_bf;
reg probe_active_f;
reg probe_active_c;
reg probe_active;
wire [7:0] probe_tid_bf;
reg [7:0] probe_tid_f;
reg [7:0] probe_tid_c;
reg [7:0] probe_tid;
wire [63:0] probe_value;
//---------------------
// Misc
reg [2:0] mycid;
reg [2:0] mytid;
reg [5:0] mytnum;
reg [7:0] myasi;
reg [(`TS_WIDTH-1):0] tstamp;
integer i;
integer junk;
initial begin // {
mycid = 1;
end //}
//----------------------------------------------------------
// DUT probes
//---------------------
// Probes for ASI_DTLB_TAG_READ & ASI_DTLB_DATA_ACCESS followme
assign select_pc_b = `PROBES1.select_pc_b;
assign dtlb_tid = `SPC1.lsu.dcc.tid_b;
assign dtlb_va = `SPC1.lsu_mmu_va_b;
assign dtlb_value = `SPC1.lsu.tgd.ldxa_asi_data_b;
assign dtag_read_active = {
({4{`SPC1.lsu.dcc.dcc_tlb_tag_read_b &
dtlb_tid[2] &
!`SPC1.lsu.lsu_illegal_inst_b &
!`SPC1.tlu.fls1.dae_invalid_asi_w_in &
(!`SPC1.tlu_flush_lsu_b |`SPC1.tlu.fls1.va_watchpoint_w_in)}} &
(select_pc_b[7:4])),
({4{`SPC1.lsu.dcc.dcc_tlb_tag_read_b &
!dtlb_tid[2] &
!`SPC1.lsu.lsu_illegal_inst_b &
!`SPC1.tlu.fls0.dae_invalid_asi_w_in &
(!`SPC1.tlu_flush_lsu_b |`SPC1.tlu.fls0.va_watchpoint_w_in)}} &
(select_pc_b[3:0]))
};
assign d_data_access_active = {
({4{`SPC1.lsu.dcc.dcc_tlb_data_read_b &
dtlb_tid[2] &
!`SPC1.lsu.lsu_illegal_inst_b &
(!`SPC1.tlu_flush_lsu_b |`SPC1.tlu.fls1.va_watchpoint_w_in)}} &
(select_pc_b[7:4])),
({4{`SPC1.lsu.dcc.dcc_tlb_data_read_b &
!dtlb_tid[2] &
!`SPC1.lsu.lsu_illegal_inst_b &
(!`SPC1.tlu_flush_lsu_b |`SPC1.tlu.fls0.va_watchpoint_w_in)}} &
(select_pc_b[3:0]))
};
//---------------------
// Probes for ASI_ITLB_TAG_READ & ASI_ITLB_DATA_ACCESS followme
assign fetch_tid_f = `SPC1.ifu_ftu.ftu_asi_ctl.indet_tid_f;
assign itag_read_active_bf = `SPC1.ifu_ftu.ftu_ftp_ctl.ftp_itt_rd_req_bf;
assign i_data_access_active_bf = `SPC1.ifu_ftu.ftu_ftp_ctl.ftp_itd_rd_req_bf;
assign itlb_va_bf = {24'b0,`SPC1.ifu_ftu.asi_addr_bf[39:3],3'b0};
assign itlb_value = `SPC1.ifu_ftu.it_rd_data; // [63:0]
//---------------------
// Probes for ASI_ITLB_PROBE followme
assign probe_active_bf = `SPC1.ifu_ftu.ftp_ith_det_req_bf;
assign probe_tid_bf = `SPC1.ifu_ftu.ftu_ftp_ctl.ith_det_thr_id;
assign probe_value = `SPC1.ifu_ftu.it_rd_data;
//----------------------------------------------------------
//----------------------------------------------------------
always @ (posedge `SPC1.l2clk) begin // {
tstamp = `TOP.core_cycle_cnt - 1;
//---------------------------------
// Pipeline signals
// Have to pipline these past where the TLB was accessed
// to get the parity bits for follow me
// Then we need to subtract 2 from the timestamp so get back
// get the correct time the tlb was accessed.
itag_read_active_f <= itag_read_active_bf;
itag_read_active_c <= itag_read_active_f;
itag_read_active <= itag_read_active_c;
itlb_va_f <= itlb_va_bf;
itlb_va_c <= itlb_va_f;
itlb_va <= itlb_va_c;
fetch_tid_c <= fetch_tid_f;
fetch_tid <= fetch_tid_c;
i_data_access_active_f <= i_data_access_active_bf;
i_data_access_active_c <= i_data_access_active_f;
i_data_access_active <= i_data_access_active_c;
probe_active_f <= probe_active_bf;
probe_active_c <= probe_active_f;
probe_active <= probe_active_c;
probe_tid_f <= probe_tid_bf;
probe_tid_c <= probe_tid_f;
probe_tid <= probe_tid_c;
//---------------------------------
//---------------------------------
//---------------------------------
// DTLB_TAG_READ_REG followme & sync
if (dtag_read_active) begin // {
myasi = 8'h5e;
// Determine which thread is active
mytid = dtlb_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp - 1);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, dtlb_va, dtlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp - 1);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum, tstamp - 1, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
end //}
end // }
//---------------------------------
// DTLB_DATA_ACCESS_REG followme & sync
if (d_data_access_active) begin // {
myasi = 8'h5d;
mytid = dtlb_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp-1);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum,myasi, dtlb_va, dtlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp-1);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-1, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
end //}
end // }
//---------------------------------
// ITLB_TAG_READ_REG followme & sync
if (itag_read_active) begin // {
myasi = 8'h56;
mytid = fetch_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, itlb_va, itlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
end //}
end // }
//---------------------------------
// ITLB_DATA_ACCESS_REG followme & sync
if (i_data_access_active) begin // {
myasi = 8'h55;
mytid = fetch_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, itlb_va, itlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
end //}
end // }
//---------------------------------
// ITLB_PROBE - followme & sync
if (probe_active) begin // {
myasi = 8'h53;
for (i=0; i<=7; i=i+1) begin // {
if (probe_tid[i]==1'b1) begin // {
mytid = i;
mytnum = (mycid * 8) + mytid;
end // }
end // }
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, itlb_va, probe_value, tstamp-2);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, itlb_va, probe_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp-2);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-2, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
end //}
end // }
end // always }
//----------------------------------------------------------
`endif
endmodule
`endif
`ifdef CORE_2
module tlb_misc_c2();
`ifndef GATESIM
// common defines
`include "defines.vh"
`include "tlb_sync.vh"
//---------------------
// Signals for ASI_I/DTLB_TAG_READ followme
wire [7:0] select_pc_b;
wire [7:0] dtag_read_active;
wire [2:0] dtlb_tid;
wire [63:0] dtlb_va;
wire [63:0] dtlb_value;
wire [2:0] fetch_tid_f;
reg [2:0] fetch_tid_c;
reg [2:0] fetch_tid;
wire [7:0] itag_read_active_bf;
reg [7:0] itag_read_active_f;
reg [7:0] itag_read_active_c;
reg [7:0] itag_read_active;
wire [63:0] itlb_va_bf;
reg [63:0] itlb_va_f;
reg [63:0] itlb_va_c;
reg [63:0] itlb_va;
wire [63:0] itlb_value;
//---------------------
// Signals for ASI_I/DTLB_DATA_ACCESS followme
wire [7:0] d_data_access_active;
wire [7:0] i_data_access_active_bf;
reg [7:0] i_data_access_active_f;
reg [7:0] i_data_access_active_c;
reg [7:0] i_data_access_active;
//---------------------
// Signals for ASI_ITLB_PROBE followme
wire probe_active_bf;
reg probe_active_f;
reg probe_active_c;
reg probe_active;
wire [7:0] probe_tid_bf;
reg [7:0] probe_tid_f;
reg [7:0] probe_tid_c;
reg [7:0] probe_tid;
wire [63:0] probe_value;
//---------------------
// Misc
reg [2:0] mycid;
reg [2:0] mytid;
reg [5:0] mytnum;
reg [7:0] myasi;
reg [(`TS_WIDTH-1):0] tstamp;
integer i;
integer junk;
initial begin // {
mycid = 2;
end //}
//----------------------------------------------------------
// DUT probes
//---------------------
// Probes for ASI_DTLB_TAG_READ & ASI_DTLB_DATA_ACCESS followme
assign select_pc_b = `PROBES2.select_pc_b;
assign dtlb_tid = `SPC2.lsu.dcc.tid_b;
assign dtlb_va = `SPC2.lsu_mmu_va_b;
assign dtlb_value = `SPC2.lsu.tgd.ldxa_asi_data_b;
assign dtag_read_active = {
({4{`SPC2.lsu.dcc.dcc_tlb_tag_read_b &
dtlb_tid[2] &
!`SPC2.lsu.lsu_illegal_inst_b &
!`SPC2.tlu.fls1.dae_invalid_asi_w_in &
(!`SPC2.tlu_flush_lsu_b |`SPC2.tlu.fls1.va_watchpoint_w_in)}} &
(select_pc_b[7:4])),
({4{`SPC2.lsu.dcc.dcc_tlb_tag_read_b &
!dtlb_tid[2] &
!`SPC2.lsu.lsu_illegal_inst_b &
!`SPC2.tlu.fls0.dae_invalid_asi_w_in &
(!`SPC2.tlu_flush_lsu_b |`SPC2.tlu.fls0.va_watchpoint_w_in)}} &
(select_pc_b[3:0]))
};
assign d_data_access_active = {
({4{`SPC2.lsu.dcc.dcc_tlb_data_read_b &
dtlb_tid[2] &
!`SPC2.lsu.lsu_illegal_inst_b &
(!`SPC2.tlu_flush_lsu_b |`SPC2.tlu.fls1.va_watchpoint_w_in)}} &
(select_pc_b[7:4])),
({4{`SPC2.lsu.dcc.dcc_tlb_data_read_b &
!dtlb_tid[2] &
!`SPC2.lsu.lsu_illegal_inst_b &
(!`SPC2.tlu_flush_lsu_b |`SPC2.tlu.fls0.va_watchpoint_w_in)}} &
(select_pc_b[3:0]))
};
//---------------------
// Probes for ASI_ITLB_TAG_READ & ASI_ITLB_DATA_ACCESS followme
assign fetch_tid_f = `SPC2.ifu_ftu.ftu_asi_ctl.indet_tid_f;
assign itag_read_active_bf = `SPC2.ifu_ftu.ftu_ftp_ctl.ftp_itt_rd_req_bf;
assign i_data_access_active_bf = `SPC2.ifu_ftu.ftu_ftp_ctl.ftp_itd_rd_req_bf;
assign itlb_va_bf = {24'b0,`SPC2.ifu_ftu.asi_addr_bf[39:3],3'b0};
assign itlb_value = `SPC2.ifu_ftu.it_rd_data; // [63:0]
//---------------------
// Probes for ASI_ITLB_PROBE followme
assign probe_active_bf = `SPC2.ifu_ftu.ftp_ith_det_req_bf;
assign probe_tid_bf = `SPC2.ifu_ftu.ftu_ftp_ctl.ith_det_thr_id;
assign probe_value = `SPC2.ifu_ftu.it_rd_data;
//----------------------------------------------------------
//----------------------------------------------------------
always @ (posedge `SPC2.l2clk) begin // {
tstamp = `TOP.core_cycle_cnt - 1;
//---------------------------------
// Pipeline signals
// Have to pipline these past where the TLB was accessed
// to get the parity bits for follow me
// Then we need to subtract 2 from the timestamp so get back
// get the correct time the tlb was accessed.
itag_read_active_f <= itag_read_active_bf;
itag_read_active_c <= itag_read_active_f;
itag_read_active <= itag_read_active_c;
itlb_va_f <= itlb_va_bf;
itlb_va_c <= itlb_va_f;
itlb_va <= itlb_va_c;
fetch_tid_c <= fetch_tid_f;
fetch_tid <= fetch_tid_c;
i_data_access_active_f <= i_data_access_active_bf;
i_data_access_active_c <= i_data_access_active_f;
i_data_access_active <= i_data_access_active_c;
probe_active_f <= probe_active_bf;
probe_active_c <= probe_active_f;
probe_active <= probe_active_c;
probe_tid_f <= probe_tid_bf;
probe_tid_c <= probe_tid_f;
probe_tid <= probe_tid_c;
//---------------------------------
//---------------------------------
//---------------------------------
// DTLB_TAG_READ_REG followme & sync
if (dtag_read_active) begin // {
myasi = 8'h5e;
// Determine which thread is active
mytid = dtlb_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp - 1);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, dtlb_va, dtlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp - 1);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum, tstamp - 1, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
end //}
end // }
//---------------------------------
// DTLB_DATA_ACCESS_REG followme & sync
if (d_data_access_active) begin // {
myasi = 8'h5d;
mytid = dtlb_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp-1);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum,myasi, dtlb_va, dtlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp-1);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-1, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
end //}
end // }
//---------------------------------
// ITLB_TAG_READ_REG followme & sync
if (itag_read_active) begin // {
myasi = 8'h56;
mytid = fetch_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, itlb_va, itlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
end //}
end // }
//---------------------------------
// ITLB_DATA_ACCESS_REG followme & sync
if (i_data_access_active) begin // {
myasi = 8'h55;
mytid = fetch_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, itlb_va, itlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
end //}
end // }
//---------------------------------
// ITLB_PROBE - followme & sync
if (probe_active) begin // {
myasi = 8'h53;
for (i=0; i<=7; i=i+1) begin // {
if (probe_tid[i]==1'b1) begin // {
mytid = i;
mytnum = (mycid * 8) + mytid;
end // }
end // }
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, itlb_va, probe_value, tstamp-2);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, itlb_va, probe_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp-2);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-2, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
end //}
end // }
end // always }
//----------------------------------------------------------
`endif
endmodule
`endif
`ifdef CORE_3
module tlb_misc_c3();
`ifndef GATESIM
// common defines
`include "defines.vh"
`include "tlb_sync.vh"
//---------------------
// Signals for ASI_I/DTLB_TAG_READ followme
wire [7:0] select_pc_b;
wire [7:0] dtag_read_active;
wire [2:0] dtlb_tid;
wire [63:0] dtlb_va;
wire [63:0] dtlb_value;
wire [2:0] fetch_tid_f;
reg [2:0] fetch_tid_c;
reg [2:0] fetch_tid;
wire [7:0] itag_read_active_bf;
reg [7:0] itag_read_active_f;
reg [7:0] itag_read_active_c;
reg [7:0] itag_read_active;
wire [63:0] itlb_va_bf;
reg [63:0] itlb_va_f;
reg [63:0] itlb_va_c;
reg [63:0] itlb_va;
wire [63:0] itlb_value;
//---------------------
// Signals for ASI_I/DTLB_DATA_ACCESS followme
wire [7:0] d_data_access_active;
wire [7:0] i_data_access_active_bf;
reg [7:0] i_data_access_active_f;
reg [7:0] i_data_access_active_c;
reg [7:0] i_data_access_active;
//---------------------
// Signals for ASI_ITLB_PROBE followme
wire probe_active_bf;
reg probe_active_f;
reg probe_active_c;
reg probe_active;
wire [7:0] probe_tid_bf;
reg [7:0] probe_tid_f;
reg [7:0] probe_tid_c;
reg [7:0] probe_tid;
wire [63:0] probe_value;
//---------------------
// Misc
reg [2:0] mycid;
reg [2:0] mytid;
reg [5:0] mytnum;
reg [7:0] myasi;
reg [(`TS_WIDTH-1):0] tstamp;
integer i;
integer junk;
initial begin // {
mycid = 3;
end //}
//----------------------------------------------------------
// DUT probes
//---------------------
// Probes for ASI_DTLB_TAG_READ & ASI_DTLB_DATA_ACCESS followme
assign select_pc_b = `PROBES3.select_pc_b;
assign dtlb_tid = `SPC3.lsu.dcc.tid_b;
assign dtlb_va = `SPC3.lsu_mmu_va_b;
assign dtlb_value = `SPC3.lsu.tgd.ldxa_asi_data_b;
assign dtag_read_active = {
({4{`SPC3.lsu.dcc.dcc_tlb_tag_read_b &
dtlb_tid[2] &
!`SPC3.lsu.lsu_illegal_inst_b &
!`SPC3.tlu.fls1.dae_invalid_asi_w_in &
(!`SPC3.tlu_flush_lsu_b |`SPC3.tlu.fls1.va_watchpoint_w_in)}} &
(select_pc_b[7:4])),
({4{`SPC3.lsu.dcc.dcc_tlb_tag_read_b &
!dtlb_tid[2] &
!`SPC3.lsu.lsu_illegal_inst_b &
!`SPC3.tlu.fls0.dae_invalid_asi_w_in &
(!`SPC3.tlu_flush_lsu_b |`SPC3.tlu.fls0.va_watchpoint_w_in)}} &
(select_pc_b[3:0]))
};
assign d_data_access_active = {
({4{`SPC3.lsu.dcc.dcc_tlb_data_read_b &
dtlb_tid[2] &
!`SPC3.lsu.lsu_illegal_inst_b &
(!`SPC3.tlu_flush_lsu_b |`SPC3.tlu.fls1.va_watchpoint_w_in)}} &
(select_pc_b[7:4])),
({4{`SPC3.lsu.dcc.dcc_tlb_data_read_b &
!dtlb_tid[2] &
!`SPC3.lsu.lsu_illegal_inst_b &
(!`SPC3.tlu_flush_lsu_b |`SPC3.tlu.fls0.va_watchpoint_w_in)}} &
(select_pc_b[3:0]))
};
//---------------------
// Probes for ASI_ITLB_TAG_READ & ASI_ITLB_DATA_ACCESS followme
assign fetch_tid_f = `SPC3.ifu_ftu.ftu_asi_ctl.indet_tid_f;
assign itag_read_active_bf = `SPC3.ifu_ftu.ftu_ftp_ctl.ftp_itt_rd_req_bf;
assign i_data_access_active_bf = `SPC3.ifu_ftu.ftu_ftp_ctl.ftp_itd_rd_req_bf;
assign itlb_va_bf = {24'b0,`SPC3.ifu_ftu.asi_addr_bf[39:3],3'b0};
assign itlb_value = `SPC3.ifu_ftu.it_rd_data; // [63:0]
//---------------------
// Probes for ASI_ITLB_PROBE followme
assign probe_active_bf = `SPC3.ifu_ftu.ftp_ith_det_req_bf;
assign probe_tid_bf = `SPC3.ifu_ftu.ftu_ftp_ctl.ith_det_thr_id;
assign probe_value = `SPC3.ifu_ftu.it_rd_data;
//----------------------------------------------------------
//----------------------------------------------------------
always @ (posedge `SPC3.l2clk) begin // {
tstamp = `TOP.core_cycle_cnt - 1;
//---------------------------------
// Pipeline signals
// Have to pipline these past where the TLB was accessed
// to get the parity bits for follow me
// Then we need to subtract 2 from the timestamp so get back
// get the correct time the tlb was accessed.
itag_read_active_f <= itag_read_active_bf;
itag_read_active_c <= itag_read_active_f;
itag_read_active <= itag_read_active_c;
itlb_va_f <= itlb_va_bf;
itlb_va_c <= itlb_va_f;
itlb_va <= itlb_va_c;
fetch_tid_c <= fetch_tid_f;
fetch_tid <= fetch_tid_c;
i_data_access_active_f <= i_data_access_active_bf;
i_data_access_active_c <= i_data_access_active_f;
i_data_access_active <= i_data_access_active_c;
probe_active_f <= probe_active_bf;
probe_active_c <= probe_active_f;
probe_active <= probe_active_c;
probe_tid_f <= probe_tid_bf;
probe_tid_c <= probe_tid_f;
probe_tid <= probe_tid_c;
//---------------------------------
//---------------------------------
//---------------------------------
// DTLB_TAG_READ_REG followme & sync
if (dtag_read_active) begin // {
myasi = 8'h5e;
// Determine which thread is active
mytid = dtlb_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp - 1);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, dtlb_va, dtlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp - 1);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum, tstamp - 1, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
end //}
end // }
//---------------------------------
// DTLB_DATA_ACCESS_REG followme & sync
if (d_data_access_active) begin // {
myasi = 8'h5d;
mytid = dtlb_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp-1);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum,myasi, dtlb_va, dtlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp-1);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-1, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
end //}
end // }
//---------------------------------
// ITLB_TAG_READ_REG followme & sync
if (itag_read_active) begin // {
myasi = 8'h56;
mytid = fetch_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, itlb_va, itlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
end //}
end // }
//---------------------------------
// ITLB_DATA_ACCESS_REG followme & sync
if (i_data_access_active) begin // {
myasi = 8'h55;
mytid = fetch_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, itlb_va, itlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
end //}
end // }
//---------------------------------
// ITLB_PROBE - followme & sync
if (probe_active) begin // {
myasi = 8'h53;
for (i=0; i<=7; i=i+1) begin // {
if (probe_tid[i]==1'b1) begin // {
mytid = i;
mytnum = (mycid * 8) + mytid;
end // }
end // }
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, itlb_va, probe_value, tstamp-2);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, itlb_va, probe_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp-2);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-2, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
end //}
end // }
end // always }
//----------------------------------------------------------
`endif
endmodule
`endif
`ifdef CORE_4
module tlb_misc_c4();
`ifndef GATESIM
// common defines
`include "defines.vh"
`include "tlb_sync.vh"
//---------------------
// Signals for ASI_I/DTLB_TAG_READ followme
wire [7:0] select_pc_b;
wire [7:0] dtag_read_active;
wire [2:0] dtlb_tid;
wire [63:0] dtlb_va;
wire [63:0] dtlb_value;
wire [2:0] fetch_tid_f;
reg [2:0] fetch_tid_c;
reg [2:0] fetch_tid;
wire [7:0] itag_read_active_bf;
reg [7:0] itag_read_active_f;
reg [7:0] itag_read_active_c;
reg [7:0] itag_read_active;
wire [63:0] itlb_va_bf;
reg [63:0] itlb_va_f;
reg [63:0] itlb_va_c;
reg [63:0] itlb_va;
wire [63:0] itlb_value;
//---------------------
// Signals for ASI_I/DTLB_DATA_ACCESS followme
wire [7:0] d_data_access_active;
wire [7:0] i_data_access_active_bf;
reg [7:0] i_data_access_active_f;
reg [7:0] i_data_access_active_c;
reg [7:0] i_data_access_active;
//---------------------
// Signals for ASI_ITLB_PROBE followme
wire probe_active_bf;
reg probe_active_f;
reg probe_active_c;
reg probe_active;
wire [7:0] probe_tid_bf;
reg [7:0] probe_tid_f;
reg [7:0] probe_tid_c;
reg [7:0] probe_tid;
wire [63:0] probe_value;
//---------------------
// Misc
reg [2:0] mycid;
reg [2:0] mytid;
reg [5:0] mytnum;
reg [7:0] myasi;
reg [(`TS_WIDTH-1):0] tstamp;
integer i;
integer junk;
initial begin // {
mycid = 4;
end //}
//----------------------------------------------------------
// DUT probes
//---------------------
// Probes for ASI_DTLB_TAG_READ & ASI_DTLB_DATA_ACCESS followme
assign select_pc_b = `PROBES4.select_pc_b;
assign dtlb_tid = `SPC4.lsu.dcc.tid_b;
assign dtlb_va = `SPC4.lsu_mmu_va_b;
assign dtlb_value = `SPC4.lsu.tgd.ldxa_asi_data_b;
assign dtag_read_active = {
({4{`SPC4.lsu.dcc.dcc_tlb_tag_read_b &
dtlb_tid[2] &
!`SPC4.lsu.lsu_illegal_inst_b &
!`SPC4.tlu.fls1.dae_invalid_asi_w_in &
(!`SPC4.tlu_flush_lsu_b |`SPC4.tlu.fls1.va_watchpoint_w_in)}} &
(select_pc_b[7:4])),
({4{`SPC4.lsu.dcc.dcc_tlb_tag_read_b &
!dtlb_tid[2] &
!`SPC4.lsu.lsu_illegal_inst_b &
!`SPC4.tlu.fls0.dae_invalid_asi_w_in &
(!`SPC4.tlu_flush_lsu_b |`SPC4.tlu.fls0.va_watchpoint_w_in)}} &
(select_pc_b[3:0]))
};
assign d_data_access_active = {
({4{`SPC4.lsu.dcc.dcc_tlb_data_read_b &
dtlb_tid[2] &
!`SPC4.lsu.lsu_illegal_inst_b &
(!`SPC4.tlu_flush_lsu_b |`SPC4.tlu.fls1.va_watchpoint_w_in)}} &
(select_pc_b[7:4])),
({4{`SPC4.lsu.dcc.dcc_tlb_data_read_b &
!dtlb_tid[2] &
!`SPC4.lsu.lsu_illegal_inst_b &
(!`SPC4.tlu_flush_lsu_b |`SPC4.tlu.fls0.va_watchpoint_w_in)}} &
(select_pc_b[3:0]))
};
//---------------------
// Probes for ASI_ITLB_TAG_READ & ASI_ITLB_DATA_ACCESS followme
assign fetch_tid_f = `SPC4.ifu_ftu.ftu_asi_ctl.indet_tid_f;
assign itag_read_active_bf = `SPC4.ifu_ftu.ftu_ftp_ctl.ftp_itt_rd_req_bf;
assign i_data_access_active_bf = `SPC4.ifu_ftu.ftu_ftp_ctl.ftp_itd_rd_req_bf;
assign itlb_va_bf = {24'b0,`SPC4.ifu_ftu.asi_addr_bf[39:3],3'b0};
assign itlb_value = `SPC4.ifu_ftu.it_rd_data; // [63:0]
//---------------------
// Probes for ASI_ITLB_PROBE followme
assign probe_active_bf = `SPC4.ifu_ftu.ftp_ith_det_req_bf;
assign probe_tid_bf = `SPC4.ifu_ftu.ftu_ftp_ctl.ith_det_thr_id;
assign probe_value = `SPC4.ifu_ftu.it_rd_data;
//----------------------------------------------------------
//----------------------------------------------------------
always @ (posedge `SPC4.l2clk) begin // {
tstamp = `TOP.core_cycle_cnt - 1;
//---------------------------------
// Pipeline signals
// Have to pipline these past where the TLB was accessed
// to get the parity bits for follow me
// Then we need to subtract 2 from the timestamp so get back
// get the correct time the tlb was accessed.
itag_read_active_f <= itag_read_active_bf;
itag_read_active_c <= itag_read_active_f;
itag_read_active <= itag_read_active_c;
itlb_va_f <= itlb_va_bf;
itlb_va_c <= itlb_va_f;
itlb_va <= itlb_va_c;
fetch_tid_c <= fetch_tid_f;
fetch_tid <= fetch_tid_c;
i_data_access_active_f <= i_data_access_active_bf;
i_data_access_active_c <= i_data_access_active_f;
i_data_access_active <= i_data_access_active_c;
probe_active_f <= probe_active_bf;
probe_active_c <= probe_active_f;
probe_active <= probe_active_c;
probe_tid_f <= probe_tid_bf;
probe_tid_c <= probe_tid_f;
probe_tid <= probe_tid_c;
//---------------------------------
//---------------------------------
//---------------------------------
// DTLB_TAG_READ_REG followme & sync
if (dtag_read_active) begin // {
myasi = 8'h5e;
// Determine which thread is active
mytid = dtlb_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp - 1);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, dtlb_va, dtlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp - 1);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum, tstamp - 1, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
end //}
end // }
//---------------------------------
// DTLB_DATA_ACCESS_REG followme & sync
if (d_data_access_active) begin // {
myasi = 8'h5d;
mytid = dtlb_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp-1);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum,myasi, dtlb_va, dtlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp-1);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-1, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
end //}
end // }
//---------------------------------
// ITLB_TAG_READ_REG followme & sync
if (itag_read_active) begin // {
myasi = 8'h56;
mytid = fetch_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, itlb_va, itlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
end //}
end // }
//---------------------------------
// ITLB_DATA_ACCESS_REG followme & sync
if (i_data_access_active) begin // {
myasi = 8'h55;
mytid = fetch_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, itlb_va, itlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
end //}
end // }
//---------------------------------
// ITLB_PROBE - followme & sync
if (probe_active) begin // {
myasi = 8'h53;
for (i=0; i<=7; i=i+1) begin // {
if (probe_tid[i]==1'b1) begin // {
mytid = i;
mytnum = (mycid * 8) + mytid;
end // }
end // }
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, itlb_va, probe_value, tstamp-2);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, itlb_va, probe_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp-2);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-2, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
end //}
end // }
end // always }
//----------------------------------------------------------
`endif
endmodule
`endif
`ifdef CORE_5
module tlb_misc_c5();
`ifndef GATESIM
// common defines
`include "defines.vh"
`include "tlb_sync.vh"
//---------------------
// Signals for ASI_I/DTLB_TAG_READ followme
wire [7:0] select_pc_b;
wire [7:0] dtag_read_active;
wire [2:0] dtlb_tid;
wire [63:0] dtlb_va;
wire [63:0] dtlb_value;
wire [2:0] fetch_tid_f;
reg [2:0] fetch_tid_c;
reg [2:0] fetch_tid;
wire [7:0] itag_read_active_bf;
reg [7:0] itag_read_active_f;
reg [7:0] itag_read_active_c;
reg [7:0] itag_read_active;
wire [63:0] itlb_va_bf;
reg [63:0] itlb_va_f;
reg [63:0] itlb_va_c;
reg [63:0] itlb_va;
wire [63:0] itlb_value;
//---------------------
// Signals for ASI_I/DTLB_DATA_ACCESS followme
wire [7:0] d_data_access_active;
wire [7:0] i_data_access_active_bf;
reg [7:0] i_data_access_active_f;
reg [7:0] i_data_access_active_c;
reg [7:0] i_data_access_active;
//---------------------
// Signals for ASI_ITLB_PROBE followme
wire probe_active_bf;
reg probe_active_f;
reg probe_active_c;
reg probe_active;
wire [7:0] probe_tid_bf;
reg [7:0] probe_tid_f;
reg [7:0] probe_tid_c;
reg [7:0] probe_tid;
wire [63:0] probe_value;
//---------------------
// Misc
reg [2:0] mycid;
reg [2:0] mytid;
reg [5:0] mytnum;
reg [7:0] myasi;
reg [(`TS_WIDTH-1):0] tstamp;
integer i;
integer junk;
initial begin // {
mycid = 5;
end //}
//----------------------------------------------------------
// DUT probes
//---------------------
// Probes for ASI_DTLB_TAG_READ & ASI_DTLB_DATA_ACCESS followme
assign select_pc_b = `PROBES5.select_pc_b;
assign dtlb_tid = `SPC5.lsu.dcc.tid_b;
assign dtlb_va = `SPC5.lsu_mmu_va_b;
assign dtlb_value = `SPC5.lsu.tgd.ldxa_asi_data_b;
assign dtag_read_active = {
({4{`SPC5.lsu.dcc.dcc_tlb_tag_read_b &
dtlb_tid[2] &
!`SPC5.lsu.lsu_illegal_inst_b &
!`SPC5.tlu.fls1.dae_invalid_asi_w_in &
(!`SPC5.tlu_flush_lsu_b |`SPC5.tlu.fls1.va_watchpoint_w_in)}} &
(select_pc_b[7:4])),
({4{`SPC5.lsu.dcc.dcc_tlb_tag_read_b &
!dtlb_tid[2] &
!`SPC5.lsu.lsu_illegal_inst_b &
!`SPC5.tlu.fls0.dae_invalid_asi_w_in &
(!`SPC5.tlu_flush_lsu_b |`SPC5.tlu.fls0.va_watchpoint_w_in)}} &
(select_pc_b[3:0]))
};
assign d_data_access_active = {
({4{`SPC5.lsu.dcc.dcc_tlb_data_read_b &
dtlb_tid[2] &
!`SPC5.lsu.lsu_illegal_inst_b &
(!`SPC5.tlu_flush_lsu_b |`SPC5.tlu.fls1.va_watchpoint_w_in)}} &
(select_pc_b[7:4])),
({4{`SPC5.lsu.dcc.dcc_tlb_data_read_b &
!dtlb_tid[2] &
!`SPC5.lsu.lsu_illegal_inst_b &
(!`SPC5.tlu_flush_lsu_b |`SPC5.tlu.fls0.va_watchpoint_w_in)}} &
(select_pc_b[3:0]))
};
//---------------------
// Probes for ASI_ITLB_TAG_READ & ASI_ITLB_DATA_ACCESS followme
assign fetch_tid_f = `SPC5.ifu_ftu.ftu_asi_ctl.indet_tid_f;
assign itag_read_active_bf = `SPC5.ifu_ftu.ftu_ftp_ctl.ftp_itt_rd_req_bf;
assign i_data_access_active_bf = `SPC5.ifu_ftu.ftu_ftp_ctl.ftp_itd_rd_req_bf;
assign itlb_va_bf = {24'b0,`SPC5.ifu_ftu.asi_addr_bf[39:3],3'b0};
assign itlb_value = `SPC5.ifu_ftu.it_rd_data; // [63:0]
//---------------------
// Probes for ASI_ITLB_PROBE followme
assign probe_active_bf = `SPC5.ifu_ftu.ftp_ith_det_req_bf;
assign probe_tid_bf = `SPC5.ifu_ftu.ftu_ftp_ctl.ith_det_thr_id;
assign probe_value = `SPC5.ifu_ftu.it_rd_data;
//----------------------------------------------------------
//----------------------------------------------------------
always @ (posedge `SPC5.l2clk) begin // {
tstamp = `TOP.core_cycle_cnt - 1;
//---------------------------------
// Pipeline signals
// Have to pipline these past where the TLB was accessed
// to get the parity bits for follow me
// Then we need to subtract 2 from the timestamp so get back
// get the correct time the tlb was accessed.
itag_read_active_f <= itag_read_active_bf;
itag_read_active_c <= itag_read_active_f;
itag_read_active <= itag_read_active_c;
itlb_va_f <= itlb_va_bf;
itlb_va_c <= itlb_va_f;
itlb_va <= itlb_va_c;
fetch_tid_c <= fetch_tid_f;
fetch_tid <= fetch_tid_c;
i_data_access_active_f <= i_data_access_active_bf;
i_data_access_active_c <= i_data_access_active_f;
i_data_access_active <= i_data_access_active_c;
probe_active_f <= probe_active_bf;
probe_active_c <= probe_active_f;
probe_active <= probe_active_c;
probe_tid_f <= probe_tid_bf;
probe_tid_c <= probe_tid_f;
probe_tid <= probe_tid_c;
//---------------------------------
//---------------------------------
//---------------------------------
// DTLB_TAG_READ_REG followme & sync
if (dtag_read_active) begin // {
myasi = 8'h5e;
// Determine which thread is active
mytid = dtlb_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp - 1);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, dtlb_va, dtlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp - 1);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum, tstamp - 1, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
end //}
end // }
//---------------------------------
// DTLB_DATA_ACCESS_REG followme & sync
if (d_data_access_active) begin // {
myasi = 8'h5d;
mytid = dtlb_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp-1);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum,myasi, dtlb_va, dtlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp-1);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-1, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
end //}
end // }
//---------------------------------
// ITLB_TAG_READ_REG followme & sync
if (itag_read_active) begin // {
myasi = 8'h56;
mytid = fetch_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, itlb_va, itlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
end //}
end // }
//---------------------------------
// ITLB_DATA_ACCESS_REG followme & sync
if (i_data_access_active) begin // {
myasi = 8'h55;
mytid = fetch_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, itlb_va, itlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
end //}
end // }
//---------------------------------
// ITLB_PROBE - followme & sync
if (probe_active) begin // {
myasi = 8'h53;
for (i=0; i<=7; i=i+1) begin // {
if (probe_tid[i]==1'b1) begin // {
mytid = i;
mytnum = (mycid * 8) + mytid;
end // }
end // }
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, itlb_va, probe_value, tstamp-2);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, itlb_va, probe_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp-2);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-2, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
end //}
end // }
end // always }
//----------------------------------------------------------
`endif
endmodule
`endif
`ifdef CORE_6
module tlb_misc_c6();
`ifndef GATESIM
// common defines
`include "defines.vh"
`include "tlb_sync.vh"
//---------------------
// Signals for ASI_I/DTLB_TAG_READ followme
wire [7:0] select_pc_b;
wire [7:0] dtag_read_active;
wire [2:0] dtlb_tid;
wire [63:0] dtlb_va;
wire [63:0] dtlb_value;
wire [2:0] fetch_tid_f;
reg [2:0] fetch_tid_c;
reg [2:0] fetch_tid;
wire [7:0] itag_read_active_bf;
reg [7:0] itag_read_active_f;
reg [7:0] itag_read_active_c;
reg [7:0] itag_read_active;
wire [63:0] itlb_va_bf;
reg [63:0] itlb_va_f;
reg [63:0] itlb_va_c;
reg [63:0] itlb_va;
wire [63:0] itlb_value;
//---------------------
// Signals for ASI_I/DTLB_DATA_ACCESS followme
wire [7:0] d_data_access_active;
wire [7:0] i_data_access_active_bf;
reg [7:0] i_data_access_active_f;
reg [7:0] i_data_access_active_c;
reg [7:0] i_data_access_active;
//---------------------
// Signals for ASI_ITLB_PROBE followme
wire probe_active_bf;
reg probe_active_f;
reg probe_active_c;
reg probe_active;
wire [7:0] probe_tid_bf;
reg [7:0] probe_tid_f;
reg [7:0] probe_tid_c;
reg [7:0] probe_tid;
wire [63:0] probe_value;
//---------------------
// Misc
reg [2:0] mycid;
reg [2:0] mytid;
reg [5:0] mytnum;
reg [7:0] myasi;
reg [(`TS_WIDTH-1):0] tstamp;
integer i;
integer junk;
initial begin // {
mycid = 6;
end //}
//----------------------------------------------------------
// DUT probes
//---------------------
// Probes for ASI_DTLB_TAG_READ & ASI_DTLB_DATA_ACCESS followme
assign select_pc_b = `PROBES6.select_pc_b;
assign dtlb_tid = `SPC6.lsu.dcc.tid_b;
assign dtlb_va = `SPC6.lsu_mmu_va_b;
assign dtlb_value = `SPC6.lsu.tgd.ldxa_asi_data_b;
assign dtag_read_active = {
({4{`SPC6.lsu.dcc.dcc_tlb_tag_read_b &
dtlb_tid[2] &
!`SPC6.lsu.lsu_illegal_inst_b &
!`SPC6.tlu.fls1.dae_invalid_asi_w_in &
(!`SPC6.tlu_flush_lsu_b |`SPC6.tlu.fls1.va_watchpoint_w_in)}} &
(select_pc_b[7:4])),
({4{`SPC6.lsu.dcc.dcc_tlb_tag_read_b &
!dtlb_tid[2] &
!`SPC6.lsu.lsu_illegal_inst_b &
!`SPC6.tlu.fls0.dae_invalid_asi_w_in &
(!`SPC6.tlu_flush_lsu_b |`SPC6.tlu.fls0.va_watchpoint_w_in)}} &
(select_pc_b[3:0]))
};
assign d_data_access_active = {
({4{`SPC6.lsu.dcc.dcc_tlb_data_read_b &
dtlb_tid[2] &
!`SPC6.lsu.lsu_illegal_inst_b &
(!`SPC6.tlu_flush_lsu_b |`SPC6.tlu.fls1.va_watchpoint_w_in)}} &
(select_pc_b[7:4])),
({4{`SPC6.lsu.dcc.dcc_tlb_data_read_b &
!dtlb_tid[2] &
!`SPC6.lsu.lsu_illegal_inst_b &
(!`SPC6.tlu_flush_lsu_b |`SPC6.tlu.fls0.va_watchpoint_w_in)}} &
(select_pc_b[3:0]))
};
//---------------------
// Probes for ASI_ITLB_TAG_READ & ASI_ITLB_DATA_ACCESS followme
assign fetch_tid_f = `SPC6.ifu_ftu.ftu_asi_ctl.indet_tid_f;
assign itag_read_active_bf = `SPC6.ifu_ftu.ftu_ftp_ctl.ftp_itt_rd_req_bf;
assign i_data_access_active_bf = `SPC6.ifu_ftu.ftu_ftp_ctl.ftp_itd_rd_req_bf;
assign itlb_va_bf = {24'b0,`SPC6.ifu_ftu.asi_addr_bf[39:3],3'b0};
assign itlb_value = `SPC6.ifu_ftu.it_rd_data; // [63:0]
//---------------------
// Probes for ASI_ITLB_PROBE followme
assign probe_active_bf = `SPC6.ifu_ftu.ftp_ith_det_req_bf;
assign probe_tid_bf = `SPC6.ifu_ftu.ftu_ftp_ctl.ith_det_thr_id;
assign probe_value = `SPC6.ifu_ftu.it_rd_data;
//----------------------------------------------------------
//----------------------------------------------------------
always @ (posedge `SPC6.l2clk) begin // {
tstamp = `TOP.core_cycle_cnt - 1;
//---------------------------------
// Pipeline signals
// Have to pipline these past where the TLB was accessed
// to get the parity bits for follow me
// Then we need to subtract 2 from the timestamp so get back
// get the correct time the tlb was accessed.
itag_read_active_f <= itag_read_active_bf;
itag_read_active_c <= itag_read_active_f;
itag_read_active <= itag_read_active_c;
itlb_va_f <= itlb_va_bf;
itlb_va_c <= itlb_va_f;
itlb_va <= itlb_va_c;
fetch_tid_c <= fetch_tid_f;
fetch_tid <= fetch_tid_c;
i_data_access_active_f <= i_data_access_active_bf;
i_data_access_active_c <= i_data_access_active_f;
i_data_access_active <= i_data_access_active_c;
probe_active_f <= probe_active_bf;
probe_active_c <= probe_active_f;
probe_active <= probe_active_c;
probe_tid_f <= probe_tid_bf;
probe_tid_c <= probe_tid_f;
probe_tid <= probe_tid_c;
//---------------------------------
//---------------------------------
//---------------------------------
// DTLB_TAG_READ_REG followme & sync
if (dtag_read_active) begin // {
myasi = 8'h5e;
// Determine which thread is active
mytid = dtlb_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp - 1);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, dtlb_va, dtlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp - 1);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum, tstamp - 1, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
end //}
end // }
//---------------------------------
// DTLB_DATA_ACCESS_REG followme & sync
if (d_data_access_active) begin // {
myasi = 8'h5d;
mytid = dtlb_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp-1);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum,myasi, dtlb_va, dtlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp-1);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-1, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
end //}
end // }
//---------------------------------
// ITLB_TAG_READ_REG followme & sync
if (itag_read_active) begin // {
myasi = 8'h56;
mytid = fetch_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, itlb_va, itlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
end //}
end // }
//---------------------------------
// ITLB_DATA_ACCESS_REG followme & sync
if (i_data_access_active) begin // {
myasi = 8'h55;
mytid = fetch_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, itlb_va, itlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
end //}
end // }
//---------------------------------
// ITLB_PROBE - followme & sync
if (probe_active) begin // {
myasi = 8'h53;
for (i=0; i<=7; i=i+1) begin // {
if (probe_tid[i]==1'b1) begin // {
mytid = i;
mytnum = (mycid * 8) + mytid;
end // }
end // }
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, itlb_va, probe_value, tstamp-2);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, itlb_va, probe_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp-2);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-2, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
end //}
end // }
end // always }
//----------------------------------------------------------
`endif
endmodule
`endif
`ifdef CORE_7
module tlb_misc_c7();
`ifndef GATESIM
// common defines
`include "defines.vh"
`include "tlb_sync.vh"
//---------------------
// Signals for ASI_I/DTLB_TAG_READ followme
wire [7:0] select_pc_b;
wire [7:0] dtag_read_active;
wire [2:0] dtlb_tid;
wire [63:0] dtlb_va;
wire [63:0] dtlb_value;
wire [2:0] fetch_tid_f;
reg [2:0] fetch_tid_c;
reg [2:0] fetch_tid;
wire [7:0] itag_read_active_bf;
reg [7:0] itag_read_active_f;
reg [7:0] itag_read_active_c;
reg [7:0] itag_read_active;
wire [63:0] itlb_va_bf;
reg [63:0] itlb_va_f;
reg [63:0] itlb_va_c;
reg [63:0] itlb_va;
wire [63:0] itlb_value;
//---------------------
// Signals for ASI_I/DTLB_DATA_ACCESS followme
wire [7:0] d_data_access_active;
wire [7:0] i_data_access_active_bf;
reg [7:0] i_data_access_active_f;
reg [7:0] i_data_access_active_c;
reg [7:0] i_data_access_active;
//---------------------
// Signals for ASI_ITLB_PROBE followme
wire probe_active_bf;
reg probe_active_f;
reg probe_active_c;
reg probe_active;
wire [7:0] probe_tid_bf;
reg [7:0] probe_tid_f;
reg [7:0] probe_tid_c;
reg [7:0] probe_tid;
wire [63:0] probe_value;
//---------------------
// Misc
reg [2:0] mycid;
reg [2:0] mytid;
reg [5:0] mytnum;
reg [7:0] myasi;
reg [(`TS_WIDTH-1):0] tstamp;
integer i;
integer junk;
initial begin // {
mycid = 7;
end //}
//----------------------------------------------------------
// DUT probes
//---------------------
// Probes for ASI_DTLB_TAG_READ & ASI_DTLB_DATA_ACCESS followme
assign select_pc_b = `PROBES7.select_pc_b;
assign dtlb_tid = `SPC7.lsu.dcc.tid_b;
assign dtlb_va = `SPC7.lsu_mmu_va_b;
assign dtlb_value = `SPC7.lsu.tgd.ldxa_asi_data_b;
assign dtag_read_active = {
({4{`SPC7.lsu.dcc.dcc_tlb_tag_read_b &
dtlb_tid[2] &
!`SPC7.lsu.lsu_illegal_inst_b &
!`SPC7.tlu.fls1.dae_invalid_asi_w_in &
(!`SPC7.tlu_flush_lsu_b |`SPC7.tlu.fls1.va_watchpoint_w_in)}} &
(select_pc_b[7:4])),
({4{`SPC7.lsu.dcc.dcc_tlb_tag_read_b &
!dtlb_tid[2] &
!`SPC7.lsu.lsu_illegal_inst_b &
!`SPC7.tlu.fls0.dae_invalid_asi_w_in &
(!`SPC7.tlu_flush_lsu_b |`SPC7.tlu.fls0.va_watchpoint_w_in)}} &
(select_pc_b[3:0]))
};
assign d_data_access_active = {
({4{`SPC7.lsu.dcc.dcc_tlb_data_read_b &
dtlb_tid[2] &
!`SPC7.lsu.lsu_illegal_inst_b &
(!`SPC7.tlu_flush_lsu_b |`SPC7.tlu.fls1.va_watchpoint_w_in)}} &
(select_pc_b[7:4])),
({4{`SPC7.lsu.dcc.dcc_tlb_data_read_b &
!dtlb_tid[2] &
!`SPC7.lsu.lsu_illegal_inst_b &
(!`SPC7.tlu_flush_lsu_b |`SPC7.tlu.fls0.va_watchpoint_w_in)}} &
(select_pc_b[3:0]))
};
//---------------------
// Probes for ASI_ITLB_TAG_READ & ASI_ITLB_DATA_ACCESS followme
assign fetch_tid_f = `SPC7.ifu_ftu.ftu_asi_ctl.indet_tid_f;
assign itag_read_active_bf = `SPC7.ifu_ftu.ftu_ftp_ctl.ftp_itt_rd_req_bf;
assign i_data_access_active_bf = `SPC7.ifu_ftu.ftu_ftp_ctl.ftp_itd_rd_req_bf;
assign itlb_va_bf = {24'b0,`SPC7.ifu_ftu.asi_addr_bf[39:3],3'b0};
assign itlb_value = `SPC7.ifu_ftu.it_rd_data; // [63:0]
//---------------------
// Probes for ASI_ITLB_PROBE followme
assign probe_active_bf = `SPC7.ifu_ftu.ftp_ith_det_req_bf;
assign probe_tid_bf = `SPC7.ifu_ftu.ftu_ftp_ctl.ith_det_thr_id;
assign probe_value = `SPC7.ifu_ftu.it_rd_data;
//----------------------------------------------------------
//----------------------------------------------------------
always @ (posedge `SPC7.l2clk) begin // {
tstamp = `TOP.core_cycle_cnt - 1;
//---------------------------------
// Pipeline signals
// Have to pipline these past where the TLB was accessed
// to get the parity bits for follow me
// Then we need to subtract 2 from the timestamp so get back
// get the correct time the tlb was accessed.
itag_read_active_f <= itag_read_active_bf;
itag_read_active_c <= itag_read_active_f;
itag_read_active <= itag_read_active_c;
itlb_va_f <= itlb_va_bf;
itlb_va_c <= itlb_va_f;
itlb_va <= itlb_va_c;
fetch_tid_c <= fetch_tid_f;
fetch_tid <= fetch_tid_c;
i_data_access_active_f <= i_data_access_active_bf;
i_data_access_active_c <= i_data_access_active_f;
i_data_access_active <= i_data_access_active_c;
probe_active_f <= probe_active_bf;
probe_active_c <= probe_active_f;
probe_active <= probe_active_c;
probe_tid_f <= probe_tid_bf;
probe_tid_c <= probe_tid_f;
probe_tid <= probe_tid_c;
//---------------------------------
//---------------------------------
//---------------------------------
// DTLB_TAG_READ_REG followme & sync
if (dtag_read_active) begin // {
myasi = 8'h5e;
// Determine which thread is active
mytid = dtlb_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp - 1);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, dtlb_va, dtlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp - 1);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum, tstamp - 1, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
end //}
end // }
//---------------------------------
// DTLB_DATA_ACCESS_REG followme & sync
if (d_data_access_active) begin // {
myasi = 8'h5d;
mytid = dtlb_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp-1);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum,myasi, dtlb_va, dtlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp-1);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-1, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
end //}
end // }
//---------------------------------
// ITLB_TAG_READ_REG followme & sync
if (itag_read_active) begin // {
myasi = 8'h56;
mytid = fetch_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, itlb_va, itlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
end //}
end // }
//---------------------------------
// ITLB_DATA_ACCESS_REG followme & sync
if (i_data_access_active) begin // {
myasi = 8'h55;
mytid = fetch_tid;
mytnum = (mycid * 8) + mytid;
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, itlb_va, itlb_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp - 2);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
end //}
end // }
//---------------------------------
// ITLB_PROBE - followme & sync
if (probe_active) begin // {
myasi = 8'h53;
for (i=0; i<=7; i=i+1) begin // {
if (probe_tid[i]==1'b1) begin // {
mytid = i;
mytnum = (mycid * 8) + mytid;
end // }
end // }
// followme
`PR_INFO ("pli_int", `INFO,
"C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
mycid,mytid,mytnum,myasi, itlb_va, probe_value, tstamp-2);
if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
junk = $sim_send(`PLI_ASI_READ,
mytnum, myasi, itlb_va, probe_value);
end // }
// tlb_sync
`PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
mycid, mytid, mytnum, myasi, tstamp-2);
if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-2, myasi);
end //}
//--------------------
if (`PARGS.show_tlb_on) begin // {
$display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
end //}
end // }
end // always }
//----------------------------------------------------------
`endif
endmodule
`endif
//----------------------------------------------------------
//----------------------------------------------------------