www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Angabe von Instanzen im ucf


Autor: Egon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich will die BRAMS fest im FPGA platzieren, nur leider kommt folgende 
Fehlermeldung:

Could not find instance(s) 'BER_MEAS/USER/TOP_REF/D_BLOCK_0' in the 
design.  To suppress this error, specify the correct instance name or 
remove the constraint.


Im ucf-File habe ich folgende Zeile angegeben:
INST "BER_MEAS/USER/TOP_REF/D_BLOCK_0" LOC = "RAMB16_X2Y6";

Ich habe keinen Instanznamen ausgelassen. Gibt es irgendwelche Tricks?

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau im RTL-Viewer nach, wie die Instanz wirklich heisst.

Rick

Autor: Egon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Rick,

im RTL-Viewer heisst die Instanz genauso. Woran könnte es noch liegen?

Ich habe meine BRAMs nicht als ramb16_s36_s36 implementiert sondern ein 
Synthese Construct von Xilinx verwendet und als Komponente abgelegt.


type ram_type is array (511 downto 0) of std_logic_vector (8 downto 0);
signal   Sig_RAM : ram_type;
begin


process (<clockA>)
begin
   if (<clockA>'event and <clockA> = '1') then
      if (<enableA> = '1') then
         if (<write_enableA> = '1') then
            Sig_RAM(conv_integer(<addressA>)) <= <input_dataA>;
         end if;
      end if;
   end if;
end process;

process (<clockB>)
begin
   if (<clockB>'event and <clockB> = '1') then
      if (<enableB> = '1') then
         <ram_outputB> <= <ram_name>(conv_integer(<addressB>));
      end if;
   end if;
end process;

Autor: Fpga Kuechle (fpgakuechle) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Egon wrote:
> Hi,
>
> ich will die BRAMS fest im FPGA platzieren, nur leider kommt folgende
> Fehlermeldung:
>
> Could not find instance(s) 'BER_MEAS/USER/TOP_REF/D_BLOCK_0' in the
> design.  To suppress this error, specify the correct instance name or
> remove the constraint.
>
>
> Im ucf-File habe ich folgende Zeile angegeben:
> INST "BER_MEAS/USER/TOP_REF/D_BLOCK_0" LOC = "RAMB16_X2Y6";
>
> Ich habe keinen Instanznamen ausgelassen. Gibt es irgendwelche Tricks?

1) Pfad (Path) bedeutet nicht Pfad der Datei auf der festplatte sondern 
innerhalb der Designhierarchie. Hast du den BRAM in deinem Top-Level 
(Name der obersten Entity als D_BLOCK_0 instanziert lautet der Pfad:
TOP_REF/D_BLOCK_0
2) Groß/Kleinschreibung kann das Problem sein, oder es werden andere 
Schrägstriche erwartet.
3)Man die Pfade mit * als Jokerzeichen abkürzen, also
 INST "*D_BLOCK_0"

Autor: Egon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1) Pfad (Path) bedeutet nicht Pfad der Datei auf der festplatte sondern
innerhalb der Designhierarchie. Hast du den BRAM in deinem Top-Level
(Name der obersten Entity als D_BLOCK_0 instanziert lautet der Pfad:
TOP_REF/D_BLOCK_0

--> ???

2) Groß/Kleinschreibung kann das Problem sein, oder es werden andere
Schrägstriche erwartet.

--> ich habe alles mehrmals überprüft, ich finde keine Unterschiede


3)Man die Pfade mit * als Jokerzeichen abkürzen, also
 INST "*D_BLOCK_0"

--> das habe ich auch schon probiert, er findet die Instanz einfach 
nicht.

Autor: Kest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was das Problem sein kann ist "TOP_REF/D_BLOCK_0" oder 
<TOP_REF/D_BLOCK_0> Unterschied. Irgendwo bei Xilinx kann man 
umschalten, welche Schreibweise verwendet wird.


Grüße,

Kest

Autor: FPGAküchle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schreib Labels um deinen source und versuche es damit:

INST "*toller_labelname*" LOC = "RAMB16_X2Y6";



architecture .. of .. is
...
begin
toller_labelname:BLOCK is
Begin

type ram_type is array (511 downto 0) of std_logic_vector (8 downto 0);
signal   Sig_RAM : ram_type;

process (<clockA>)
begin
   if (<clockA>'event and <clockA> = '1') then
      if (<enableA> = '1') then
         if (<write_enableA> = '1') then
            Sig_RAM(conv_integer(<addressA>)) <= <input_dataA>;
         end if;
      end if;
   end if;
end process;

process (<clockB>)
begin
   if (<clockB>'event and <clockB> = '1') then
      if (<enableB> = '1') then
         <ram_outputB> <= <ram_name>(conv_integer(<addressB>));
      end if;
   end if;
end process;

end block toller_labelname;
...
end architecture;

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.