Jonathan Woodruff cbd0b2f7f5 Add a couple of casts for functions that return capabilities.
This is necessary for passing the register file read functions into modules that want to read the Pipe format rather than the Reg format.
2020-03-31 15:41:19 +01:00
2019-06-03 11:00:42 +01:00
2019-10-22 10:56:11 +01:00
2019-10-22 11:30:37 +01:00

CHERI CAP LIB

The cheri-cap-lib repository is meant to gather several specific implementations of CHERI capabilities and provide a common interface.

The CHERICap Bluespec typeclass in CHERICap.bsv captures the intended API to CHERI capabilities.

function Bool isValidCap (t cap);
function t setValidCap (t cap, Bool valid);
function Bit#(flg) getFlags (t cap);
function t setFlags (t cap, Bit#(flg) flags);
function HardPerms getHardPerms (t cap);
function t setHardPerms (t cap, HardPerms hardperms);
function SoftPerms getSoftPerms (t cap);
function t setSoftPerms (t cap, SoftPerms softperms);
function Bit#(31) getPerms (t cap);
function t setPerms (t cap, Bit#(31) perms);
function Kind getKind (t cap);
function Bool isSentry (t cap);
function Bool isSealedWithType (t cap);
function Bool isSealed (t cap);
function Bit#(ot) getType (t cap);
function Exact#(t) setType (t cap, Bit#(ot) otype);
function Bit#(n) getAddr (t cap);
function Exact#(t) setAddr (t cap, Bit#(n) addr);
function t maskAddr (t cap, Bit#(maskable_bits) mask);
function Bit#(n) getOffset (t cap);
function Exact#(t) modifyOffset (t cap, Bit#(n) offset, Bool doInc);
function Exact#(t) setOffset (t cap, Bit#(n) offset);
function Exact#(t) incOffset (t cap, Bit#(n) inc);
function Bit#(n) getBase (t cap);
function Bit#(TAdd#(n, 1)) getTop (t cap);
function Bit#(TAdd#(n, 1)) getLength (t cap);
function Bool isInBounds (t cap, Bool isTopIncluded);
function Exact#(t) setBounds (t cap, Bit#(n) length);
function t nullWithAddr (Bit#(n) addr);
function t almightyCap;
function t nullCap;
function Bool validAsType (t dummy, Bit#(n) checkType);
function t fromMem (Tuple2#(Bool, Bit#(mem_sz)) mem_cap);
function Tuple2#(Bool, Bit#(mem_sz)) toMem (t cap);

The main currently used CHERI capability implementation using the "CHERI concentrate" format can be found in CHERICC_Fat.bsv.

It is possible to export verilog wrappers for the CHERICC_Fat.bsv implementation of the CHERICap typeclass methods by runing make verilog-wrappers. It is also possible to export blarney wrappers by running make blarney-wrappers.

TODO

  • pull in the various known BSV implementations
  • pull in the existing testing infrastructure
Description
No description provided
Readme 708 KiB
Languages
Bluespec 84.1%
Python 10.4%
SystemVerilog 3%
Makefile 0.9%
C++ 0.7%
Other 0.9%