Forum: FPGA, VHDL & Co. Xilinx: IO Register im IOB


von Bronco (Gast)


Lesenswert?

Hallo,

ich hab mal eine Frage zu dem Xilinx ISE MAP-Property "Pack I/O 
Registers/Latches into IOBs":
Wenn ich es richtig verstehe, besagt dieses Property, ob das "letzte" 
FlipFlop vor dem Pin in den IOB gemappt oder irgendwo anders.
Was macht es denn überhaupt für einen Sinn, dieses FlipFlop nicht in den 
IOB zu legen?
Laut Doku sollte dieses Property für meinen Spartan3S5000 defaultmäßig 
auf "For Inputs and Outputs" stehen, tatsächlich stellt es ISE13.4 und 
14.1 aber defaultmäßig auf "Off". Bug oder Feature?

von Harald (Gast)


Lesenswert?

Feature, denn ein freies FF kann so verteilt werden, dass es genau in 
der Mitte des Pfades liegt, wenn es mit dem Routing knapp wird, während 
der Zwang zum IO dazu führen kann, dass man "unterwegs" nochmal eins 
braucht.

FFs in den IOs verbessern zieführend nur dann das timing, wenn man 
nochmal ein extra FF spendiert und sie führen zu koheränten Bussen.

Es bleibt Dir überlassen, ob du es nutzt, weil die Synthese das nicht 
allein entscheiden kann.

Mein Tipp: Baue von Anfang an immer ein Doppelregister ins Design, wenn 
nicht zwingende Gründe dagegen stehen und nimm sie am Ende der 
Entwicklung nur raus, wenn du musst. Du sparst Dir damit ständig etwas 
Synthesezeit.

von Paule Praxis (Gast)


Lesenswert?

Harald schrieb:
> FFs in den IOs verbessern zieführend nur dann das timing, wenn man
> nochmal ein extra FF spendiert und sie führen zu koheränten Bussen.

Ne, nix spendiert, dieses FF kriegst du geschenkt. Das ist ja der grosse 
Vorteil von FF im Out-Pin Pfad. Es gibt IMHO keinerlei Grund in einem 
solchen fall das FF nicht zu benutzen.

Im Input-Pfad eigentlich auch nicht. Falls der nächste Endpunkt wirklich 
soweit vom Input wegliegen sollte, das man das FF besser in die Tiefe 
des FPGA's legt, dann hast du mit dem Pin-(PCB)-Layout geschlampt.

Mir persönlich ist es noch nie vorgekommen, das ich ein FF aus dem Pad 
schieben musste, weil das timing nicht passte. Und ich habe schon 
zehtausende von IO-FF verlegt.

Mahlzeit,

von Klaus F. (kfalser)


Lesenswert?

Bronco schrieb:
> Was macht es denn überhaupt für einen Sinn, dieses FlipFlop nicht in den
> IOB zu legen?

FF's in IOBs habe z.B. keine vorgeschaltete LUT, d.h. die IOB's takten 
am besten die Ausgangssignale nochmals sauber ab, damit sie alle schön 
synchron an den Pins auftauchen.
Sie eignen sich aber nicht so gut oder überhaupt nicht dazu z.B. einen 
Zähler zu implementieren.

von Paule Praxis (Gast)


Lesenswert?

Klaus Falser schrieb:
> Sie eignen sich aber nicht so gut oder überhaupt nicht dazu z.B. einen
> Zähler zu implementieren.

Da sie nur im IO-Pfad  (i-PAD -> D resp Q -> O-PAD) sind IO-PAD 
überhaupt nicht mit interner Logic Rückführbar. deshalb werden sie auch 
nicht zur Logic-Fabric gezählt.

Der Counter baut man aus "internen" FF. Sollen counterbits auch aus dem 
FPGA geführt werden, führt man eben die Q der zähl-FF nicht nur über die 
Inkrementier-Kombinatprik an die D der internen FF, sondern auch an D 
der IO-FF. Knallhartes IO-timing quasi geschenkt.

von Harald (Gast)


Lesenswert?

Paule Praxis schrieb:
> Ne, nix spendiert, dieses FF kriegst du geschenkt.

Du musst es im Design aber einbauen und daher verlierst du einen Takt!

von Fritz J. (fritzjaeger)


Lesenswert?

Harald schrieb:
> Paule Praxis schrieb:
>> Ne, nix spendiert, dieses FF kriegst du geschenkt.
>
> Du musst es im Design aber einbauen und daher verlierst du einen Takt!

Nö, man dupliziert einfach das interne Ziel-FF. Sollte es dabei zu 
Problemen kommen, das für das Ziel-FF das timing wg unrelated logik (LUT 
und FF nicht aus dem gleichen CLB), dupliziert man auch das Quell-FF 
samt Logik an Q. Nutzung des IO-FF als RS-FF statt D-FF kann auch 
helfen.

Wobei hier nicht die Frage gestellt wurde, ob man Ein- und ausgehende 
Signale beim Passieren der FPGA-Grenzen durch FF's führen sollte. 
Sondern ob man diese FF's in die Pads platziert oder in Logikblöcke. Ich 
sehe keinerlei Vorteile in einer Paltzierung weg vom Pin, nur Nachteile. 
(unterschiedliches Timing je nach laune des Placers, Enstehung 
Phasen-Skew zwischen logisch konsitenzen Signalen (bits in vector, 
strobe in), Propagierung von Skew auf dem PCB (track-länge, 
unterschiedliche Lötstellen, inhomogenes Epsilon des PCB-Materials 
(Charge, Nutzen)) aufwendigere STA, etc ...


MfG

von Bronco (Gast)


Lesenswert?

Das heißt, bei einem Ausgang werden im Zweifelsfall zwei parallele FF 
benutzt: Ein "normales" für die Logik und das im IOB nur für den Pad?

von Paule Praxis (Gast)


Lesenswert?

Bronco schrieb:
> Das heißt, bei einem Ausgang werden im Zweifelsfall zwei parallele FF
> benutzt: Ein "normales" für die Logik und das im IOB nur für den Pad?

Es ist wohl gemeint das bei signalen die intern verwendet UND nach 
draussen gehen zwei parallel FF verwendet werden. Man buffert Ausgänge 
um extern (Pin+PCB) ein großes timingbudget zu haben. bei internen FF 
verschsendet man da schon wieder ein paar Nanoseconds. Da das FF eh im 
Pad vorhanden ist und nicht für interne Signale benutz werden kann 
bekommt man es für diesen zweck quasi geschenkt. Deshalb fordert i.d. 
Regel die Designspec das alle Outputs die IOB-FF nutzen müssen (steht in 
der regel im reportfile *.pin(?).

Schnipseltechnisch sieht das so aus:
1
Entity
2
..
3
Port(
4
..
5
count_oq: out std_logic_vector(7 downto 0),  -- IOB-ff
6
count_o:  out std_logic_vector(7 downto 0)  -- signal vom internen FF FF                                 
7
);
8
End of Entity;
9
Architecture behave ...
10
11
 signal count_increment: std_logic_vector(7 downto 0);
12
 signal count_q:         std_logic_vector(7 downto 0);
13
14
begin
15
 process(clk)
16
 ...
17
  if rising_edge(clk)
18
   count_q  <= count_increment;  -- internes FF
19
   count_oq <= count_increment;  -- paralles, im IOB platzierbares FF
20
  end if;
21
 ..
22
 end process;
23
24
 count_increment <= count_q + "00000001";  --Increment Logik an internen FF
25
 count_o         <= count_q;               --"Draht" vom internen FF nach draussen 
26
..
27
end architecture;

MfG

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.