Altifigence Academy

3 / 37 · Concept

Modules, ports et instances : des connexions contractuelles

Composez des modules combinatoires par ports nommés et vérifiez pilotage unique et limites hiérarchiques.

Une limite de module n'est pas une limite d'horloge

Un module regroupe ports et logique. Son instanciation ne crée automatiquement ni registre ni cycle. Des modules combinatoires en série restent un chemin combinatoire, dont les retards physiques s'ajoutent. Un registre explicite crée la limite de stockage. Documentez direction, largeur, signe, pilotage et validité. Les connexions nommées évitent de dépendre de l'ordre des ports.

SystemVerilog
module select_word #(parameter integer W = 8) (
  input  logic [W-1:0] a, b,
  input  logic         select_b,
  output logic [W-1:0] y
);
  assign y = select_b ? b : a;
endmodule

module choose_and_increment (
  input  logic [7:0] a, b,
  input  logic       select_b,
  output logic [8:0] result
);
  logic [7:0] chosen;
  select_word #(.W(8)) select_u (
    .a(a), .b(b), .select_b(select_b), .y(chosen)
  );
  assign result = {1'b0, chosen} + 9'd1;
endmodule

select_word est le type de module, select_u le nom d'instance. .a(a) relie le port a de l'enfant au signal a du parent. .W(8) configure l'élaboration, ce n'est pas une entrée dynamique.

Inspecter les deux extrémités

chosen est piloté uniquement par y de l'enfant et lu par le parent. Ne l'affectez pas aussi dans un autre processus; logic n'autorise pas les conflits de pilotage. result a neuf bits pour 255+1=256 et étend chosen avant addition. a=255, b=9, select_b=0 donne 256; select_b=1 donne 10. Huit bits perdraient la retenue du premier cas.

Hiérarchie, fichiers et top

Les définitions peuvent être réunies ou séparées, mais le compilateur a besoin des deux. Le top est choose_and_increment; choisir select_word change l'interface testée. Un fichier enfant absent est un problème de liste des sources, pas une preuve d'erreur logique. Les connexions positionnelles peuvent changer après modification des ports. Une entrée non connectée n'est pas une constante zéro voulue: reliez les constantes ou documentez les sorties inutilisées, puis examinez les diagnostics. Suivez les dépendances pour éviter une boucle combinatoire sans stockage; les modules ne coupent pas cette boucle.

Exercice : vérifier la composition indépendamment

Pour (a, b, select_b)=(0,255,0),(0,255,1),(255,0,0),(255,0,1), attendez 1,256,256,1. Parcourez les 256 valeurs sélectionnées avec les deux select et rendez l'autre entrée différente pour déceler une inversion. La référence choisit a ou b entier, puis ajoute 1; comparez après stabilisation. Lire chosen interne pourrait partager une erreur de sélection. Ajoutez ensuite un registre de sortie en définissant reset, validité et front d'entrée correspondant: le contrat temporel change malgré une arithmétique identique.

Votre choix s’applique à ce navigateur. Modifiez-le à tout moment en bas de page.