Forum: FPGA, VHDL & Co. Spartan 6, Synthese optimiert Signal weg


von X- R. (x-rocka)


Lesenswert?

Moin,

da möchte man es richtig machen... und die Synthese (Spartan-6, ISE 
12.3) haut mir die doppelten FF wech. :-(

Fall 1: So wird "q_LC_sync0" von der Synthese eliminiert:
1
  process(FC_Clk0_in)
2
  begin
3
    if( FC_Clk0_in'event and FC_Clk0_in = '1' ) then
4
      q_LC_sync0     <= LC_in_i;
5
      LC_sync0     <= q_LC_sync0;
6
    end if;
7
  end process;

Fall 2: So nicht:
1
  process(FC_Clk0_in)
2
  begin
3
    if( FC_Clk0_in'event and FC_Clk0_in = '1' ) then
4
      if( FC_Reset_in = '1' ) then
5
        q_LC_sync0   <= '1';
6
        LC_sync0   <= '1';
7
      else
8
        q_LC_sync0   <= LC_in_i;
9
        LC_sync0   <= q_LC_sync90;
10
      end if;
11
    end if;
12
  end process;

Warum das denn bitte?
Fall 2 geht aus anderen Design-Gründen nicht, ich will auf diesen 
Signalen keinerlei Reset, aber unbedingt das doppelte syncen.

Das RTL-Synthese Schematic zeigt in Fall 1 noch q_LC_sync, das 
"Technology-Schematic" nicht mehr.

Wie bekomme ich Fall 1 (also ohne Reset) synthetisiert, ohne dass er mir 
q_LC_sync wegoptimiert?

Danke,
X

von L - Rocka (Gast)


Lesenswert?

Was passiert mit "LC_sync0" ? Kann es sein, dass es in deiner weiteren 
(hier nicht gezeigten) Schaltung nicht verwendet wird ?

L-Rocka

von X- R. (x-rocka)


Lesenswert?

Es wird verwendet.

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


Lesenswert?

X- Rocka schrieb:
> Das RTL-Synthese Schematic zeigt in Fall 1 noch q_LC_sync, das
> "Technology-Schematic" nicht mehr.
Und wieviele FFs sind dann dort zwischen LC_in_i und LC_sync0?

von X- R. (x-rocka)


Lesenswert?

Lothar Miller schrieb:
> X- Rocka schrieb:
>> Das RTL-Synthese Schematic zeigt in Fall 1 noch q_LC_sync, das
>> "Technology-Schematic" nicht mehr.
> Und wieviele FFs sind dann dort zwischen LC_in_i und LC_sync0?

Ah, jetzt ich verstehe!

Im "Technology-Schematic" zeigt er ein SRLC16.
Das hat zur Folge, dass das Signal nach der Synthese nicht mehr als 
q_LC_sync existiert, weil es im SRLC16 nur noch intern vorhanden ist.
Er macht also schon was er soll... hat mich auch gewundert.

Warum ich dachte, q_LC_sync wäre weg: LOC Constraint.
Diese Signale müssen in bestimmte Slices gepackt werden, die nicht alle 
CARRY4 haben (ich nehme an, dass SRLC16 dann mit CARRY4 realisiert wird, 
das im S6 "nur" in der Hälfte der Slices vorhanden ist).

Hmmm, wie sage ich der Synthese, dass sie das bitte nicht mit nem SRLC16 
realisiert? Ich möchte lieber beide FFs in ein Slice packen und den 
"schnellen" Rückweg von Slice In zu Out nehmen.

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


Lesenswert?

X- Rocka schrieb:
> wie sage ich der Synthese, dass sie das bitte nicht mit nem SRLC16
> realisiert?
Indem du einen Reset dranbastelst. Denn ein LUT-SR hat keinen Reset...

> Ich möchte lieber beide FFs in ein Slice packen
Das Schieberegister in der LUT ist auch in 1 Slice...

> und den "schnellen" Rückweg von Slice In zu Out nehmen.
Wozu die Hektik?

von X- R. (x-rocka)


Lesenswert?

Lothar Miller schrieb:

>> Ich möchte lieber beide FFs in ein Slice packen
> Das Schieberegister in der LUT ist auch in 1 Slice...
Ich werde das mal versuchen, und kucken, ob er das auch in ein SliceX 
(ohne CARRY4) packt.

>> und den "schnellen" Rückweg von Slice In zu Out nehmen.
> Wozu die Hektik?
Äußerst grenzwertiges Design, was Timing angeht. Da ist jeder Signal und 
Clockpfad entscheidend, und wird deswegen mit LOCs vorgegeben. Timing 
Constraints haben leider nicht gereicht, deswegen Platzierung von Hand.

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.