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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.