After a test, GDB can write DCSR to restore to Machine privilege, write to PC (DPC) to restore boot value, write MSTATUS to restore to initial value, then can load and run next test.
107 lines
3.2 KiB
Plaintext
107 lines
3.2 KiB
Plaintext
// Copyright (c) 2016-2019 Bluespec, Inc. All Rights Reserved
|
|
|
|
package Proc_IFC;
|
|
|
|
// ================================================================
|
|
// BSV library imports
|
|
|
|
import Vector :: *;
|
|
import GetPut :: *;
|
|
import ClientServer :: *;
|
|
|
|
// ================================================================
|
|
// Project imports
|
|
|
|
import ISA_Decls :: *;
|
|
|
|
import AXI4_Types :: *;
|
|
import Fabric_Defs :: *;
|
|
|
|
`ifdef INCLUDE_GDB_CONTROL
|
|
import DM_CPU_Req_Rsp :: *;
|
|
`endif
|
|
|
|
`ifdef INCLUDE_TANDEM_VERIF
|
|
import ProcTypes :: *;
|
|
import Trace_Data2 :: *;
|
|
`endif
|
|
|
|
// ================================================================
|
|
// CPU interface
|
|
|
|
// Note: this Proc_IFC is similar, but not identical to CPU_IFC for Piccolo and Flute
|
|
// Specifically, it removes interfaces for software and timer,
|
|
// because the RISCY-OOO mkProc contains those elements.
|
|
|
|
interface Proc_IFC;
|
|
// Init
|
|
interface Server #(Token, Token) init_server;
|
|
|
|
// ----------------
|
|
// Start the cores running
|
|
method Action start (Addr startpc, Addr tohostAddr, Addr fromhostAddr);
|
|
|
|
// ----------------
|
|
// SoC fabric connections
|
|
|
|
// Fabric master interface for memory (from LLC)
|
|
interface AXI4_Master_IFC #(Wd_Id, Wd_Addr, Wd_Data, Wd_User) master0;
|
|
|
|
// Fabric master interface for IO (from MMIOPlatform)
|
|
interface AXI4_Master_IFC #(Wd_Id, Wd_Addr, Wd_Data, Wd_User) master1;
|
|
|
|
// ----------------
|
|
// External interrupts
|
|
|
|
(* always_ready, always_enabled *)
|
|
method Action m_external_interrupt_req (Bool set_not_clear);
|
|
|
|
(* always_ready, always_enabled *)
|
|
method Action s_external_interrupt_req (Bool set_not_clear);
|
|
|
|
// ----------------
|
|
// Non-maskable interrupt
|
|
|
|
(* always_ready, always_enabled *)
|
|
method Action non_maskable_interrupt_req (Bool set_not_clear);
|
|
|
|
// ----------------
|
|
// Set core's verbosity
|
|
|
|
method Action set_verbosity (Bit #(4) verbosity);
|
|
|
|
// ----------------
|
|
// Coherent port into LLC (used by Debug Module, DMA engines, ... to read/write memory)
|
|
|
|
interface AXI4_Slave_IFC #(Wd_Id, Wd_Addr, Wd_Data, Wd_User) debug_module_mem_server;
|
|
|
|
// ----------------
|
|
// Optional interface to Debug Module
|
|
|
|
`ifdef INCLUDE_GDB_CONTROL
|
|
interface Server #(Bool, Bool) hart0_run_halt_server;
|
|
interface Server #(DM_CPU_Req #(5, XLEN), DM_CPU_Rsp #(XLEN)) hart0_gpr_mem_server;
|
|
`ifdef ISA_F
|
|
interface Server #(DM_CPU_Req #(5, FLEN), DM_CPU_Rsp #(FLEN)) hart0_fpr_mem_server;
|
|
`endif
|
|
interface Server #(DM_CPU_Req #(12, XLEN), DM_CPU_Rsp #(XLEN)) hart0_csr_mem_server;
|
|
|
|
// Non-standard
|
|
interface Put #(Bit #(4)) hart0_put_other_req;
|
|
`endif
|
|
|
|
`ifdef INCLUDE_TANDEM_VERIF
|
|
// Note: this is a SupSize vector of streams of Trace_Data2 structs,
|
|
// each of which has a serialnum field. Each of the SupSize
|
|
// streams has serialnums in increasing order. Each serialnum
|
|
// appears exactly once in exactly one of the streams. Thus, the
|
|
// channels can easily be merged into a single program-order stream.
|
|
interface Vector #(SupSize, Get #(Trace_Data2)) v_to_TV;
|
|
`endif
|
|
|
|
endinterface
|
|
|
|
// ================================================================
|
|
|
|
endpackage
|