mikrocontroller.net

Forum: FPGA, VHDL & Co. Design kann nicht kompiliert werden


Autor: Guido G. (Firma: privat) (guigra)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich möchte gerne mein design übersetzen und Quartus gibt seltsame 
Fehlermeldungen aus.

Error (10476): VHDL error at scpu.vhd(198): type of identifier "clk" 
does not agree with its usage as "std_logic_vector" type
Error (10381): VHDL Type Mismatch error at scpu.vhd(198): indexed name 
returns a value whose type does not match "std_logic", the type of the 
target expression

Ich würde euch bitten einmal über den Quellcode zu schauen und mir 
zeigen wo es den hackt.

Mfg Guido

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guido G. schrieb:
> Ich würde euch bitten einmal über den Quellcode zu schauen und mir
> zeigen wo es den hackt.
Ich verwende diese implizite Portzuweisung per Reihenfolge niemals!
Sieh dir mal das hier an:
  component regn is
    port(                                           -- Nummer
        r    :    in std_logic_vector(7 downto 0);  -- 1
        clock :     in std_logic;                   -- 2
        reset :     in std_logic;                   -- 3
        load  :     in std_logic;                   -- 4
        q     : buffer std_logic_vector(7 downto 0) -- 5
        );
  end component;
:
 --         Nummer     1    2     3        4           5
   AR : regn port map(clk, rst, arload, r(7 downto 0), q);
So ginge das
  component regn is
    port(                                           -- Nummer
        r    :    in std_logic_vector(7 downto 0);  -- 1
        clock :     in std_logic;                   -- 2
        reset :     in std_logic;                   -- 3
        load  :     in std_logic;                   -- 4
        q     : buffer std_logic_vector(7 downto 0) -- 5
        );
  end component;
:
 --         Nummer          1          2    3     4     5
   AR : regn port map( r(7 downto 0), clk, rst, arload, q);
Oder so:
  component regn is
    port(                                           -- Nummer
        clock :     in std_logic;                   -- 1
        reset :     in std_logic;                   -- 2
        load  :     in std_logic;                   -- 3
        r    :    in std_logic_vector(7 downto 0);  -- 4
        q     : buffer std_logic_vector(7 downto 0) -- 5
        );
  end component;
:
 --         Nummer     1    2     3        4           5
   AR : regn port map(clk, rst, arload, r(7 downto 0), q);

Und so würde es unabhängig von der Definitionsreihenfolge der Ports 
sicher klappen:
   AR : regn port map(clock => clk, reset => rst, load => arload, r => r(7 downto 0), q => q);

: Bearbeitet durch Moderator
Autor: ui (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar M. schrieb:
> Und so würde es unabhängig von der Definitionsreihenfolge der Ports
> sicher klappen:
AR : regn port map(clock => clk, reset => rst, load => 
arload, r => r(7 downto 0), q => q); 

Obwohl das IMHO am schönsten (weil am eindeutigsten) ist. Auch wenns 
mehr zum tippen ist, aber wer wenig tippen will, der sollte eh Verilog 
nehmen.

Autor: Guido G. (Firma: privat) (guigra)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ ui

danke für deine Antwort.Das mehr tippen ist für mich kein Problem da ich 
kein Freund von copy und past bin besonders nicht von Fremdcode, da 
lernt man nichts.Mit Verilog bin ich nicht warm geworden.

guigra

Autor: Guido G. (Firma: privat) (guigra)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Lothar M.

danke für deine Antwort.Ich habe in mehreren Dokumenten zur Verwendung 
von Instanzen die von mir verwendete Schreibweise gefunden.Hat aber 
nicht geklappt.Darf ich fragen wie du auf deine Schreibweise gekommen 
bist und eine mögliche Quelle die dies erklärt?Ich möchte dabei etwas 
lernen um es in späteren Designprojekten richtig zu machen.

mfg guigra

Autor: Jonas B. (jibi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist ein Prinzip, feste oder lose Zuordnung. Wenn ich die Ports über 
die Reihenfolge zuweise, muss ich bei jeder Änderung auch die 
Reihenfolge der Zuweisung ändern. Hingegen wenn ich die Zuweisung über 
den Namen machen, die Reihenfolge keine Rolle mehr hat.

Gruß J

Autor: ui (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guido G. schrieb:
> danke für deine Antwort.Ich habe in mehreren Dokumenten zur Verwendung
> von Instanzen die von mir verwendete Schreibweise gefunden.Hat aber
> nicht geklappt.Darf ich fragen wie du auf deine Schreibweise gekommen
> bist und eine mögliche Quelle die dies erklärt?Ich möchte dabei etwas
> lernen um es in späteren Designprojekten richtig zu machen.

wenn ich dazu auch antworten darf ;) (ich beziehe mich natürlich nur auf 
die bevorzugten Schreibweise ;)

Grundsätzlich erlaubt eine Sprache (egal ob Programmier- oder 
Hardwarebeschreibungssprache) Syntax deswegen, weil sie Sinn macht. Aber 
trotzdem schränkt man sich später (best practice).

Ich zietiere mal die entsprechende Stelle von Peter Ashenden's "The 
Designer's guide to VHDL". Ein IMHO sehr gutes und strukturiertes Buch, 
das sich allein mit der Sprache VHLD (und zu einem kleinen Teil der 
synthesefähigkeit von Sprachmitteln) beschäftigt:
Peter Ashenden in #DesignersGuide:
> "A better way of writing a component instantiation statement is to use  named 
association, as shown in the following example [...]. Each port is explicitly 
named along with the signal to which it is connected. [...] The advantage is that 
is immediately obvious to the reader how the entity is connected into the 
structure of the enclosing architecture body."

Damit dürfe klar sein, warum das besser ist. Dann kann nämlich nicht nur 
der spätere Leser ins Dunkle tappen, sondern auch der Verfasser des 
Codes ;)
Damit wäre dir das auch nicht passiert! (ich glaube der Fehler hätte 
dann auch eindeutiger ausgeschaut.

Autor: Fpga K. (fpgakuechle) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guido G. schrieb:
> @ Lothar M.
>
> danke für deine Antwort.Ich habe in mehreren Dokumenten zur Verwendung
> von Instanzen die von mir verwendete Schreibweise gefunden.Hat aber
> nicht geklappt.Darf ich fragen wie du auf deine Schreibweise gekommen
> bist und eine mögliche Quelle die dies erklärt?Ich möchte dabei etwas
> lernen um es in späteren Designprojekten richtig zu machen.


Ich antworte mal für Lothar.
Die Beschreibung für die möglichen Instanziierungen findest du im 
Language Reference Manual - LRM - bspw dort: 
http://www.ics.uci.edu/~jmoorkan/vhdlref/compinst.html

"Deine" Variante nennt sich "positional association" Lothar's "named 
association". Diese beide Methoden gibt es nicht nur bei der 
Portzuweisung, sondern auch bei Feldern um dem index einen Datum 
zuzordnen:
http://www.ics.uci.edu/~jmoorkan/vhdlref/aggregat.html

Das ist m.E. nicht VHDL spezifisch, schon bei SPICE und Verilog gibt es 
die Möglichkeit den Index/Zuweisungspartner wegzulassen und allein die 
Position in der Liste zur Zuordnung zu nutzen - IMHO  eine sparsame Art 
sich ins Knie zu schiessen. Die engl. WP hat sogar einen Artikel über 
diese Variante der Programmverstümmelung: 
https://en.wikipedia.org/wiki/Named_parameter

: Bearbeitet durch User
Autor: Guido G. (Firma: privat) (guigra)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@fpgakuechle

vielen dank für deine Antwort und den hilfreichen Links.Ich habe mir mal 
die Links angeschaut und werde die dort aufgeführte Art der Beschreibung 
übernehmen.

mfg guigra

Autor: Guido G. (Firma: privat) (guigra)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ui

klar kannst du antworten.Das von dir aufgeführte Buch kannte ich noch 
nicht.Ich muss mich da mal schlau machen ob es das noch gibt und wo ich 
es  beziehen kann.

mfg guigra

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.