Forum: FPGA, VHDL & Co. Konstantendivision


von Paul P. (pommespaule)


Lesenswert?

Hallo,
Ich möchte in meinem VHDL Code beim Synthetisieren ein paar Konstanten 
aus anderen Konstanten berechnen lassen. Vorgestellt habe ich mir das in 
etwa so:
1
LIBRARY IEEE;
2
USE IEEE.Std_Logic_1164.ALL;
3
USE ieee.numeric_std.all;
4
USE ieee.math_real.ceil;
5
6
ENTITY deglitch IS    
7
GENERIC
8
  ( t_clk : natural := 17;                      
9
    t_wait: natural := 33                      
10
);
11
12
ARCHITECTURE Behavioral OF deglitch IS
13
constant top_value : integer := integer(ceil(t_wait/t_clk));
14
15
BEGIN  
16
  PROCESS (clk)
17
  BEGIN
18
...

Quartus meint aber leider: can't determine definition of operator ""/""
Wie macht man das richtig?

Danke und Grüße
Paul

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Paul P. schrieb:
> Wie macht man das richtig?
1
In the "math_real" package you will find "ceil" and "floor" functions 
2
wichh take in REAL numbers and return real numbers and return a REAL number
Du verwendest aber zwei NATURAL Integer. Das sind keine REAL Zahlen, und 
zudem solltest du auch eine REAL Division bekanntgeben, wenn du zwei 
REAL Zahlen dividieren willst. Denn es mach absolut keinen Sinn, zwei 
Integerzahlen zu dividieren, und das Ergebnis nach "oben" zu runden, 
weil das Ergebnis einer Integer-Division sowieso schon auf ,0000 
endet...

Sieh dir mal an, wie ich da rumcaste und konvertiere:
http://www.lothar-miller.de/s9y/archives/72-Breite-eines-Vektors-berechnen-log2.html

Kurz: in VHDL geht eine Typumwandlung nicht wie bei C "so irgendwie 
implizit halbautomatisch", sondern du musst dem Synthesizer genau den 
Typ angeben oder umwandeln.

Und falls dein Google nicht richtig funktioniert, hier der erste Treffer 
bei der Suche nach "math_real.ceil":
http://objectmix.com/vhdl/190883-ceil-floor.html

von Kartoffelmuszüchter (Gast)


Lesenswert?

Lothar Miller schrieb:
> 
http://www.lothar-miller.de/s9y/archives/72-Breite-eines-Vektors-berechnen-log2.html

>couldn't connect to...
>The site may be busy or the web server may be down.

Nanu?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Kartoffelmuszüchter schrieb:
>>The site may be busy or the web server may be down.
> Nanu?
Bei mir gehts, probiers einfach nochmal, ist so ein Billigserver...  ;-)

von Paul P. (pommespaule)


Lesenswert?

1
LIBRARY IEEE;
2
USE IEEE.Std_Logic_1164.ALL;
3
USE ieee.numeric_std.all;
4
USE ieee.math_real.ceil;
5
6
ENTITY deglitch IS    
7
GENERIC
8
  ( t_clk : real := 17.66;                      
9
    t_wait: real := 33.33                      
10
);
11
12
ARCHITECTURE Behavioral OF deglitch IS
13
constant top_value : integer := integer(ceil(t_wait/t_clk));
14
15
BEGIN  
16
  PROCESS (clk)
17
  BEGIN
18
...
so funktioniert es tatsächlich.
Habe die Fehlermeldung auf den Divisions-Operator bezogen (es 
dementsprechend auch mit zwei unsigned versucht, was aber nichts 
gebracht hat) und daher nicht nach der Definition von ceil gesucht.
Vielen Dank für die Hilfe!

von Kartoffelmuszüchter (Gast)


Lesenswert?

Lothar Miller schrieb:
> Kartoffelmuszüchter schrieb:
>>>The site may be busy or the web server may be down.
>> Nanu?
> Bei mir gehts, probiers einfach nochmal, ist so ein Billigserver...  ;-)

Geht wieder :-)

von Tobit (Gast)


Lesenswert?

Wäre auch ein Schaden für die deutsche Industrie, wenn die ganzen 
Studenten, die zur Zeit studieren, ihre Hausaufgaben nicht mehr machen 
könnten, nur weil der Miller-Server down ist.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Du überschätzt offenbar meine Stellung im deutschen Bildungswesen... ;-)

von J. S. (engineer) Benutzerseite


Lesenswert?

Es gibt ja auch noch das Wiki und die uc-Webseite.:-)
Einfache Division in VHDL und ASM

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.