In VHDL gibt es ja den Datentyp time kleinste Einheit ist hier 1fs. Was würde eine zuweisung von x = 2,7fs + 2,7fs bewirken. Wird vor dem rechnen oder danach gerundet? Wird überhaupt gerundet oder einfach Stellen abgeschnitten. Ich würde ja rechnen und dann runden als richtig empfinden. x = 2,7fs+2,7fs = 5fs. richtig?
Ja, du würdest erst rechnen und dann runden aber bedenke, du kennst keine Zahlen kleiner als 1fs, d.h. du kennst die erste Nachkommastelle von fs nicht. Damit siehst du bei 2.7 fs auch nicht die .7. Somit kannst du hier nur 2+2 rechnen. Vorstellen kannst du dir das etwa so: Die kleinste Stelle, die du kennst ist also 10^-15. .7 ist die Stelle 10^-16, die kennst du aber nicht mehr, bei dir ist ja bei -15 Schluss ;). Fazit: Runden durch abschneiden wird hier der Fall sein.
Versuch macht kluch:
1 | entity fs_test is |
2 | end entity fs_test; |
3 | |
4 | architecture test of fs_test is |
5 | |
6 | constant short_time_1 : time := 2.7 fs; |
7 | constant short_time_2 : time := 2.7 fs; |
8 | |
9 | constant long_time : time := short_time_1 + short_time_2; |
10 | |
11 | begin
|
12 | |
13 | process
|
14 | begin
|
15 | report "short_time_1 : " & time'image( short_time_1) severity note; |
16 | report "short_time_2 : " & time'image( short_time_2) severity note; |
17 | report "long_time : " & time'image( long_time ) severity note; |
18 | wait; |
19 | end process; |
20 | |
21 | end; |
1 | vlib work |
2 | vcom fs_test.vhd |
3 | Model Technology ModelSim PE vcom 10.0b Compiler 2011.05 May 5 2011 |
4 | -- Loading package STANDARD |
5 | -- Compiling entity fs_test |
6 | -- Compiling architecture test of fs_test |
Da hätte ich ja gedacht, das die Zeit in fs was ganzzahliges sein muß, aber gut.
1 | vsim fs_test |
2 | [...] |
3 | # Loading std.standard |
4 | # Loading work.fs_test(test) |
5 | # ** Warning: (vsim-3479) Time unit 'fs' is less than the simulator resolution (1ps). |
6 | # Time: 0 ps Iteration: 0 Instance: /fs_test File: fs_test.vhd |
7 | # |
8 | run |
9 | run |
10 | # ** Note: short_time_1 : 0 ps |
11 | # Time: 0 ps Iteration: 0 Instance: /fs_test |
12 | # ** Note: short_time_2 : 0 ps |
13 | # Time: 0 ps Iteration: 0 Instance: /fs_test |
14 | # ** Note: long_time : 0 ps |
15 | # Time: 0 ps Iteration: 0 Instance: /fs_test |
16 | exit |
17 | exit |
Versuch 2, mit feinerer Zeitauflösung:
1 | vsim -t fs fs_test |
2 | [...] |
3 | # Loading std.standard |
4 | # Loading work.fs_test(test) |
5 | # |
6 | run |
7 | run |
8 | # ** Note: short_time_1 : 3 fs |
9 | # Time: 0 fs Iteration: 0 Instance: /fs_test |
10 | # ** Note: short_time_2 : 3 fs |
11 | # Time: 0 fs Iteration: 0 Instance: /fs_test |
12 | # ** Note: long_time : 6 fs |
13 | # Time: 0 fs Iteration: 0 Instance: /fs_test |
14 | exit |
15 | exit |
Bei Modelsim wird also aufgerundet. Duke
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.