The interface construct was originally prompted by the requirement for better support in order to enhance/solve the directional record problem encountered by engineers trying to simplify and improve structural interconnects between entity instantiations.
RTL Requirements- Light Weight -
Must be synthesis capable
Composite/Collection of objects
signal - required
Create by declation, instantiation, ...
Method to access elements/subelements that is independent of method or location of declaration
Declare / specify on entity interface or subprogram interface
Associate/Map on entity instance or subprogram call
?Generics
Method for sizing unconstrained elements
?Support Shared Globals (Clk, Reset, ...) - similar to SV interfaces
How do we handle globals like clk and reset? How does this impact events?
Events - do we care whether events are on individual objects or as a composite
What does event mean if the object is out mode?
What about a collection of clocks?
What about a collection of busses?
Assignment to entire collection? TBD
What if modes/directions are not all out or inout
Would need use cases to validate if all out or inout is useful
?No because then a record could be used instead
Composition
Collecting other collections
Collecting other modes
?Shared Globals (Clk, reset, ...)
Access Control / Decomposition - similar to ModPort
Direction control of objects
support conjugate and monitor (all in) capability (via attribute or other)
?Shared Globals (Clk, reset, ...)
??Access to Subprograms
??Exclusion of objects
Must support a access control/Decomposition declaration/specification
?Can access control happen directly on interface?
Decomposition within a program (architecture / procedure)
Method to access elements/subelements that is independent of method or location of declaration
Declare / specify on entity interface or subprogram interface
Associate/Map on entity instance or subprogram call
Support Generics
Method for sizing unconstrained elements
Support Shared Globals (Clk, Reset, ...) - similar to SV interfaces
How to handle globals like clk and reset?
Events - want events on individual objects
What does event mean if the object is out mode?
What about a collection of clocks?
What about a collection of busses?
Assignment? Only to elements within the collection
Composition
Collecting other collections
Collecting other modes
Shared Globals
Access Control / Decomposition - similar to ModPort
Directions of objects
support conjugate and monitor (all in) capability (via attribute or other)
?Shared Globals (Clk, reset, ...)
?Access to Subprograms
???Import/Export of subprograms - big change -
impure subprograms need to access ports of a local entity
Exclusion of objects
Must support a access control/Decomposition declaration/specification
?Can access control happen directly on interface?
Decomposition within a program (architecture / procedure)
Assign to items of the collection
Read individual items of the collection
Subprograms
access interface internals
Avoid compiler issues when integrating port ( A : MyMode MyType) ; -- VHDL already has this in some areas. port ( A : <MyMode> MyType) ; -- A fix, but there are many variations port ( A : MyType(MyMode)) ; -- A fix, but there are many variations
Internal to a model, use an identifier to dynamically associate with one of 2 identical interfaces