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
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:
1 | component regn is |
2 | port( -- Nummer |
3 | r : in std_logic_vector(7 downto 0); -- 1 |
4 | clock : in std_logic; -- 2 |
5 | reset : in std_logic; -- 3 |
6 | load : in std_logic; -- 4 |
7 | q : buffer std_logic_vector(7 downto 0) -- 5 |
8 | );
|
9 | end component; |
10 | :
|
11 | -- Nummer 1 2 3 4 5
|
12 | AR : regn port map(clk, rst, arload, r(7 downto 0), q); |
So ginge das
1 | component regn is |
2 | port( -- Nummer |
3 | r : in std_logic_vector(7 downto 0); -- 1 |
4 | clock : in std_logic; -- 2 |
5 | reset : in std_logic; -- 3 |
6 | load : in std_logic; -- 4 |
7 | q : buffer std_logic_vector(7 downto 0) -- 5 |
8 | );
|
9 | end component; |
10 | :
|
11 | -- Nummer 1 2 3 4 5
|
12 | AR : regn port map( r(7 downto 0), clk, rst, arload, q); |
Oder so:
1 | component regn is |
2 | port( -- Nummer |
3 | clock : in std_logic; -- 1 |
4 | reset : in std_logic; -- 2 |
5 | load : in std_logic; -- 3 |
6 | r : in std_logic_vector(7 downto 0); -- 4 |
7 | q : buffer std_logic_vector(7 downto 0) -- 5 |
8 | );
|
9 | end component; |
10 | :
|
11 | -- Nummer 1 2 3 4 5
|
12 | 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:
1 | AR : regn port map(clock => clk, reset => rst, load => arload, r => r(7 downto 0), q => q); |
:
Bearbeitet durch Moderator
Lothar M. schrieb: > Und so würde es unabhängig von der Definitionsreihenfolge der Ports > sicher klappen:
1 | AR : regn port map(clock => clk, reset => rst, load => |
2 | 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.
@ 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
@ 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
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
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.
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
@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
@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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.