Hallo, ich möchte einen Frequenzteiler in ein eigenes Untermodul packen. Dabei habe ich mich an die Clock Enable-Generierung welche hier auf der Seite vorgeschlagen wird gehalten. Nun möchte ich das Teilverhältnis nicht als constant haben, sondern aus der top_entity "übergeben" (als Integerwert). Leider gibt mir ISE immer einen Fehler aus beim compilieren. Folgenbde Ziele möchte ich realisieren: -Das Untermodul FreqDiv_test soll a) den selben Clock wie das Topmodul verwenden b) das Teilverhältnis von Topmodul "übergeben" bekommen c) den geteilten Takt an das Topmodule "zurückgeben" (fdiv_out) Hier mein Code a) Topmodule library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity FPA_172h is port ( Clk: in std_logic); end entity FPA_172h; architecture Behavioral of FPA_172h is component FreqDiv_test port ( Clk: in std_logic; cnt_div: in integer; fdiv_out: out std_logic }; end component; begin Teiler : FreqDiv_test port map (Clk, cnt_div, fdiv_out); end Behavioral; b) Untermodule library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity FreqDiv_test is port ( Clk: in std_logic; cnt_div: in integer; fdiv_out: out std_logic ); end FreqDiv_test; architecture Behavioral of FreqDiv_test is signal cnt: integer range 0 to cnt_div-1; -- Zähler für Teiler signal ce: std_logic; begin process(Clk) begin if rising_edge(Clk) then if ce='1' then fdiv_out <= '1'; end if; end if; end process; process(Clk) begin if rising_edge(Clk) then if cnt=cnt_div-1 then ce <= '1'; cnt <= 0; else ce <= '0'; cnt <= cnt +1 ; end if; end if; end process; end Behavioral; Ich bekomme immer einer Fehlermeldung im Topmodule am Ende der Component-Deklaration: Line 37. Unexpected symbol read: }. Line 38. parse error, unexpected END, expecting IDENTIFIER component FreqDiv_test port ( Clk: in std_logic; cnt_div: in integer; fdiv_out: out std_logic }; -- =>Line 37 end component; -- => Line 38 Ich schätze mal ich mache hier generell noch etwas falsch und es ist kein einfacherer Syntax-Error... Thx for Help jey
ah doch so einfach, hast recht war ne geschweifte Klammer. Jetzt kamen aber neue Probleme: Ich musste für den Aufruf der Komponente Teiler : FreqDiv_test port map (Clk, cnt_div, fdiv_out); jetzt die Signale noch in der Entity des top_modules deklarieren. entity FPA_172h is port ( Clk: in std_logic; cnt_div: integer:=2; fdiv_out: ?); end entity FPA_172h; Jetzt eine Frage: fdiv_out soll ja die geteilte Frequenz sein die die FreqDiv-Komponente für das top_module generiert. Wie muss ich dieses Signal denn nun in der entity des top_module deklarieren? Ich möchte dieses Signal ja nun weiter im top_module verwenden.
und noch ein Problem: die Übergabe funktioniert zwar jetzt allerdings erwartet die Zeile: signal cnt: integer range 0 to cnt_div-1; -- Zähler für Teiler das cnt_div eine Konstante ist. Ich habe diese aber ja als "in Integer" definiert. Wie löse ich dieses Problem, kann ich auch eine Konstante in der Portliste übergeben?
Jey Soon schrieb: > Wie löse ich dieses Problem, kann ich auch eine Konstante in > der Portliste übergeben? Das wird üblicherweise als Generic gemacht... In der Portliste kannst du das nicht übergeben, denn dann müsste der Synthesizer die Zählerbreite abhängig vom übergebenen Wert quasi dynamisch umstellen können. Dass das eine Konstante ist bzw. sein könnte, sieht der Synthesizer zum Übersetzungszeitpunkt nicht.
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.