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

Fonctions mathématiques Verilog

Les fonctions mathématiques Verilog peuvent être utilisées à la place des expressions constantes et prennent en charge à la fois entier et réel mathématiques.

Fonctions mathématiques entières

La fonction $clog2 renvoie le plafond de log2 de l'argument donné. Ceci est généralement utilisé pour calculer la largeur minimale requise pour adresser une mémoire de taille donnée.

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

  
  
module des 
  #(parameter NUM_UNITS = 7) 
  
  // Use of this system function helps to reduce the 
  // number of input wires to this 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 un total de 5 unités.

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 réel arguments et renvoie un réel numéro.

Fonction Description
$ln(x) Logarithme naturel log(x)
$log10(x) Logarithme décimal log10(x)
exp(x) Exponentielle de x (e x ) où e=2.718281828...
carré(x) Racine carrée de x
$pow(x, y) x y
$floor(x) Étage x
$plafond(x) Plafond 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(x x + a a )
$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-hyperbolique tangente 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;   // convert 30 degrees to 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. Tutoriel Verilog
  2. Concaténation Verilog
  3. Affectations Verilog
  4. Verilog bloquant et non bloquant
  5. Fonctions Verilog
  6. Tâche Verilog
  7. Générateur d'horloge Verilog
  8. Format d'heure Verilog
  9. Portée de l'échelle de temps Verilog