Mode views and 'converse
Currently mode views support 'converse which creates mode view that is exactly the opposite of the current one. However for interfaces, such as AXI that has clock on the interface that is in for both manager and subordinate, there is no way to use 'converse with the manager's mode view to create the subordinate's mode view - except by excluding clock from the interface. We can get by with this for AXI.
Wishbone as separate data in and out for both manager and subordinate interfaces. They denote iDat for data in and oDat for data out. Then they connect oDat of the manager to iDat of the subordinate (in a crisscross fashion) - as a result, we either have to discard wishbone's naming convention (not so great for the user community) or write separate mode views for each piece of the interface (tedious).
What we need in the mode view construct is a way to designate mode view as static with respect to 'converse.
type WishboneRecType is record
Cyc : std_logic ;
Lock : std_logic ;
Stb : std_logic ;
Ack : std_logic ;
Err : std_logic ;
Rty : std_logic ;
Stall : std_logic ;
Adr : std_logic_vector ;
oDat : std_logic_vector ;
iDat : std_logic_vector ;
Sel : std_logic_vector ;
We : std_logic ;
Cti : std_logic_vector(2 downto 0) ;
end record WishboneRecType ;
Perhaps we could solve this issue by using a reserved word, such as static, to denote that the direction does not change with 'converse. Alternately we could some how quote the current mode, such as *in*
view WishboneRecManagerView of WishboneRecType is
Cyc : out ;
Lock : out ;
Stb : out ;
Ack : in ;
Err : in ;
Rty : in ;
Stall : in ;
Adr : out ;
oDat : static out ;
iDat : static in ;
Sel : out ;
We : out ;
Cti : out ;
end record WishboneRecManagerView ;
alias WishboneRecSubordinateView is WishboneRecManagerView'converse ;