mikrocontroller.net

Forum: FPGA, VHDL & Co. Xilinx keep-constraint versagt


Autor: Samuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich nutze den folgenden Konstrukt, um das Verschwinden der Signale 
während der Synthese zu verhindern:

architecture arch of adc_reader is

signal ADC_D1 : std_logic_vector(13 downto 0) := (others => '1');
signal ADC_D2 : std_logic_vector(13 downto 0) := (others => '1');
signal ADC_D3 : std_logic_vector(13 downto 0) := (others => '1');
signal ADC1_TM : std_logic_vector(27 downto 0) := (others => '1');
signal ADC_OF : std_logic_vector(13 downto 0) := "000...1"; -- 923
signal ADC_GN : std_logic_vector(13 downto 0) := "010...1"; -- 4123


attribute keep : string;
attribute keep of ADC_D1: signal is "true";
attribute keep of ADC_D2: signal is "true";
attribute keep of ADC_D3: signal is "true";

begin

Trotzdem findet ChipsScope die Adresse 13 des ADC-Wertes nicht.
Woran kann das liegen?

Wird das "keep" nochmal irgendwo freigeschaltet oder gar anderweitig 
überschrieben?

Es ist mir auch nicht ganz klar, warum das ADC3(13) überhaupt 
verschwindet! Ich mache folgendes:
ADC1_D1 <= ADC1_INPUT;               -- read io
ADC1_D2 <= ADC1_D1 - ADC1_OF;        -- remove offset
ADC1_TM <= ADC1_D2 * ADC1_GN;        -- gain correction
ADC1_D3 <= ADC1_TM(27 downto 14);

Bis zum Offset geht es korrekt - auch mit negativen Werten. Der 
Gain-Wert ADC1_GN liegt bei ungefähr 4000-4200 (4096 ist eine "x 1.00"). 
Er ist statisch und immer positiv , daher fällt das Vorzeichen-bit wohl 
weg, denke ich.

Ich habe den vollen Vektor genommen, um zu sehen, was rauskommt. 
Eigentlich will ich aber etwas Anderes:

Wenn ich es z.B. so schreibe ...
ADC1_D3 <= ADC1_TM(27) & ADC1_TM(24 downto 12);

... funktioniert es mit der Compilation, rechnet aber wider Erwarten 
nicht korrekt. Der End-Wert ist manchmal falsch, obwohl eigentlich 2 
Bits wegen der Vorzeichproblematik fehlen sollten. Ich habe es in Excel 
durchprobiert und von der Lage der Bits ist das das richtige slice: 12 
Bit weg entsprichtr "geteilt durch 4096".

Hat wer eine Idee?

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

Bewertung
0 lesenswert
nicht lesenswert
> signal ADC_D1 : std_logic_vector(13 downto 0) := (others => '1');
Man rechnet nicht mit Vektoren. Nimm die numeric_std Lib und die darin 
befindlichen Datentypen signed und unsigned.

> Wird das "keep" nochmal irgendwo freigeschaltet oder gar anderweitig
> überschrieben?
Probier doch mal mit einem nicht angekreuzten: Syntheseoptionen --> 
Xilinx Specific Options --> Equivalent Register Removal

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit "keep" habe ich keine Erfahrung, aber der slice, den Du verwendest, 
müsste stimmmen. Sehe ich auch so.

Autor: Samuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie teile ich denn dann - ohne mit Vektoren zu rechnen - das Ergebnis 
herunter? Ich will ja nicht den voll Multiplier-output haben.

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

Bewertung
0 lesenswert
nicht lesenswert
Samuel schrieb:
> Wie teile ich denn dann - ohne mit Vektoren zu rechnen - das Ergebnis
> herunter?
Du kannst jeden Wert ohne weiteres durch irgendwelche Zweierpotenzen 
teilen. Das ist ja nichts anderes als deine "versetzte" Zuweisung:

ADC1_D3 <= ADC1_TM(27 downto 14);
entspricht:
ADC1_D3 <= ADC1_TM/16384;

Autor: Haro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn keep nicht reicht, dann die checkbox "TRIM UNCONNECTED SIGNALS" aus 
der Synthese / Implementierung "unchecken".

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.