VIVADO Simulation

OP #4315480
Lesenswert?
• ▲
▼
Hallo,

also wenn ich schreibe
1
signal position: integer range 0 to 15:=0;
2

3
process begin
4
wait until rising_edge(btnC);
5
    led_vector <= (others => '0');
6
    position <= position +1;
7
    led_vector(position) <= '1';
8
end process;

dann würde ich erwarten, dass das ein 4-Bit Zähler ist der dann 
überläuft. Auf Hardware ist das auch so. In der Simulation nimmt 
position aber den Wert 16 (!) an.

ERROR: Index 16 out of bound 15 downto 0

Der Fehler betrifft die Zeile mit dem led_vector.

Dann habe ich das umgeschrieben nach:
1
if position < 15 then
2
    position <= position +1;
3
else
4
    position <= 0;
5
end if;

Und bekomme den Fehler immernoch. Was mache ich falsch?
Im Anhang alles was man braucht.

Edit:
Stimmt nicht, nach der Änderung kommt der Fehler nichtmehr sondern die 
Simulation zeigt das richtige Ergebnis. Wieso hab ich das nicht bemerkt? 
Anscheinend reicht es in VIVADO nicht das vhdl zu editieren, 
abzuspeichern und die Simulation neu zu starten, sondern man muss auch 
die Synthese vorher neu laufen lassen?! Liege ich da richtig?
Wieso die limitierte Integer nicht überläuft und sogar einen Wert 
ausserhalb des Bereichs annimmt verstehe ich trotzdem nicht. Mit 
unsigned passt alles. War das schon immer so dass Integers nicht 
übergelaufen sind? Wieso ist das so?

Vielen Dank!
Gustl
Angehängte Dateien:
(Firma: Schweigstill IT) Persönliche Seite #4315556
Lesenswert?
• ▲
▼
Gustl B. schrieb:
> Anscheinend reicht es in VIVADO nicht das vhdl zu editieren,
> abzuspeichern und die Simulation neu zu starten, sondern man muss auch
> die Synthese vorher neu laufen lassen?! Liege ich da richtig?

Ja, natürlich ist das so. Wie sollen sich denn sonst die Auswirkungen 
der Änderung bemerkbar machen? Auf Grund des unter Umständen sehr hohen 
Zeitbedarfs für eine erneute Synthese wird diese nicht automatisch 
angestoßen, sobald sich ein Quelltext geändert hat.
Gast #4315655
Lesenswert?
• ▲
▼
Gustl B. schrieb:
> War das schon immer so dass Integers nicht
> übergelaufen sind? Wieso ist das so?
Ja, das war schon immer so. Und das ist auch gut so.
Damit kann man in der Simulation genau solche Fehler entdecken, die in 
Hardware zu unerwartetem Verhalten führen.

Der Simulator kann gar nicht wissen, wie ein Integer auf Hardware 
abgebildet wird. Das mach ja ein anderes Tool: die Synthese.

Duke
OP #4316308
Lesenswert?
• ▲
▼
Ok, vielen Dank! Aber es geht weiter, wieder hab ich eine Simulation die 
nicht zur Hardwarebeschreibung passt, also das glaube ich zumindest mal 
wieder.

Ich habe eine PWM da wird ein 16 Bit Zähler hochgezählt. Mit den 16 
Switches auf dem Board soll man die PWM Weite einstellen können.

Die LEDs sind dann '1' wenn der mit den Switches eingestellte Wert 
kleinergleich dem Zählerwert ist. Auf Hardware funktioniert das auch, 
aber in der Simulation sind die LEDs immer auf '1'.

Ja es sind 3 LEDs, das ist eine RGB die ich einfach weiß dimmen möchte.

Weil die Zähler etwas länger sind muss man etwas mehr Zeit simulieren. 
Das ist auch gleich der nächste Punkt, dieser iSIM in VIVADO stürzt 
gerne mal ab wenn man da ein paar ms lang simulieren möchte. Und dann 
funktioniert auch der Rest vom VIVADO nichtmehr :-(

So, die VHDL sind im Anhang.

Vielen Dank!
Angehängte Dateien:
Gast #4316319
Lesenswert?
• ▲
▼
Gustl B. schrieb:
> Die LEDs sind dann '1' wenn der mit den Switches eingestellte Wert
> kleinergleich dem Zählerwert ist. Auf Hardware funktioniert das auch,
> aber in der Simulation sind die LEDs immer auf '1'.

Init:
signal pwm_zaehler: unsigned(15 downto 0):=(others => '0');
signal sw_tb : std_logic_vector(15 downto 0):=(others => '0');

Auführung:
RGB1_Red <= '1' when pwm_zaehler <= unsigned(sw);
RGB1_Green <= '1' when pwm_zaehler <= unsigned(sw);
RGB1_Blue <= '1' when pwm_zaehler <= unsigned(sw);

da zum Zeitpunkt 0 beide Werte 0 sind, sind folglich deine LEDs auf 1

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.