Files
Toooba/src_SSITH_P3/src_BSV/Giraffe_IFC.bsv
2022-08-15 16:18:23 +00:00

168 lines
4.7 KiB
Plaintext

//-
// AXI (user fields) modifications:
// Copyright (c) 2019 Alexandre Joannou
// Copyright (c) 2019 Peter Rugg
// Copyright (c) 2019 Jonathan Woodruff
// All rights reserved.
//
// This software was developed by SRI International and the University of
// Cambridge Computer Laboratory (Department of Computer Science and
// Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
// DARPA SSITH research programme.
//-
package Giraffe_IFC;
import Bus ::*;
import BlueAXI4 ::*;
import Connectable ::*;
`include "Giraffe.defines"
(* always_ready, always_enabled *)
interface JTAG_IFC;
(* prefix = "", result = "unused0" *)
method Action tdi((* port = "tdi" *) Bit#(1) x);
(* prefix = "", result = "unused1" *)
method Action tms((* port = "tms" *) Bit#(1) x);
(* prefix = "", result = "unused2" *)
method Action tclk((* port = "tclk" *) Bit#(1) x);
(* result = "tdo" *)
method Bit#(1) tdo;
interface Clock tclk_out;
endinterface
(* always_ready, always_enabled *)
interface DMI_Master_IFC;
(* prefix = "", result = "unused0" *)
method Action req_ready((* port = "req_ready" *) Bit#(1) x);
(* result = "req_valid" *)
method Bit#(1) req_valid;
(* result = "req_addr" *)
method Bit#(7) req_addr;
(* result = "req_data" *)
method Bit#(32) req_data;
(* result = "req_op" *)
method Bit#(2) req_op;
(* result = "rsp_ready" *)
method Bit#(1) rsp_ready;
(* prefix = "", result = "unused1" *)
method Action rsp_valid((* port = "rsp_valid" *) Bit#(1) x);
(* prefix = "", result = "unused2" *)
method Action rsp_data((* port = "rsp_data" *) Bit#(32) x);
(* prefix = "", result = "unused3" *)
method Action rsp_response((* port = "rsp_response" *) Bit#(2) x);
endinterface
(* always_ready, always_enabled *)
interface DMI_IFC;
(* result = "req_ready" *)
method Bit#(1) req_ready;
(* prefix = "", result = "unused0" *)
method Action req_valid((* port = "req_valid" *) Bit#(1) x);
(* prefix = "", result = "unused1" *)
method Action req_addr((* port = "req_addr" *) Bit#(7) x);
(* prefix = "", result = "unused2" *)
method Action req_data((* port = "req_data" *) Bit#(32) x);
(* prefix = "", result = "unused3" *)
method Action req_op((* port = "req_op" *) Bit#(2) x);
(* prefix = "", result = "unused4" *)
method Action rsp_ready((* port = "rsp_ready" *) Bit#(1) x);
(* result = "rsp_valid" *)
method Bit#(1) rsp_valid;
(* result = "rsp_data" *)
method Bit#(32) rsp_data;
(* result = "rsp_response" *)
method Bit#(2) rsp_response;
endinterface
instance Connectable#(DMI_Master_IFC, DMI_IFC);
module mkConnection#(DMI_Master_IFC m, DMI_IFC s)(Empty);
mkConnection(m.req_ready, s.req_ready);
mkConnection(m.req_valid, s.req_valid);
mkConnection(m.req_addr, s.req_addr);
mkConnection(m.req_data, s.req_data);
mkConnection(m.req_op, s.req_op);
mkConnection(m.rsp_ready, s.rsp_ready);
mkConnection(m.rsp_valid, s.rsp_valid);
mkConnection(m.rsp_data, s.rsp_data);
mkConnection(m.rsp_response, s.rsp_response);
endmodule
endinstance
instance Connectable#(DMI_IFC, DMI_Master_IFC);
module mkConnection#(DMI_IFC s, DMI_Master_IFC m)(Empty);
mkConnection(m, s);
endmodule
endinstance
interface Core_IFC;
interface AXI4_Master_Sig#(`AXI4_PARAMS_Giraffe) master0;
interface AXI4_Master_Sig#(`AXI4_PARAMS_Giraffe) master1;
interface AXI4_Master_Sig#(`AXI4_PARAMS_Giraffe) master2;
interface AXI4_Master_Sig#(`AXI4_PARAMS_Giraffe) master3;
(* always_ready, always_enabled *)
(* prefix = "", result = "unused0" *)
method Action interrupt0((* port = "interrupt0" *) Bit#(1) x);
(* always_ready, always_enabled *)
(* prefix = "", result = "unused1" *)
method Action interrupt1((* port = "interrupt1" *) Bit#(1) x);
(* always_ready, always_enabled *)
(* prefix = "", result = "unused2" *)
method Action interrupt2((* port = "interrupt2" *) Bit#(1) x);
`ifdef JTAG_TAP
(* prefix = "" *)
interface JTAG_IFC jtag;
`else
(* prefix = "dmi" *)
interface DMI_IFC dmi;
`endif
endinterface
interface Platform_IFC;
interface AXI4_Slave_Sig#(`AXI4_PARAMS_Giraffe) slave0;
interface AXI4_Slave_Sig#(`AXI4_PARAMS_Giraffe) slave1;
interface AXI4_Slave_Sig#(`AXI4_PARAMS_Giraffe) slave2;
interface AXI4_Slave_Sig#(`AXI4_PARAMS_Giraffe) slave3;
(* always_ready, always_enabled *)
method Bit#(1) interrupt0;
(* always_ready, always_enabled *)
method Bit#(1) interrupt1;
(* always_ready, always_enabled *)
method Bit#(1) interrupt2;
interface BusSend#(Bit#(8)) uart_out;
interface BusRecv#(Bit#(8)) uart_in;
endinterface
endpackage