Forum: FPGA, VHDL & Co. Wie wird Attribute noopt für Precision richtig gesetzt?


von VHDLProblem (Gast)


Lesenswert?

Hallo, vielelicht kann mir jemand von euch helfen.

ich möchte gerne das Attribute noopt auf die Komponente ff_enable 
setzen, allerdings bekomme ich immer Fehlermeldungen, egal was ich 
bisher versucht habe. Hat vielleicht einer von euch eine Idee oder weiß 
wie man das Attribute in diesem Fall richtig setzt?
Ich glaube das Problem liegt an der Generiung in der Schleife, wenn ich 
das Attribute oben nach der Komponente setzte bekomme ich im Precision 
die Fehlermeldung, dass die Komponente unmapped ist. Wenn ich sie unten 
auf die Instanze setze kommt: dass man das Attribute nicht auf die 
Instanz setzten kann. Ich versteh einfach nicht, was ich falsch mache.

Ziel des Ganzen ist das die Synthese schneller von statten geht. Es ist 
allerdings nur ein Teil der Programmierung zu sehen
1
ARCHITECTURE rtl OF ff_compare IS
2
3
   CONSTANT C_NUM_EN_LEN : POSITIVE := 16;
4
   CONSTANT C_NUM_EN     : POSITIVE := G_NUM_FF_LEN / C_NUM_EN_LEN;
5
6
   SIGNAL toggle : STD_LOGIC             := '0';  -- toggle SIGNAL
7
   SIGNAL ff_ar  : STD_LOGIC_VECTOR ((2* (C_NUM_EN+1))-1 DOWNTO 0);
8
   SIGNAL v_loop : UNSIGNED (2 DOWNTO 0) := "000";
9
10
   COMPONENT ff_enable
11
      GENERIC (
12
         G_FF_LEN : POSITIVE := C_NUM_EN_LEN
13
         );
14
      PORT (
15
         in_ff_enable  : IN  STD_LOGIC_VECTOR(1 DOWNTO 0);
16
         clk           : IN  STD_LOGIC;
17
         en_ff_enable  : IN  STD_LOGIC;
18
         out_ff_enable : OUT STD_LOGIC_VECTOR(1 DOWNTO 0)
19
         );
20
   END COMPONENT;
21
22
--   ATTRIBUTE NOOPT              : BOOLEAN;
23
--   ATTRIBUTE NOOPT OF int_ff_enable_proc : COMPONENT IS TRUE;
24
   ATTRIBUTE NOOPT              : BOOLEAN;
25
   ATTRIBUTE NOOPT OF ff_enable : COMPONENT IS TRUE;
26
27
BEGIN
28
   int_ff_enable_proc : FOR i IN 0 TO C_NUM_EN-1 GENERATE
29
30
      -- Precision
31
      ATTRIBUTE hierarchy                       : STRING;
32
      ATTRIBUTE hierarchy OF inst_ff_enable     : LABEL IS 
33
"preserve_interface_block";
34
--      ATTRIBUTE NOOPT                           : BOOLEAN;
35
--      ATTRIBUTE NOOPT OF inst_ff_enable         : LABEL IS TRUE;
36
--      ATTRIBUTE NOOPT                           : BOOLEAN;
37
--      ATTRIBUTE NOOPT OF ff_enable         : component IS TRUE;
38
39
   BEGIN
40
41
      inst_ff_enable : ff_enable
42
         PORT MAP (
43
            clk           => clk,
44
            in_ff_enable  => ff_ar ((2*i)+1 DOWNTO 2*i),
45
            out_ff_enable => ff_ar((2*i)+3 DOWNTO (2*i)+2),
46
            en_ff_enable  => ff_drain_en_compare
47
            );
48
49
   END GENERATE int_ff_enable_proc;
50
51
END ARCHITECTURE rtl;

: Bearbeitet durch Moderator
von Duke Scarring (Gast)


Lesenswert?

VHDLProblem schrieb:
> ich möchte gerne das Attribute noopt auf die Komponente ff_enable
> setzen,
Warum?
Ich habe das bisher noch nie wirklich gebraucht...

> allerdings bekomme ich immer Fehlermeldungen, egal was ich
> bisher versucht habe.
Welche Fehlermeldung?
Copy&paste oder ein Screenshot ist da hilfreich.
Sonst können die Forumsteilnehmer ohne Precision (so wie ich) nur raten.


Ah, da stehts ja:
> Ziel des Ganzen ist das die Synthese schneller von statten geht.
Wie lange dauert denn die Synthese momentan?
Wie groß ist das Design?
Ich habe aktuell Synthesezeiten von 30 Minuten. Aber auch 
(funktionsfähige) Synthesen, die über Nacht liefen (>8h) habe ich schon 
erlebt.

Duke

von VHDLProblem (Gast)


Lesenswert?

Das Design macht nur Logik die theoretisch wegoptimiert werden kann.

Dabei sollen eine durch ein generic bestimmte anzahl an fliflops und 
Schieberegister hintereinander gesetzt werden. die Synthes von 64t 
flipFlops die in einer bestimmten Anordnung generiert werden soll dauert 
47h plus. Habe die Synthese da abgebrochen

Dont_touch kann ich in diesem Fall nicht verwenden, da die unterste 
Ebene der Hierachie optimiert werden muss.

Warning: [45558]: Module work.ff_ressource_top(struct){generic map 
(G_NUM_FF_LEN => 160 G_NUM_FF_WIDTH => 100)}: Black-box attributes (like 
black_box or noopt) are set on instances inside this module.  These 
attributes are not supported on instances and will be ignored.  Please 
set the attributes on the module or entity definition to treat them as 
black-boxes.
im anderen fall:
# Warning: [45759]: NOOPT attribute specified for an unmapped cell, 
'ff_enable_16'. This attribute will be ignored.

von Duke Scarring (Gast)


Lesenswert?

VHDLProblem schrieb:
> Das Design macht nur Logik die theoretisch wegoptimiert werden kann.
Ok. Und was willst Du bezwecken?
Wenn Du sehen willst, wieviele Deiner Flipflops in's FPGA passen, würde 
ich die Ausgänge miteinander verxodern und auf einen LED-Pin o.ä. legen.


> Dabei sollen eine durch ein generic bestimmte anzahl an fliflops und
> Schieberegister hintereinander gesetzt werden. die Synthes von 64t
> flipFlops die in einer bestimmten Anordnung generiert werden soll dauert
> 47h plus. Habe die Synthese da abgebrochen
Dann würde ich mal weniger probieren :)
Man kann sich ja steigern: 1k, 2k, 4k, 8k, ...
Zu 100% wirst Du Deine FFs wahrscheinlich nicht nutzen können.

Irgendeine Ressource geht im FPGA immer zuerst aus: BRAM, 
Multiplizierer, Taktnetze, Routing, ...
FF und LUTs bleiben da sicher ein paar über, nur man bekommt kein 
Routing mehr hin.


VHDLProblem schrieb:
> Black-box attributes (like
> black_box or noopt) are set on instances inside this module.  These
> attributes are not supported on instances and will be ignored.  Please
> set the attributes on the module or entity definition to treat them as
> black-boxes.
Das würde ich mal den Precision-Constraint-Guide zu Rate ziehen...

Duke

von VHDLProblem (Gast)


Lesenswert?

Deine Antwort bringt mich leider nicht weiter immerhin hat mein FPGA 
über 400t flipflop da sollten 64t kein Problem darstellen.

Ich möchte nur wissen wie man das Attribute richtig setzt :(

von Duke Scarring (Gast)


Lesenswert?

VHDLProblem schrieb:
> Ich möchte nur wissen wie man das Attribute richtig setzt :(
RTFM.

Laut 
https://courses.engr.illinois.edu/ece412/References/precision/precisionsyn_ref.pdf
kommt
1
attribute dont_touch : boolean;
2
attribute dont_touch of I1: label is true;
und
1
attribute preserve_signal : boolean;
2
attribute preserve_signal of rst_int : signal is true;
in Frage.
Ich habe keinen Zugriff auf Precsion. Es kann sein, das es bei neueren 
Versionen weitere nutzbare Attribute gibt.

Duke

von VHDLProblem (Gast)


Lesenswert?

Vielen Dank für deine Antwort.

Allerdings weiß ich wie ich diese Attribute setze, eben nur nicht das 
Attribute noopt. Da ich die Komponente in einer generischen Schleife 
instanziiere.

von VHDLProblem (Gast)


Lesenswert?

noopt

Specifies that an instance should not be optimized or changed.
noopt <instance name> <true or false>

In contrast to dont_touch, lower-level hierarchy and leaf instances are 
not protected from
optimization or change. For Example
Verilog
//exemplar attribute <module_name> noopt TRUE
VHDL
attribute NOOPT : boolean;
attribute NOOPT of <component_name> : component is TRUE;

ich become so wie ich es vgl code oben einsetzte eben immer 
fehlermeldungen

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.