RTL vs HDL? Quelle est la différence

24

Quelle est la principale différence entre RTL et HDL? Pour être honnête, je l'ai recherché / recherché sur Google, mais les gens sont partagés dans leurs opinions. Je me souviens d'avoir dit que HDL est le langage informatique utilisé pour décrire un circuit numérique et lorsqu'il est synthétisable, il est alors considéré comme RTL.

WantIt
la source

Réponses:

18

HDL est le nom fourre-tout pour tous les langages de définition de matériel (Verilog, VHDL, etc.) de la même manière que l'Orienté Orienté peut faire référence à C ++, Java, etc.

RTL d'autre part est une façon de décrire un circuit.

Vous écrivez votre code de niveau RTL dans un langage HDL qui est ensuite traduit (par des outils de synthèse) en description de niveau de porte dans le même langage HDL ou tout ce que votre appareil / processus cible prendra.

Laisse moi te donner un exemple. Voici une ligne de Verilog (HDL) décrivant un multiplexeur en RTL:

assign mux_out = (sel) ? din_1 : din_0;

Votre outil de synthèse peut prendre cela et le convertir en un ensemble de portes logiques, ou simplement une macro multiplexeur prise en charge par votre appareil final. Par exemple, il peut instancier une macro multiplexeur

mux u3 (mux_out, din_1, din_0);

Dans les deux cas, vous pouvez alimenter les mêmes entrées dans le bloc (RTL ou au niveau de la porte) et votre sortie doit être la même. En fait, il existe des outils qui vérifient la sortie de votre synthèse par rapport à votre code RTL pour vous assurer que l'outil n'a pas accidentellement optimisé ou modifié quelque chose pendant la synthèse qui a causé une incompatibilité. C'est ce qu'on appelle la vérification formelle.

Pour diverses raisons, interopérabilité, facilité de changement, compréhensibilité, vous écrivez votre description du circuit numérique en RTL, au lieu de la porte.

EEToronto
la source
3
Belle réponse, juste un raffinement supplémentaire ... RTL suppose un style de conception donné - nuage logique, registre, nuage logique, registre, etc., ce qui implique une conception synchrone (cadencée). SI vous codiez dans votre hdl pour une conception sans horloge (asyncrone), votre outil de synthèse pourrait utiliser autre chose que RTL.
espace réservé
,, En fait, il existe des outils qui vérifient la sortie de votre synthèse par rapport à votre code RTL pour vous assurer que l'outil n'a pas accidentellement optimisé ou modifié quelque chose pendant la synthèse qui a causé une incompatibilité. C'est ce qu'on appelle la vérification formelle. '' Non, ce n'est pas le cas. C'est ce qu'on appelle la vérification d'équivalence logique ou la vérification d'équivalence formelle. La vérification formelle est plutôt un processus de prouver (en utilisant des méthodes mathématiques, sans bancs de simulation / test) que votre description matérielle décrit vraiment le comportement qu'elle était censée décrire.
Al Bundy
14

HDL (Hardware description Language) est le type de langage utilisé, Verilog / VHDL par rapport à un javascript non HDL.

RTL (Register-transfer level) est un niveau d'abstraction dans lequel vous écrivez. Les trois niveaux auxquels je fais référence sont Behavioral, RTL, Gate-level.

Le comportement comporte la couche d'abstraction la plus élevée qui décrit le comportement global et n'est souvent pas synthétisable, mais est utile pour la vérification.

RTL décrit le matériel que vous souhaitez en impliquant la logique. définir les bascules, les verrous et comment les données sont transférées entre eux. Ceci est synthétisable, la synthèse peut altérer / optimiser la logique utilisée mais pas le comportement. Commutation des multiplexeurs pour les portes, etc. inversant parfois les signaux pour mieux optimiser la conception.

Verilog RTL impliquant une bascule:

logic a;              //logic is SystemVerilog, could be a 'reg'
logic k;              // Driven by RTL not shown
always @(posedge clk or negede rst_n) begin
  if (~rst_n) begin
    a <= 'b0 ;
  end
  else begin
    a <= k ;
  end
end

Opérateurs binaires combinatoires:

logic [1:0] n;
logic [1:0] m;
logic [1:0] result;

assign result = n & m ;

Le niveau de porte est une conception utilisant les portes logiques de base (NAND, NOR, AND, OR, MUX, FLIP-FLOP). Il n'a pas besoin d'être synthétisé ou est la sortie de la synthèse. Cela a le niveau d'abstraction le plus bas. ce sont les portes logiques que vous utiliserez sur la puce, mais il manque des informations de position.

Verilog au niveau de la porte (même fonction que ci-dessus):

wire a;
wire k;
DFFRX1 dffrx1_i0 (
  .Q (a),   //Output
  .QN( ),   //Inverted output not used
  .D (k),   //Input
  .CK(clk), //Clk
  .RN(rst_n)// Active Low Async Reset
);

Combinatoire

wire [1:0] n;
wire [1:0] m;
wire [1:0] result;

AND2X1 and2x1_i0 (
  .Y( result[0]),
  .A( n[0]     ),
  .B( m[0]     )
);
AND2X1 and2x1_i1 (
  .Y( result[1]),
  .A( n[1]     ),
  .B( m[1]     )
);
pre_randomize
la source
Si l'on devait concevoir un circuit comme MyReg[7..1] := MyReg[6..0]; MyReg[0] := SerInput; MyReg.Clk = SerClk; MyReg[7..0].AR = !InBus[7..0] & Load; MyReg[7..0].AP = InBus[7..0] & Load;(un registre à décalage à charge parallèle asynchrone qui pourrait être implémenté sur un CPLD Xilinx 9536 en utilisant des blocs avec réinitialisation / préréglage asynchrone), cela serait-il considéré comme RTL ou au niveau de la porte?
supercat
RTL, le niveau de la porte ressemblerait à AND(.a(),.b()) OR(.a(),.b())des portes purement logiques connectées. J'ai l'impression que RTL est tout ce que vous avez l'intention de synthétiser, même des circuits combinatoires, car vous décrivez toujours le changement des données, mais pas directement les portes logiques.
pre_randomize
1
Désolé, je ne suis pas, j'essaierai de clarifier. RTL implique une bascule. Le niveau de la porte instancie une bascule. Pour les circuits simples, le raccordement d'un tas de portes logiques peut être simple. mais peut ne pas être efficace sur le plan énergétique. Un processeur Atom possède 47 millions de transistors, ce qui représente environ 10 millions d'équivalents NAND2. Souhaitez-vous définir et déboguer 10 millions de portes câblées à la main? C'est l'avantage de résumer un peu, nous pouvons étudier et déboguer le comportement souhaité.
pre_randomize
1
Supposons que l'on essaye de spécifier un 74HC74 dans un HDL. Il existe une variété de façons de synthétiser un tel appareil en utilisant une combinaison de logique combinatoire, de flops de synchronisation uniquement et de verrous transparents, mais je ne peux pas imaginer d'implémentation qui n'implique ni conditions de concurrence ni création d'anomalies comportementales qui n'existe pas avec les primitives matérielles (par exemple, si D et Q sont élevés, une impulsion runt sur CP ou / SD ne devrait pas avoir d'effet, mais dans les implémentations, je peux comprendre que de telles impulsions pourraient provoquer une métastabilité et / ou un problème de sortie).
supercat
1
Comment créez MyLatch-vous une cellule de base instanciée ou un verrou implicite. Si vous instanciez la porte c'est au niveau de la porte Si vous l'impliquez, c'est RTL. La bibliothèque au niveau de la porte sera associée à un timing pour la modélisation des conditions de course / pépins, etc.
pre_randomize