Forum: FPGA, VHDL & Co. FF in IOB zwingen


von Anguel S. (anguel)


Lesenswert?

Hallo!

Ich möchte in einem Spartan 3A ein registriertes Signal einerseits 
intern im FPGA weiterverwenden, andererseits auch nach außen ausgeben, 
und zwar über einen IOB Register.

Da ich das Signal also auch als internes Feedback für andere FFs nutze, 
muss ich für das IOB FF eine zweite Kopie (mit Fanout = 1) erzeugen. Das 
versuche ich so:
1
signal reg_fuer_intern : std_logic := '0';
2
signal reg_fuer_IOB : std_logic := '0';
3
4
attribute KEEP : string; 
5
attribute KEEP of reg_fuer_intern : signal is "true";
6
attribute KEEP of reg_fuer_IOB : signal is "true";

Und dann:
1
process (clk)  
2
  begin  
3
    if rising_edge(clk) then
4
      reg_fuer_intern <= NOT kombinatorisches_signal; -- für FF zu intern
5
      reg_fuer_IOB <= NOT kombinatorisches_signal; -- nochmal für FF für IOB
6
  end if;
7
end process;

Trot KEEP wird jedoch das eine FF wegoptimiert und ich bekomme die 
Meldung, dass das FF nicht in den IOB gesetzt werden kann.

Mache ich etwas mit dem KEEP falsch, oder muss ich doch die 
Syntheseoption "Equivalent Register Removal" für das komplette Design 
abschalten, damit es klappt? Das würde ich nur ungern tun.

Danke für jeden Tipp!

Update: Habe jetzt "Equivalent Register Removal" und "Ressource Sharing" 
abgeschaltet. Es klappt immer noch nicht:
1
ERROR:Pack:2604 - The register
2
   Inst_MY_interface/Inst_MYSUB_interface/reg_fuer_IOB has the property
3
   IOB=FORCE, but was not packed into the output side of an I/O component. The
4
   output register symbol
5
   "Inst_MY_interface/Inst_MYSUB_interface/reg_fuer_IOB" has an output
6
   signal with a "KEEP" property and must remain externally visible by appearing
7
   on a component pin.
8
   The output register symbol
9
   "Inst_MY_interface/Inst_MYSUB_interface/reg_fuer_IOB" has an output
10
   signal with a "KEEP" property and must remain externally visible by appearing
11
   on a component pin.

2. Update: Die "KEEP" Attribute scheinen ihn jetzt wiederum zu stören, 
wenn ich die auskommentiere, scheint es doch zu gehen...

Grüße,
Anguel

von Christian R. (supachris)


Lesenswert?

Am besten KEEP weglassen und das nach außengehende mit dem IOB Attribut 
in ein IOB-FF zwingen. Dann landet das auch im IOB, wenn das globale 
"Pack Registers in IOB" deaktiviert ist. Also

attribute IOB : string;
attribute IOB of reg_fuer_IOB : signal is "true";

von Anguel S. (anguel)


Lesenswert?

Christian R. schrieb:
> attribute IOB : string;
> attribute IOB of reg_fuer_IOB : signal is "true";

Tut das nicht das gleiche wie IOB = FORCE im UCF?

Das Problem ist aber soweit ich das überblicke, dass sobald ein FF ein 
Fanout > 1 hat (vgl. Schematic), es überhaupt nicht mehr ins IOB gepackt 
werden kann - deshalb erzeuge ich die 2. Kopie des FFs.

Wenn ich KEEP weglasse und "Equivalent Register Removal" abschalte, 
scheint es nun zu gehen. Ich hasse dieses Xilinx-Voodoo :)

von Christian R. (supachris)


Lesenswert?

Anguel S. schrieb:
> Tut das nicht das gleiche wie IOB = FORCE im UCF?

Ja, tut das gleiche. Kann aber sein, dass das bei der Synthese schon 
greift, und du dadurch die "Equivalent Register Removal" eingeschaltet 
lassen kannst....müsste man mal testen. Das UCF greift ja erst beim 
Implement.

von Anguel S. (anguel)


Lesenswert?

Christian R. schrieb:
> Ja, tut das gleiche. Kann aber sein, dass das bei der Synthese schon
> greift, und du dadurch die "Equivalent Register Removal" eingeschaltet
> lassen kannst....müsste man mal testen. Das UCF greift ja erst beim
> Implement.

Danke! Werde ich mal nachher testen.

von Anguel S. (anguel)


Lesenswert?

Christian R. schrieb:
> Ja, tut das gleiche. Kann aber sein, dass das bei der Synthese schon
> greift, und du dadurch die "Equivalent Register Removal" eingeschaltet
> lassen kannst....müsste man mal testen. Das UCF greift ja erst beim
> Implement.

Hab's gerade getestet. Hast recht, danke! Mit attribute IOB im VHDL 
und *IOB = FORCE* im UCF (damit ein Fehler kommt, falls das Packen ins 
IOB nicht geht) klappt es nun auch mit eingeschaltetem "Equivalent 
Register Removal".

Grüße,
Anguel

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.