Map Subprogram Generics on call
Proposal Editing Information
- Who Updates: OPEN, JimLewis
- Date Proposed: 2012-08-17
- Date Last Updated: 2012-08-17
- Priority:
- Complexity:
- Focus: Testbench
Summary
Generics on a subprogram require a subprogram instance before usage. For some subprograms that are called only infrequently this is inconvenient.
Suggested during
2012_MeetingJuly19
Related and/or Competing Issues: Yes
Anonymous types on subprograms - this could be an alternative to it.
Proposal Details
Declaration:
function Mux4
generic ( type DataType )
parameter (
MuxSel : in std_logic_vector(1 downto 0) ;
A, B, C, D : in DataType
) return DataType is
. . .
end procedure Mux4;
Usage of the function:
Mux4 generic map (integer) (MuxSel, D1, D2, D3, D4) ;
Questions
General Comments
<Brent Hayhoe> 2014-03-27 - I think that this is a good idea, just slightly concerned that the usage syntax might seem a bit messy. Perhaps this might be a little clearer:
generic map (integer) Mux4 (MuxSel, D1, D2, D3, D4) ;
It seems slightly more like a normal function call (to me).
</Brent Hayhoe>
LievenLemiengre - 2016-03-11 - It is tricky to make this work with the type checker & overload resolution but it can be done. I don't like 'generic map' in expressions so I suggest you drop it completely.
result := Mux4(integer)(MuxSel, D1, D2, D3, D4);
result := Mux4(bit_vector)(MuxSel, D1, D2, D3, D4)(1); -- mux4, specialized for bit_vector, invoke it, take an element out of the array
result := Mux4(integer)(MuxSelA, D1, D2, D3, D4) + Mux4(integer)(MuxSelB, D1, D2, D3, D4)
Supporters
--
Brent Hayhoe - 2014-03-27
--
JimLewis - 2014-12-03
Add your signature here to indicate your support for the proposal