Habe einen komischen Fehler in VHDL, welcher so nicht auftreten sollte?

2 Antworten

Ist (leider) verdammt lnage her bei mir.

Werden die Eingänge clk/reset der entity 'automagisch' versorgt? Denn das wäre das einzige, wo ich keine Zuordnung sehe.

Sonst scheint alles zu matchen und belegt zu werden.


PCnerd659 
Beitragsersteller
 28.02.2025, 23:19

Ja, werden sie, der Fehler liegt irgendwie an der Instanzausführung jeweils, aber eigentlich sollte das einfach so gehen, da ja der Instanzname keine Rolle spielt...

KarlRanseierIII  01.03.2025, 00:03
@PCnerd659

Verstehe. Wie gesagt, ich sehe sonst auch kein Mismatch, die Cases der Namen scheinen zu passen etc. pp. - Und ja, es ist auffällig, daß es beide Instanziierungen betrifft.

Kann eien fehlende Abhängigkeit einen Fehler beim Bindign erzeugen?

PCnerd659 
Beitragsersteller
 01.03.2025, 10:02
@KarlRanseierIII

Das kann sein, aber ich sehe keine fehlende Abhängigkeit, was mich verwirrt

Für high_counter instanzierst du eine unbekannte Komponente GenericCounter123. Dort sollte sicherlich nur GenericCounter stehen.

Da in der Fehlermeldung auch für low_counter der Typ GenericCounter123 angegeben wird, obwohl dort in deinem Code GenericCounter steht, kann man wohl davon ausgehen, dass die Fehlermeldung zu einem anderen Code generiert wurde.


PCnerd659 
Beitragsersteller
 01.03.2025, 11:04

Du hast recht, bei GenericCounter123 kommt ein anderer Fehler, wenn ich GenericCounter123 jedoch zu GenericCounter ändere kommt genau dieser oben stehende fehler

regex9  01.03.2025, 15:26
@PCnerd659

Ich denke, dass dir noch eine Entität für GenericCounter fehlt, die die Komponente implementiert. Also sowas wie:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity GenericCounter is
  generic (
    Count_max : integer := 9 -- default
  );
  port (
    clk : in std_logic;
    enable : in std_logic;
    reset : in std_logic;
    count : out std_logic_vector(3 downto 0);
    overflow : out std_logic
  );
end GenericCounter;

architecture Behavioral of GenericCounter is
  begin
    process(clk, reset)
  end Behavioral;
PCnerd659 
Beitragsersteller
 01.03.2025, 10:30

Das kann sein, sehe aber keinen Fehler in der Komponente, kann es sein, dass es nicht geht, weil das generic nicht in der entity steht (welche ich auch nicht verändern darf)

regex9  01.03.2025, 15:17
@PCnerd659

Da deine Entität SekundenZaehler die GenericCounter-Instanzen nur nutzt, aber nicht selbst deren Implementation darstellt, braucht es keine Deklaration von generic.

Nimm dieses Beispiel von Intel. Verglichen mit deinem Code wäre top = SekundenZaehler und logic = GenericCounter. Die Entität top nutzt eine Instanz von logic (low_logic), sie stellt keine Implementation dar. Die Entität logic hingegen implementiert die Komponente logic. Daher muss sie dieselbe Portliste definieren, wie die Komponente. Würde man der Komponente noch eine generic-Klausel spendieren, müsste die Entität logic ebenso eine solche Klausel beinhalten, die auf die der Komponente passt.