mikrocontroller.net

Forum: FPGA, VHDL & Co. Xilinx ISE FPGA Merkwürdiger Register Bug


Autor: Andre Z. (slamy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey Leute. Ich habe ein relativ skuriles Problem.

Ich hab ein Register in einem Spartan3, welches Werte von 0 bis 4 
speichern soll.

Logischerweise würde in dem Moment ein reg [3:0] reichen.

Tut es aber nicht...
Nach der Synthese spinnt das gesamte System und selbst andere Module, 
die nichts damit zu tun haben, funktionieren nicht mehr.
Erst wenn ich es auf [4:0] verbreitere, funktioniert das Design wieder.

Könnt ihr euch das erklären ?
Ist das ein Bug im Xst ?
Oder übersehe ich eine Kleinigkeit ?

Vielleicht ist es unwichtig, aber dieses Register ist auch ein Index für 
ein Array.


André

Autor: Kest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich wette mit Dir, dass das kein Bug ist, sondern dass Du was übersehen 
hast! :-) Lass alles ruhen, entspanne Dich und erst dann schau noch mal 
drüber -- man braucht manchmal Abstand zum ganzen System -- es hilft 
ungemein ;-)

Grüße,
Kest

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibts den irgenwelche Warnungen?

Autor: Ottmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit dem zusätzlichen bit riecht irgendwie nach einem problem mit 
signed zahlen?? Machs du hier irgendwas in der Richtung?

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich hab ein Register in einem Spartan3, welches Werte von 0 bis 4
> speichern soll.
>
> Logischerweise würde in dem Moment ein reg [3:0] reichen.

Dafür würde auch ein reg [2:0] reichen ;) Das würde ich mal als ersten 
Ansatzpunkt für Überlegungen nehmen.

Wird das Register auf irgendeine Art auf einen gültigen Wert 
initialisiert? Es kann z.B. sein, dass bei einem reg[3:0] Optimierungen 
benutzt werden (und bei einem reg[4:0] nicht mehr), welche dazu führen, 
dass der Startwert des Registers nicht in der Wertemenge liegt, die man 
sich für [3:0] vorstellt. Beispiel wäre die Aufweitung von 
[3:0]/Binärkodierung auf [15:0]/One-Hot (wobei dann [4:0]/binär -> 
[31:0]/One-Hot nicht mehr gemacht würde, weil es zu viele Register 
verbraucht).

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> aber dieses Register ist auch ein Index für ein Array.
Welche Konvertierungen verwendest du?
Verwendest du NUMERIC_STD und/oder STD_LOGIC_ARITH + STD_LOGIC_UNSIGNED?

> aber dieses Register ist auch ein Index für ein Array.
Warum nimmst du dann nicht gleich einen
integer range 0 to 4

Autor: Andre Z. (slamy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Das mit dem zusätzlichen bit riecht irgendwie nach einem problem mit
>signed zahlen?? Machs du hier irgendwas in der Richtung?
Nicht explizit. Dürfte also unsigned sein.

>integer range 0 to 4
Ist das nicht VHDL ?


>Welche Konvertierungen verwendest du?
>Verwendest du NUMERIC_STD und/oder STD_LOGIC_ARITH + STD_LOGIC_UNSIGNED?
Solche Konfigurationen sind mir gar nicht bekannt.
Es ist ein ganz normales Register.


>Gibts den irgenwelche Warnungen?
Leider nichts, was damit in Verbindung stehen könnte...

Achja....
Das Problem existiert auch, wenn das Register größer ist... z.B. reg 
[9:0].
Und Ich kann es mir immer noch nicht erklären.

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Nicht explizit. Dürfte also unsigned sein.

Soweit ich mich erinnere, ja. Könnte man mal nachsehen, aber 
signed/unsigned ist wahrscheinlich nicht der Grund, da es mit größeren 
Registerbreiten wieder geht.

> Ist das nicht VHDL ?

Die anderen haben übersehen, dass es um Verilog geht ;)

> Solche Konfigurationen sind mir gar nicht bekannt.
> Es ist ein ganz normales Register.

Das ist VHDL-Kram. Trifft bei dir nicht zu.

> Das Problem existiert auch, wenn das Register größer ist... z.B. reg
> [9:0].

Gelöst ist es also bisher nur mit genau [3:0], nicht mehr und nicht 
weniger? Das schließt wohl beide Ansätze aus, sowohl signed/unsigned als 
auch Verwurschtelungen bei der Synthese.

Wie sieht es denn mit dem Timing aus? Schau dir mal den Synthese-Report 
an, ob das Design vllt. zu langsam für deinen Takt ist.

Ansonsten komme ich nur noch auf die Holzhammer-Methode: Kopie vom 
Design machen, und Stück für Stück Teile wegnehmen, um das Problem zu 
isolieren. Und ja, ich weiß wie schwer das sein kann ;) (besonders wenn 
das Design alle seine Teile braucht, um seine Funktion auszuführen...)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.