|
LCS-2016-045c |
|
5 |
|
26-Mar-17 |
|
Voting |
|
Brent Hayhoe and Patrick Lehmann |
|
|
|
Interface Construct and Port Mode Configurations Use Case - Complex RTL Signal CPU Interface |
|
History |
|
This LCS details a new attribute for the mode view construct. |
|
LCS-2016-045a LCS-2016-045b |
M'CONVERSE | Kind: | Mode view. |
Prefix: | Any named mode view M of composite type T, or an alias thereof. |
-- A FIFO like streaming interface:
type StreamingIf is record
Valid : Std_uLogic;
Data : Std_uLogic_Vector(7 downto 0);
Ack : Std_uLogic;
end record StreamingIf;
view MasterView of StreamingIf is
Valid : out;
Data : out;
Ack : in;
end view MasterView;
alias SlaveView is MasterView'CONVERSE;
-- Equivalent mode view declaration
-- view SlaveView of MasterView is
-- Valid : in;
-- Data : in;
-- Ack : out;
-- end view SlaveView;
-- A stream processing element
entity SPE is
port (
Clock : in Std_uLogic;
Reset : in Std_uLogic;
Input : view SlaveView; -- input from previous SPE
Output : view MasterView -- output to next SPE
);
end entity;
M'converse'converse
not allowed?
Why uses the example 9-bit for e.g. RdData
?
Why uses BusSlaveView
such a heavy construct instead of an alias? alias BusSlaveView is BusMasterView'CONVERSE
.
-- view BusSlaveView of BusRecordType is BusMasterView'CONVERSE end view BusSlaveView;Mode view declarations contain mode_view_element_definition. They may contain a choice whose mode is specified with a mode view as you demonstrated with SyncBusSlaveView. However, there are no syntax provisions for BusMasterView'CONVERSE by itself. I think this example should be done with an alias as follows
alias BusSlaveView is BusMasterView'CONVERSE ;--
type HoldTheBus is record busstop : BusRecordType end record HoldTheBus; view BusSlaveView of HoldTheBus is busstop : view BusMasterView'CONVERSE end view BusSlaveView;but don't see how you can legally have
view BusSlaveView of BusRecordType is BusMasterView'CONVERSE end view BusSlaveView;--
Data
, Valid
, Ack
).
The Result row in the attribute description should mention that the modes are in the same order. I somehow dislike the <...> notation.
The wording element mode does not apply to slices.
M'CONVERSE | Kind: | Mode view. |
Prefix: | Any named mode view M of composite type T, or an alias thereof, as defined in 6.5.2.1. | |
Result: | A mode view of composite type T with each element mode EM declared as the converse as that of mode view M. | |
* If EM is of mode in, the converse mode is out. | ||
* If EM is of mode out, the converse mode is in. | ||
* If EM is of mode inout, the converse mode is inout. | ||
* If EM is of mode buffer, the converse mode is in. | ||
* If EM is of mode null, the converse mode is null. | ||
* If EM is a mode view, the converse mode is EM'CONVERSE. | ||
Restrictions: | A mode of linkage is disallowed within a mode view. |