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


von Andre Z. (slamy)


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é

von Kest (Gast)


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

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Gibts den irgenwelche Warnungen?

von Ottmar (Gast)


Lesenswert?

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

von Morin (Gast)


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).

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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
1
integer range 0 to 4

von Andre Z. (slamy)


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.

von Morin (Gast)


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...)

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
Noch kein Account? Hier anmelden.