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