Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Verilog

Maîtriser les Fonctions Mathématiques Verilog pour une Conception Matérielle Efficace

Les fonctions mathématiques Verilog peuvent être utilisées à la place d'expressions constantes et supportent à la fois les mathématiques entier et réel.

Fonctions Mathématiques Entières

La fonction $clog2 retourne le plafond de log2 de l'argument donné. Cela est typiquement utilisé pour calculer la largeur minimale requise pour adresser une mémoire de taille donnée.

Par exemple, si la conception a 7 additionneurs parallèles, alors le nombre minimum de bits requis pour représenter tous les 7 additionneurs est $clog2 de 7 qui donne 3.

module des #(parameter NUM_UNITS = 7)
  // L'utilisation de cette fonction système aide à réduire le
  // nombre de fils d'entrée vers ce module
  (input [$clog2(NUM_UNITS)-1:0] active_unit);
  initial $monitor("active_unit = %d", active_unit);
endmodule

`define NUM_UNITS 5
module tb;
  integer i;
  reg [`NUM_UNITS-1:0] active_unit;
  des #(.NUM_UNITS(`NUM_UNITS)) u0(active_unit);
  initial begin
    active_unit = 1;
    #10 active_unit = 7;
    #10 active_unit = 8;
  end
endmodule

Notez que le signal active_unit a 3 bits pour stocker 5 unités au total.

Journal de Simulation

xcelium> run
active_unit = 001
active_unit = 111
active_unit = 000
xmsim: *W,RNQUIE: Simulation is complete.

Fonctions Mathématiques Réelles

Ces fonctions système acceptent des arguments real et retournent un nombre real.

Fonction Description
$ln(x) Logarithme naturel log(x)
$log10(x) Logarithme décimal log10(x)
$exp(x) Exponentielle de x (ex) où e=2.718281828...
$sqrt(x) Racine carrée de x
$pow(x, y) xy
$floor(x) Plancher de x
$ceil(x) Plafond de x
$sin(x) Sinus de x où x est en radians
$cos(x) Cosinus de x où x est en radians
$tan(x) Tangente de x où x est en radians
$asin(x) Arc-Sinus de x
$acos(x) Arc-Cosinus de x
$atan(x) Arc-tangente de x
$atan2(x, y) Arc-tangente de x/y
$hypot(x, y) Hypoténuse de x et y : sqrt(x2 + y2)
$sinh(x) Sinus hyperbolique de x
$cosh(x) Cosinus hyperbolique de x
$tanh(x) Tangente hyperbolique de x
$asinh(x) Arc-sinus hyperbolique de x
$acosh(x) Arc-cosinus hyperbolique de x
$atanh(x) Arc-tangente hyperbolique de x
module tb;
  real x, y;
  initial begin
    x = 10000;
    $display("$log10(%0.3f) = %0.3f", x, $log10(x));
    x = 1;
    $display("$ln(%0.3f) = %0.3f", x, $ln(x));
    x = 2;
    $display("$exp(%0.3f) = %0.3f", x, $exp(x));
    x = 25;
    $display("$sqrt(%0.3f) = %0.3f", x, $sqrt(x));
    x = 5; y = 3;
    $display("$pow(%0.3f, %0.3f) = %0.3f", x, y, $pow(x, y));
    x = 2.7813;
    $display("$floor(%0.3f) = %0.3f", x, $floor(x));
    x = 7.1111;
    $display("$ceil(%0.3f) = %0.3f", x, $ceil(x));
    x = 30 * (22.0/7.0) / 180; // convertir 30 degrés en radians
    $display("$sin(%0.3f) = %0.3f", x, $sin(x));
    x = 90 * (22.0/7.0) / 180;
    $display("$cos(%0.3f) = %0.3f", x, $cos(x));
    x = 45 * (22.0/7.0) / 180;
    $display("$tan(%0.3f) = %0.3f", x, $tan(x));
    x = 0.5;
    $display("$asin(%0.3f) = %0.3f rad, %0.3f deg", x, $asin(x), $asin(x) * 7.0/22.0 * 180);
    x = 0;
    $display("$acos(%0.3f) = %0.3f rad, %0.3f deg", x, $acos(x), $acos(x) * 7.0/22.0 * 180);
    x = 1;
    $display("$atan(%0.3f) = %0.3f rad, %f deg", x, $atan(x), $atan(x) * 7.0/22.0 * 180);
  end
endmodule

Journal de Simulation

xcelium> run
$log10(10000.000) = 4.000
$ln(1.000) = 0.000
$exp(2.000) = 7.389
$sqrt(25.000) = 5.000
$pow(5.000, 3.000) = 125.000
$floor(2.781) = 2.000
$ceil(7.111) = 8.000
$sin(0.524) = 0.500
$cos(1.571) = -0.001
$tan(0.786) = 1.001
$asin(0.500) = 0.524 rad, 29.988 deg
$acos(0.000) = 1.571 rad, 89.964 deg
$atan(1.000) = 0.785 rad, 44.981895 deg
xmsim: *W,RNQUIE: Simulation is complete.

Verilog

  1. Maîtriser Verilog : Tutoriel complet pour la conception de circuits numériques
  2. Maîtriser la concaténation Verilog : Guide pratique
  3. Comprendre les affectations Verilog : Types, Syntaxe et Bonnes Pratiques
  4. Verilog Blocking vs Non-Blocking : Différences Clés Expliquées
  5. Maîtriser les Fonctions Verilog pour une Conception RTL Efficace
  6. Comprendre les Tasks Verilog : Fonctions vs Tasks, Syntaxe et Utilisation
  7. Générateur d'Horloge Verilog : Guide de Conception et d'Implémentation
  8. Maîtriser Verilog $timeformat : Contrôle de Précision et d'Affichage
  9. Comprendre et Afficher les Timescales Verilog à Toute Portée