Marius S. schrieb:
> Mein bit_ctr ist dann leider zu klein.
Am einfachsten machst ma einen Zähler sowieso als eingeschränkten
Integer (solange der Zähler nicht weiter als bis 2.147.483.647 zählen
muss). Dann spart man sich auch dieses Rumgewürge beim Zurücksetzen des
Zählers.
Und das "Ausrechnen" des Zähler-Wertebereichs ist, naja, sagen wir mal:
unnötig
1 | signal bit_ctr : integer range 0 to RegWidth-1;
|
Einfacher und klarer geht es kaum...
Marius S. schrieb:
> Ein anderes Problem mit Integern habe ich, wenn ich z.B. einen 4-Bit
> Unsigned habe, den ich in einen Integer konvertieren will, der nur einen
> Range von 0 bis 12 hat. Jetzt kann es unter Umständen mal vorkommen,
> dass ein 4-Bit Wert >12 verarbeitet wird (was aber für die Funktion egal
> ist). Da gibt die Simulation in ModelSim natürlich auch einen Fehler
> aus.
Ist ja auch richtig: du selber hast den Wertebereich so definiert und
für richtig befunden. Der Simulator zeigt dir nur, dass da etwas anders
läuft als du dir gedacht hast. Er arbeitet nicht gegen, sondern für
dich... ;-)
> Jetzt kann es unter Umständen mal vorkommen, dass ein 4-Bit Wert >12
> verarbeitet wird (was aber für die Funktion egal ist).
Dann ist der Wertebereich des Integers falsch definiert. Wenn es
passieren kann aber egal ist und keine Fehlfunktion auftreten
kann, dann musst du den Wertebereich schon so definieren, dass auch kein
Fehler angemeckert wird.
Aber es gibt eben Fälle, wo es nicht egal ist, wenn ein eingeschränkter
Wertebereich verlassen wird, weil z.B. abhängig von diesem Wert eine FSM
eine Weiterschltung vornimmt...
> Außerdem passiert es schnell mal, dass man einen Integer z.B. mit Range
> "0 to 32" beschreibt, obwohl man eigentlich Range "0 to 31" meinte (weil
> evtl. nicht immer sofort 100% klar ist wie viel Bits für den Integer
> drauf gehen).
Halb so schlimm: der Synthesizer schmeißt dir das unnötige Bit raus und
weist dich darauf hin.
> Also irgendwie mag ich Integer nicht so gerne
Ich nehme für Zähler&Co nur wegen des eingeschränkten Wertebereichs bei
mehr als 31 Bit den Datentyp unsigned. Und das ist selten der Fall...