mikrocontroller.net

Forum: FPGA, VHDL & Co. Constrains im .xdc per generate erzeugen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Gustl B. (-gb-)


Bewertung
0 lesenswert
nicht lesenswert
Moin,

ist es möglich im xdc File irgendwie Constraints für viele ähnliche 
Signale per Generate oder mit Loop zu erzeugen?

Ich muss von einer Taktdomäne in eine andere und zwar mit vielen Bits. 
Das ist unkritisch, es gibt ein "start_DAC" Signal, das wird in der 
Zildomäne eingetaktet. Und wenn das dort als gesetzt erkannt wird ändern 
sich die vielen Bits in der Startdomäne nicht mehr. Ich will also viele 
false Path setzen.

Das ist ein
start_DAC: in std_logic;
data_DAC: in std_logic_vector(20*8-1 downto 0);
Eingang der Komponente.

Und der wird dann wenn das einsynchronisierte in 20 Register je 8 Bit 
geschrieben. Die sehen so aus:
type Rom20x1Byte is array (0 to 19) of std_logic_vector(7 downto 0);
signal DAC_Regs: Rom20x1Byte:=(others => x"00");

Und so wird das gemacht:
if start_DAC_sr = "01" then
   for I in 0 to 19 loop
      DAC_Regs(I) <= data_DAC(I*8+7 downto I*8);
   end loop;
end if;

Der Befehl wäre z. B. für eines der 20*8 Bits:

set_false_path -from [get_pins {AD9747_data_DAC_reg[49]/C}] -to 
[get_pins {AD9747_DAC/DAC_Regs_reg[6][1]/D}]

Ich würde da gerne sowas verwenden wie:

for I in 0 to 20*8-1 loop
   set_false_path -from [get_pins {AD9747_data_DAC_reg[I]/C}] -to 
[get_pins {AD9747_DAC/DAC_Regs_reg[I/8][I%8]/D}]
end loop;

Gibt es da eine Lösung?

von berndl (Gast)


Bewertung
0 lesenswert
nicht lesenswert
versuchs mal mit den Wildcards '*' und '?'

von Markus F. (mfro)


Bewertung
0 lesenswert
nicht lesenswert
Gustl B. schrieb:
> Gibt es da eine Lösung?

Etliche.

ein .xdc ist ein .sdc, das eigentlich ein .tcl ist ;)

Also ein Tcl-script, das Constraints verwaltet. Entsprechend kann es 
auch alle (jedenfalls die meisten) Tcl-Sprachelemente nutzen.

Ich kenn' mich mit Vivado nicht aus, aber ein Altera/Intel .sdc-File 
(und da dürfte eigentlich kein allzugrosser Unterschied sein) würde so 
aussehen:
for { set i 0 } { $i < { expr 20 * 8 - 1} } {incr i} {
   set_false_path -from [get_pins AD9747_data_DAC_reg[$i]/C}] -to [get_pins AD9747_DAC/DAC_Regs_reg[[expr $i /8]][[expr $i % 8 ]]/D]
}

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Markus F. schrieb:
> Also ein Tcl-script, das Constraints verwaltet. Entsprechend kann es
> auch alle (jedenfalls die meisten) Tcl-Sprachelemente nutzen.

Leider nicht, XDC files besiten bei Xilinx nur einen ganz kleinen Subset 
von TCL. Ifs und Loops sind kein Bestandteil davon:

https://www.xilinx.com/support/answers/59134.html

Was natuerlich immer geht, ist diese Constraints in einem TCL File zu 
erzeugen, die muessen nicht im XDC stehen. Oder eben mit Wildcards 
arbeiten, was ich persoenlich als die sauberste Variante empfinde.

: Bearbeitet durch User
von Markus F. (mfro)


Bewertung
0 lesenswert
nicht lesenswert
Tobias B. schrieb:
> Leider nicht, XDC files besiten bei Xilinx nur einen ganz kleinen Subset
> von TCL. Ifs und Loops sind kein Bestandteil davon:

Wusste ich nicht, danke.

Würde ich persönlich als k.o.-Kriterium sehen. Leider.

von Gustl B. (-gb-)


Bewertung
0 lesenswert
nicht lesenswert
Hm, OK vielen Dank!

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Markus F. schrieb:
> Würde ich persönlich als k.o.-Kriterium sehen. Leider.

Ach, soweit muss man jetzt nicht gehen. Ist sogar das korrekte 
Verhalten, der Synopsis Design Constraints Syntax erlaubt nunmal keine 
Loop und Ifs. Und mir ist es lieber wenn sich die Tools an einen 
Standard halten, wie wenn jeder wieder sein eigenes Sueppchen kocht.

Komplexe Contraints lassen sich weiterhin problemlos via Tcl Skripte 
setzen. Da die Build Prozesse eh darauf basieren ist das voellig in 
Ordnung.

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.

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