¿Es legal tener modports que no incluyan todos los cables de una interfaz?
Sí, consulte IEEE Std 1800-2012 § 25.5.4 Modport expresiones :
Una expresión modport permite que elementos de matrices y estructuras, concatenaciones de elementos y expresiones de patrones de asignación de elementos declarados en una interfaz se incluyan en una lista modport. Esta expresión modport se nombra explícitamente con un identificador de puerto, visible solo a través de la conexión modport.
Al igual que los puertos nombrados explícitamente en una declaración de puerto de módulo, los identificadores de puerto existen en su propio espacio de nombre para cada lista de puerto de puerto. Cuando un ítem modport es solo un identificador de puerto simple, ese identificador se usa como una referencia a un ítem de interfaz y un identificador de puerto. Una vez que se haya definido un identificador de puerto, no habrá otra definición de puerto con este mismo nombre.
Por ejemplo:
interface I;
logic [7:0] r;
const int x=1;
bit R;
modport A (output .P(r[3:0]), input .Q(x), R);
modport B (output .P(r[7:4]), input .Q(2), R);
endinterface
module M ( interface i);
initial i.P = i.Q;
endmodule
module top;
I i1 ();
M u1 (i1.A);
M u2 (i1.B);
initial #1 $display("%b", i1.r); // displays 00100001
endmodule
No todos los simuladores / sintetizador admiten expresiones modeport, por lo que tendrás que experimentar. Las expresiones de Modeport no son nuevas, también se describen en IEEE Std 1800-2005. Quizás también el Accellera SystemVerilog 3.1a (necesitaría desenterrar el antiguo LRM para verificar).
¿Se pueden tener asignaciones en una interfaz?
Sí. El soporte de síntesis puede estar limitado para algunas herramientas; tendrás que experimentar. Para las simulaciones, las declaraciones de asignación en una interfaz se pueden usar para controlar datos para buses de tres estados.
interface I;
bit drive_en;
tri [15:0] io;
logic [15:0] io_drv;
assign io = drive_en ? io_drv : 'z;
endinterface
Las interfaces también pueden contener sus propias tareas y funciones. Si está usando la interfaz para el diseño, entonces generalmente desea limitar la interfaz simple: principalmente señales y puertos. Esto no es una regla, solo una guía recomendada.
¿O podría hacer algo de magic
para provocar que una escritura a un miembro de una unión resulte en actualizaciones de otros miembros de la unión que no comparten bits?
Más poder para ti si obtienes el magic
para lograrlo. Probablemente no valga la pena el esfuerzo.