Ich möchte die IDDR vom Virtex 5 verwenden. Das Element besitzt einen C und einen CB Eingang. Laut Beschreibung kommt an den C Eingang der Clock und an CB der um 180° Phasenverschobene Clock. Bis jetzt habe ich immer auf Schematic Ebene den IDDR benutzt. Dort ist der CB Eingang nicht vorhanden. Jetzt stelle ich mir natürlich die Frage wie der IDDR dann funktioniert. Ich habe mir die RTL Technologie angeschaut. Dort wird der Clock angeblich durch einen INVERTER gejagt und so der um 180° benötigte Clock erzeugt. Also habe ich mit Plan Ahead diesen Inverter gesucht. Diesen habe ich aber nicht gefunden. Anschließendd habe ich eine Timing Simulation durchgeführt. Ich habe insgesamt 12 IDDR Elemente. Also habe ich bei der Timing Simulation alle 12 C-Eingänge und alle 12 CB-Eingänge simuliert. Was mir dabei aufgefallen ist, das der C und CB-Clock IMMER um 26PS versetzt sind. Demnach muss jedes IDDR Element einen INVERTER besitzen der genau 26ps Durchlaufzeit besitzt.Anders kann ich mir dies nicht erklären. Wenn ich einen LUT ALS Inverter verwende, dann wäre die Laufzeit zu den einzelenen IDDR ja unterschiedlich und die Laufzeit würde sicherlich länger als 26ps dauern KANN DIES JEMAND BESTÄTIGEN? Ich weiß das man einen DCM verwendet dies kann ich aber leider aus Design Gründen nicht machen.
Hm, der IDDR als VHDL-Instanz hat auch beim V5 nur einen Takt-Eingang:
1 | Library UNISIM; |
2 | use UNISIM.vcomponents.all; |
3 | |
4 | -- <-----Cut code below this line and paste into the architecture body---->
|
5 | |
6 | -- IDDR: Double Data Rate Input Register with Set, Reset
|
7 | -- and Clock Enable.
|
8 | -- Virtex-5
|
9 | -- Xilinx HDL Language Template, version 13.4
|
10 | |
11 | IDDR_inst : IDDR |
12 | generic map ( |
13 | DDR_CLK_EDGE => "OPPOSITE_EDGE", -- "OPPOSITE_EDGE", "SAME_EDGE" |
14 | -- or "SAME_EDGE_PIPELINED"
|
15 | INIT_Q1 => '0', -- Initial value of Q1: '0' or '1' |
16 | INIT_Q2 => '0', -- Initial value of Q2: '0' or '1' |
17 | SRTYPE => "SYNC") -- Set/Reset type: "SYNC" or "ASYNC" |
18 | port map ( |
19 | Q1 => Q1, -- 1-bit output for positive edge of clock |
20 | Q2 => Q2, -- 1-bit output for negative edge of clock |
21 | C => C, -- 1-bit clock input |
22 | CE => CE, -- 1-bit clock enable input |
23 | D => D, -- 1-bit DDR data input |
24 | R => R, -- 1-bit reset |
25 | S => S -- 1-bit set |
26 | );
|
27 | |
28 | -- End of IDDR_inst instantiation
|
Zu finden in ISE unter den Language Templates. Ich wette, das funktioniert genau wie beim Virtex 4 nur mit dem 0° Clock. Edit: Steht auch im User Guide des Virtex 5:
1 | Virtex-5 devices have dedicated registers in the ILOGIC to implement input double-datarate |
2 | (DDR) registers. This feature is used by instantiating the IDDR primitive. |
3 | There is only one clock input to the IDDR primitive. Falling edge data is clocked by a |
4 | locally inverted version of the input clock. All clocks feeding into the I/O tile are fully |
5 | multiplexed, i.e., there is no clock sharing between ILOGIC and OLOGIC blocks. |
Danke für die Infos. Dann kann ich den IDDR doch auch ohne Probleme mit einem nicht konstanten Clock benutzen. Ich dachte schon der benötigt ein PLL oder DCM. Dann wird der CB demnach automatisch immer vom ISE Tool verbunden.
Abgesehen davon, das Dein Problem erstmal behoben ist: Sebastian schrieb: > Bis jetzt habe ich immer auf Schematic Ebene den IDDR benutzt. Dort ist > der CB Eingang nicht vorhanden. Versuch mal ganz schnell vom Schemetic Entry wegzukommen. Das ist zum effektiv arbeiten nicht brauchbar. Auf der schematic-Ebene macht man quasi immer eine Strukturbeschreibung. Erst mit VHDL oder Verlog erschließt sich die teilweise sehr gut synthetisierbare Verhaltensbeschreibung. Duke
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.