ceil(x) in Verilog

Gast #2339327
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
Persönliche Seite #2339879
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren