Forum: FPGA, VHDL & Co. Laufzeit einer Komponente


von matzunami (Gast)


Lesenswert?

Hallo,

Ich führe in VHDL eine Berechnung durch, erst eine addition und dann 
eine multiplikation. Der Addierer und der Multiplizierer sind beide in 
ISE erstellte IP Cores rein kombinatorisch. Diese habe ich nun in meiner 
Komponente in reihe geschalten. Mein Board Takt lauft mit 100MHz und ich 
sehe in der Post-Route Simulation, dass die Berechnung (addition + 
multiplikation) in einem Takt durchgeführt wird. Also soweit 
funktioniert alles wie gewollt (vom übernommenen Einganssignal bis zum 
Ausgangssignal vergehen ca. 7ns).
Nun meine Frage: Kann man dieses Zeitverhalten irgendwie in einem 
Constraint fixieren, d.h. sowas wie

  INST "*/component_calc" TNM = "calc";
  TIMESPEC "TS_calc" = FROM "Input" TO "Output" 7.0 ns;

so dass ich mir sicher sein kann, das dies später in dem Projekt, wo 
dieser Teil eingesetzt wird, auch noch funktioniert?

Oder kann ich die Zwei IP Cores irgendwie in eine StateMachine packen, 
wo ich sie dann in reihe schalte? Ich weiß nicht ganz wie das aussehen 
soll, da ich dort schreiben würde x = a + b und y = x * c, wobei ich 
hier ja nicht meine Cores verwende, was ich aber gerne machen würde.

Ich hoffe ich konnte mein Problem etwas verständlich erklären.
Wäre schön, wenn mir jemand weiterhelfen könnte.

MfG
matzunami

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


Lesenswert?

Gib doch einfach einen Constraint auf die 100MHz an.
Wenn deine Komponente zwischen 2 FFs hängt, muß sie die Zeit 10ns 
einhalten.

> Der Addierer und der Multiplizierer sind beide in
> ISE erstellte IP Cores rein kombinatorisch.
Warum erzeugst du solche Standardkomponenten als IP-Core?

> da ich dort schreiben würde x = a + b und y = x * c,
So würde ich das machen.

> wobei ich hier ja nicht meine Cores verwende
Es sind doch sowieso nicht deine Cores, sondern die von Xilinx. Und 
das sind die selben, ob du sie manuell erzeugst, oder der Synthesizer 
automatisch...

von matzunami (Gast)


Lesenswert?

Also erstmal danke für die Antwort.

Ein Constraint auf den Takt hab ich schon und die die Cores möchte ich 
verwenden, weil die genau aauf meine Aplikation passt (zb. Addierer 
erster Wert unsigned 14 bit zweiter wert signed 16 bit ergebniss 18 
bit).
Wenn ich x = a + b  schreibe, wie kann ich dann sagen das ein wert 
signed und der andere unsigned ist? -> zu Integer Convergieren einmal 
mit to_signed und einmal mit to_unsigned?

Wie genau sieht das aus (in VHDL), wenn ich die Cores zwischen 2 FF 
häng?

von matzunami (Gast)


Lesenswert?

wenn ich soetwas schreibe (nur beispielhaft):

component adder
 port (
   b in
   b in
   c out
 );
end compo..

Inst : adder
port map (
 a => a
 b => b
 c => c
);

State Machine
when 1 =>
   a <= x;
   b <= y;
   next state

ist der adder dann in der StateMachine eingebunden und somit im 
TimingConstraint der StateMachine ?

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


Lesenswert?

Klar. Die Geschwindigkeit der SM ist ja durchaus von der Komponente 
adder abhängig, die Tools erkennen das.

>>>>> FROM "Input" TO "Output" 7.0 ns;
Damit ist der Inputpin bzw. Outputpin des FPGAs gemeint.

von matzunami (Gast)


Lesenswert?

ok danke...

>>>>> FROM "Input" TO "Output" 7.0 ns;
>>Damit ist der Inputpin bzw. Outputpin des FPGAs gemeint.

sowas hab ich mir schon gedacht

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.