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


von Gustl B. (-gb-)


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
1
start_DAC: in std_logic;
2
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:
1
type Rom20x1Byte is array (0 to 19) of std_logic_vector(7 downto 0);
2
signal DAC_Regs: Rom20x1Byte:=(others => x"00");

Und so wird das gemacht:
1
if start_DAC_sr = "01" then
2
   for I in 0 to 19 loop
3
      DAC_Regs(I) <= data_DAC(I*8+7 downto I*8);
4
   end loop;
5
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)


Lesenswert?

versuchs mal mit den Wildcards '*' und '?'

von Markus F. (mfro)


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:
1
for { set i 0 } { $i < { expr 20 * 8 - 1} } {incr i} {
2
   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]
3
}

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


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)


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


Lesenswert?

Hm, OK vielen Dank!

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


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.

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.