Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Verilog

Verilog Math-Funktionen

Verilog-Mathematikfunktionen können anstelle von konstanten Ausdrücken verwendet werden und unterstützen sowohl Integer und echt Mathematik.

Ganzzahlige mathematische Funktionen

Die Funktion $clog2 gibt die Obergrenze von log2 zurück des gegebenen Arguments. Dies wird normalerweise verwendet, um die minimale Breite zu berechnen, die erforderlich ist, um einen Speicher einer bestimmten Größe zu adressieren.

Wenn das Design beispielsweise 7 parallele Addierer hat, dann ist die Mindestanzahl von Bits, die erforderlich ist, um alle 7 Addierer darzustellen, $clog2 von 7 ergibt 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

  

Beachten Sie, dass das Signal active_unit 3 Bits hat, um insgesamt 5 Einheiten zu speichern.

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

Echte mathematische Funktionen

Diese Systemfunktionen akzeptieren real Argumente und geben ein Real zurück Nummer.

Funktion Beschreibung
$ln(x) Natürlicher Logarithmus log(x)
$log10(x) Dezimallogarithmus log10(x)
exp(x) Exponential von x (e x ) wobei e=2,718281828...
Quadrat(x) Quadratwurzel von x
$pow(x, y) x y
$floor(x) Etage x
$ceil(x) Decke x
$sin(x) Sinus von x, wobei x im Bogenmaß angegeben ist
$cos(x) Kosinus von x, wobei x im Bogenmaß angegeben ist
$tan(x) Tangens von x, wobei x im Bogenmaß angegeben ist
$asin(x) Arc-Sinus von x
$acos(x) Arc-Cosinus von x
$atan(x) Arkustangens von x
$atan2(x, y) Arkustangens von x/y
$hypot(x, y) Hypotenuse von x und y :sqrt(x x + j j )
$sinh(x) Hyperbolischer Sinus von x
$cosh(x) Hyperbolischer Kosinus von x
$tanh(x) Hyperbolic-Tangens von x
$asinh(x) Bogen-hyperbolischer Sinus von x
$acosh(x) Arc-hyperbolischer Kosinus von x
$atanh(x) Bogen-hyperbolischer Tangens von 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


  
Simulationsprotokoll
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. Verilog-Tutorial
  2. Verilog-Verkettung
  3. Verilog-Aufgaben
  4. Verilog-Blockierung und Nicht-Blockierung
  5. Verilog-Funktionen
  6. Verilog-Aufgabe
  7. Verilog-Taktgenerator
  8. Verilog-Zeitformat
  9. Verilog-Zeitskalenumfang
  10. Verilog-Datei-IO-Operationen