Syntaxfrage

mProg
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 147
Registriert: 25. Apr 2015 00:10

Syntaxfrage

Beitrag von mProg » 18. Feb 2017 16:10

Ich bin im BSV by Example auf diesem Code gestoßen:

Code: Alles auswählen

int maxInt = unpack({ 1'b1, 0 }); // a local constant
if (a != maxInt)
return a + 1;
else
return a;
endfunction
Es geht um

Code: Alles auswählen

{ 1'b1, 0 }
. Wie es im Kommentar steht soll es das maximale Wert geben. Jedoch konnte ich durch googeln und... nicht rausfinden wie der Syntax funktioniert. Ich weiß nur, dass das b für Binär steht; das erste 1 bedeutet ja, dass er Wert nur ein Bit lang ist. Aber was bedeutet der andere 0 und wie kommt daraus der maximal Wert?

Fabian Czappa
Mausschubser
Mausschubser
Beiträge: 44
Registriert: 10. Mai 2015 11:45

Re: Syntaxfrage

Beitrag von Fabian Czappa » 18. Feb 2017 16:25

Hay,

ich nehme an, das ist die gleiche Syntax wie SystemVerilog:

Code: Alles auswählen

Bit#(4) a = 'b0000;
Bit#(4) b = 'b1111;
Bit#(8) c = {a, b}; // 0000 1111
Also konkateniert dieser Operator beide Bitsequenzen. Das Beispiel wäre also 1000 (0000)⁷. Das ist allerdings nicht der maximale Wert, sondern der minimale Wert eines Ints. Was der Code eigentlich machen soll, bleibt mir schleierhaft. Richtig wäre für mich

Code: Alles auswählen

int maxInt = unpack({ 1'b0, 1});
Viele Grüße
Fabian

mProg
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 147
Registriert: 25. Apr 2015 00:10

Re: Syntaxfrage

Beitrag von mProg » 18. Feb 2017 19:06

Fabian Czappa hat geschrieben:Richtig wäre für mich

Code: Alles auswählen

int maxInt = unpack({ 1'b0, 1});
Viele Grüße
Fabian
Dieser Code gibt 1 zurück!?

Fabian Czappa
Mausschubser
Mausschubser
Beiträge: 44
Registriert: 10. Mai 2015 11:45

Re: Syntaxfrage

Beitrag von Fabian Czappa » 18. Feb 2017 19:12

Tut er? Hast du es getestet? Ich hatte erwartet, der gibt 0111 (1111)⁷ zurück.

mProg
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 147
Registriert: 25. Apr 2015 00:10

Re: Syntaxfrage

Beitrag von mProg » 18. Feb 2017 19:23

Fabian Czappa hat geschrieben:Tut er? Hast du es getestet? Ich hatte erwartet, der gibt 0111 (1111)⁷ zurück.
Ja, habe ich. Deshalb meine erste Frage wieder, wie dieser Syntax funktioniert

999
Windoof-User
Windoof-User
Beiträge: 27
Registriert: 24. Okt 2016 18:21

Re: Syntaxfrage

Beitrag von 999 » 18. Feb 2017 19:34

Code: Alles auswählen

int maxInt = unpack({ 1'b0, '1});
sollte zum maximalen Wert führen (man beachte das '1)

mProg
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 147
Registriert: 25. Apr 2015 00:10

Re: Syntaxfrage

Beitrag von mProg » 18. Feb 2017 19:38

999 hat geschrieben:

Code: Alles auswählen

int maxInt = unpack({ 1'b0, '1});
sollte zum maximalen Wert führen (man beachte das '1)
Also ich habe

Code: Alles auswählen

int maxInt = unpack({ 1'b0, '1});
eingegeben und es führt zu minimalsten Wert: -2147483648

999
Windoof-User
Windoof-User
Beiträge: 27
Registriert: 24. Okt 2016 18:21

Re: Syntaxfrage

Beitrag von 999 » 18. Feb 2017 19:39

Dann verstehe ich die Syntax auch nicht :D

Fabian Czappa
Mausschubser
Mausschubser
Beiträge: 44
Registriert: 10. Mai 2015 11:45

Re: Syntaxfrage

Beitrag von Fabian Czappa » 18. Feb 2017 19:55

Im BSV-Reference-Guide empfiehlt sich Kapitel 9.4 Bit concatenation and selection, auch wenn ich daraus nicht ganz schlau werde, wie das aufgefüllt wird :cry:

paprikawuerzung
Mausschubser
Mausschubser
Beiträge: 80
Registriert: 23. Mär 2014 23:33

Re: Syntaxfrage

Beitrag von paprikawuerzung » 18. Feb 2017 19:58

Bei mir kommt das raus:

Code: Alles auswählen

2147483647
https://de.wikipedia.org/wiki/2147483647
Dateianhänge
Screen Shot 2017-02-18 at 19.57.02.png
Screen Shot 2017-02-18 at 19.57.02.png (42.18 KiB) 820 mal betrachtet

mProg
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 147
Registriert: 25. Apr 2015 00:10

Re: Syntaxfrage

Beitrag von mProg » 18. Feb 2017 20:13

999 hat geschrieben:

Code: Alles auswählen

int maxInt = unpack({ 1'b0, '1});
sollte zum maximalen Wert führen (man beachte das '1)
Sorry. Ja war doch richtig. :oops: Kannst mir jetzt sagen, was der Teil '1 bedeutet und was es macht? Bedeutet '1, dass alle übrigen Bits mit 1 gefüllt werden?

paprikawuerzung
Mausschubser
Mausschubser
Beiträge: 80
Registriert: 23. Mär 2014 23:33

Re: Syntaxfrage

Beitrag von paprikawuerzung » 18. Feb 2017 20:21

Naja, so Code zu benutzen ist bisschen arg hacky. Wobei ich mich zu wenig mit BSV auskenne, als dass ich das bewerten könnte.

Code: Alles auswählen

int a = unpack('1)
Gibt -1 aus. (Was ich auch nicht verstehe!) Im Zweierkomplement ist die Darstellung von -1 einfach nur Einsen (1111 ... 1111).

Bei 1'b0 wird die Breite angegeben. Beim zweiten Teil ('1) ist keine Bitbreite angegeben. Also wird wahrscheinlich die 1 dann 31 mal wiederholt, sodass am Ende (mit 0 vorangestellt) binär rauskommt: 0111 1111 .... 1111. Was im Zweierkomplement die größte darstellbare positve 32bit Zahl ist!
Zuletzt geändert von paprikawuerzung am 18. Feb 2017 20:30, insgesamt 1-mal geändert.

Fabian Czappa
Mausschubser
Mausschubser
Beiträge: 44
Registriert: 10. Mai 2015 11:45

Re: Syntaxfrage

Beitrag von Fabian Czappa » 18. Feb 2017 20:28

Wir warten einfach noch einen Moment, dann guckt sich Jaco das an. Er weiß das sicher alles und wird das nochmal klären :mrgreen:
Zuletzt geändert von Fabian Czappa am 18. Feb 2017 20:59, insgesamt 1-mal geändert.

headhumper
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 118
Registriert: 13. Aug 2009 21:25

Re: Syntaxfrage

Beitrag von headhumper » 18. Feb 2017 20:38

paprikawuerzung hat geschrieben:Gibt -1 aus. (Was ich auch nicht verstehe!) Im Zweierkomplement ist die Darstellung von -1 einfach nur Einsen (1111 ... 1111).
Wieso, das passt doch? '1 heißt "alles mit Einsen füllen". Und das ist als signed int interpretiert dann eben -1.

paprikawuerzung
Mausschubser
Mausschubser
Beiträge: 80
Registriert: 23. Mär 2014 23:33

Re: Syntaxfrage

Beitrag von paprikawuerzung » 18. Feb 2017 20:39

Ja, dachte ich mir dann auch. Habe das "Was ich auch nicht verstehe" bloß nicht rausgelöscht, weil es wichtig ist, Fehler eingestehen zu können :!:

Antworten

Zurück zu „Archiv“