Altifigence Academy

20 / 37 · Concept

generate : construire des circuits statiques avec des boucles

Utilisez genvar et generate-if pour une hiérarchie nommée et vérifiez l'ordre des voies.

La boucle crée des instances, pas des cycles

genvar/generate répète une structure statique avant exécution. Une boucle always_comb décrit un calcul procédural dont le matériel est déterminé à la synthèse. Aucune n'implique une itération par horloge; le traitement série nécessite état et contrôleur. Ce bus packed est partagé en LANES mots de W bits, chacun donnant une parité. Les deux paramètres sont positifs.

SystemVerilog
module lane_parity #(
  parameter integer W = 8,
  parameter integer LANES = 3
) (
  input  logic [W*LANES-1:0] data,
  output logic [LANES-1:0] parity
);
  genvar lane;
  generate
    for (lane = 0; lane < LANES; lane = lane + 1) begin : g_lane
      wire [W-1:0] word_data;
      assign word_data = data[lane*W +: W];
      assign parity[lane] = ^word_data;
    end
  endgenerate
endmodule

data[base +: W] sélectionne W bits à partir de base vers les indices croissants; W est constant. W=8, LANES=3 relie 7:0 à la voie 0,15:8 à la voie 1,23:16 à la voie 2. g_lane fournit une hiérarchie stable, telle g_lane[1].word_data.

Lire l'ordre des voies

data=24'h03_01_80 contient 80,01,03 depuis la voie 0. Les parités 1,1,0 donnent parity[2:0]=011. L'octet de gauche est la voie 2. Distinguez index, affichage et transmission. Toutes calculent simultanément, sans latence enregistrée. Davantage de LANES ajoute de la logique, pas des cycles; charge, routage et timing physique restent à vérifier.

generate-if choisit une structure fixe

La condition est constante, par exemple un paramètre ajoutant un registre. Un signal dynamique appartient au combinatoire ou au bloc cadencé. Ajouter un registre change la validité, donc le contrat et le vérificateur. N'utilisez pas zéro pour désactiver un bus:[−1:0] n'est pas un objet sûr de largeur nulle. Rejetez la configuration ou conservez une interface définie dans une branche statique.

Exercice : repérer des voies inversées

Testez l'exemple, puis activez un bit dans chaque voie: seule sa parité change. Deux bits actifs donnent parité paire 0. Des données identiques sur toutes les voies cachent des tranches inversées. Extrayez numériquement les voies dans la référence et comptez les bits à 1. Testez W=1,8 et LANES=1,3 pour minimums, octets et hiérarchie. Enregistrez ensuite la parité et définissez reset, enable et comparaison avec bus actuel ou capturé au front précédent.

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