Livt packages
Eccelerators.RiscV
Version 0.3.0
Composable RV32I and Zmmul processors, machine-mode support, and reusable FPGA system components written in Livt.
Published files (120)
src/Contracts/RvTimingContract.lvt
namespace Eccelerators.RiscV.Contracts
/**
* Elaboration-only compatibility check for serialized, exclusively controlled units.
* READ_PORTS counts independently usable logical read ports, not FPGA RAM primitives.
* A blocking call has one outstanding operation and reset/flush must wait for return.
* Side-effecting units belong at an engine-controlled memory/commit boundary.
*/
component RvTimingContract<READ_PORTS: int = 1, REQUIRED_READS: int = 2,
OPERAND_STALLS: bool = true, VARIABLE_LATENCY: bool = true,
COMPLETION_STALLS: bool = true, OUTSTANDING: int = 1,
UNIT_CAPACITY: int = 1, DRAIN_REQUIRED: bool = true,
ENGINE_DRAINS: bool = true, EXCLUSIVE: bool = true,
SIDE_EFFECTS: bool = false>
{
static assert READ_PORTS > 0 && REQUIRED_READS > 0, "Invalid register port requirement"
static assert READ_PORTS >= REQUIRED_READS || OPERAND_STALLS, "Register ports require operand stalls"
static assert !VARIABLE_LATENCY || COMPLETION_STALLS, "Variable latency requires completion stalls"
static assert OUTSTANDING > 0 && OUTSTANDING <= UNIT_CAPACITY, "Outstanding requests exceed unit capacity"
static assert !DRAIN_REQUIRED || ENGINE_DRAINS, "Reset or flush requires draining"
static assert EXCLUSIVE, "Mutable unit requires exclusive control"
static assert !SIDE_EFFECTS, "Execution provider must not own architectural or MMIO effects"
/**
* Checks compatibility without runtime negotiation, state or clock cycles.
*/
new()
{
}
}