In reply to chr_sue:
This is wrong. When you are assigning to an enumerated type, you can only assign the same enumerated type or you need to use a cast.
Section 6.19.4:
An enum variable or identifier used as part of an expression is automatically cast to the base type of the enum declaration (either explicitly or using int as the default). A cast shall be required for an expression that is assigned to an enum variable where the type of the expression is not equivalent to the enumeration type of the variable.
The correct assignment is:
xtn.trans_type = transfer_t'(vif.mmon_cb.HTRANS);