2014-09-15 5 views
7

kam ich in VHDL Programmierung über diese Aussagen und könnte den Unterschied zwischen den beiden Betreibern mod und remUnterschied zwischen Mod und Rem-Operatoren in VHDL?

9 mod 5 
    (-9) mod 5 
    9 mod (-5) 
    9 rem 5 
    (-9) rem 5 
    9 rem (-5) 
+0

http://computer-programming-forum.com/42-vhdl/6f9dce015f5ce94f.htm –

Antwort

18

Ein Weg, um die verschiedenen zu sehen, ist eine schnelle Simulation in einem Prüfstand laufen, für Beispiel nicht verstehen mit diesem einen Prozess wie:

process is 
begin 
    report " 9 mod 5 = " & integer'image(9 mod 5); 
    report " 9 rem 5 = " & integer'image(9 rem 5); 
    report " 9 mod (-5) = " & integer'image(9 mod (-5)); 
    report " 9 rem (-5) = " & integer'image(9 rem (-5)); 
    report "(-9) mod 5 = " & integer'image((-9) mod 5); 
    report "(-9) rem 5 = " & integer'image((-9) rem 5); 
    report "(-9) mod (-5) = " & integer'image((-9) mod (-5)); 
    report "(-9) rem (-5) = " & integer'image((-9) rem (-5)); 
    wait; 
end process; 

Es zeigt das Ergebnis zu sein:

# ** Note: 9 mod 5 = 4 
# ** Note: 9 rem 5 = 4 
# ** Note: 9 mod (-5) = -1 
# ** Note: 9 rem (-5) = 4 
# ** Note: (-9) mod 5 = 1 
# ** Note: (-9) rem 5 = -4 
# ** Note: (-9) mod (-5) = -4 
# ** Note: (-9) rem (-5) = -4 

hat eine ausführliche Beschreibung, die Regeln einschließlich:

  • mod hat Zeichen der Divisor, so n in a mod n
  • rem hat Zeichen der Dividende, so a in a rem n

Der mod Operator gibt der Rest für eine Division, die abgerundet wird (floored Division), so a = floor_div(a, n) * n + (a mod n). Der Vorteil ist, dass a mod n ein wiederholter Sägezahngraph ist, wenn a sogar durch Null ansteigt, was in einigen Berechnungen wichtig ist.

Der Operator rem gibt den Rest für die reguläre Ganzzahldivision a/n, die in Richtung 0 (abgeschnittene Division) rundet, also a = (a/n) * n + (a rem n).

0
For equal sign: 
9/5=-9/-5=1.8 gets 1 
9 mod 5 = 9 rem 5 
-9 mod -5 = -9 rem -5 
----------------------------------------- 
For unequal signs: 
9/-5 = -9/5 = -1.8 
In "mod" operator : -1.8 gets -2 
In "rem" operator : -1.8 gets -1 
---------------------------------------- 
example1: (9,-5) 
9 = (-5*-2)-1 then: (9 mod -5) = -1 
9 = (-5*-1)+4 then: (9 rem -5) = +4 
---------------------------------------- 
example2: (-9,5) 
-9 = (5*-2)+1 then: (-9 mod 5) = +1 
-9 = (5*-1)-4 then: (-9 rem 5) = -4 
---------------------------------------- 
example3: (-9,-5) 
-9 = (-5*1)-4 then: (-9 mod -5) = -4 
-9 = (-5*1)-4 then: (-9 rem -5) = -4 
---------------------------------------- 
example4: (9,5) 
9 = (5*1)+4 then: (9 mod 5) = +4 
9 = (5*1)+4 then: (9 rem 5) = +4