Forum: FPGA, VHDL & Co. ceil(x) in Verilog


von faris (Gast)


Lesenswert?

Hallo ,

ich habe mal ein Programm in SystemC geschrieben , und will jetzt meine 
Module in Verilog programieren, aber eine Funktion die ich nicht weiss , 
wie man das macht, und zwar diese :

x = ceil((id % dim)/2), kann jemand mir helfen wie ich ceil(x)  in 
verilog schreiben kann .

ich freu mich auf einen Antwort .

danke

LG

Faris

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

faris schrieb:
> x = ceil((id % dim)/2), kann jemand mir helfen wie ich ceil(x)  in
> verilog schreiben kann .

In SystemVerilog 2009 sieht das dann so aus:
1
x = $ceil((id % dim)/2);
Laut LRM verhält sich dieser system task genau so, wie in der C math 
library definiert.

Wenn Du mit Verilog 2005 zurecht kommen musst, dann ist das schon etwas 
aufwändiger, da man beim Konvertieren von real nach integer u.U. den 
Wertebereich einschränkt. Falls jedoch id und dim ganzzahlig sind, 
kannst Du Dir einen workaround bauen (ungetestet):
1
function integer ceil_of_half (integer x);
2
    begin
3
        if (x & 1) // 0.5
4
          ceil_of_half = x/2 + 1;
5
        else       // 0.0
6
          ceil_of_half = x/2;
7
    end
8
endfunction
9
10
x = ceil_of_half(id % dim);
Du machst Dir zunutze, dass das LSB des Arguments der späteren 
Nachkommastelle (0.5) entspricht. Nach der Halbierung rundest Du dann 
auf die nächst größere Ganzzahl. Der Fall für negative Zahlen bleibt dem 
Leser als Übung.

--
Marcus

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.