Hallo Ich habe 3 VHDL-Module, die auf einen Block-RAM zugreifen. Der Block-Ram besitzt einen Anschluss für die Adresse (7 downto 0). Die 3 VHDL-Module greifen auf diesen Adressbus zu (jedoch nicht gelichtzeitig) Nachdem ein Modul auf den Bus zugegriffen hat, wird der Ausgang des Moduls auf Tristate geschaltet, dadurch kann ein anderes VHDL-Modul auf den Bus zugreifen. Ich habe die Ausgangsports der VHDL-Module auf "inout" gestellt, trotzdem zeit der compiler folgenden Fehler an: Calculate_Variance_Modul : Calculate_Variance Port Map ( ADDR_RAM_A4(7) => , ADDR_RAM_A4(6) => , ADDR_RAM_A4(5) => , ADDR_RAM_A4(4) => , ADDR_RAM_A4(3) => , ADDR_RAM_A4(2) => , ADDR_RAM_A4(1) => , ADDR_RAM_A4(0) => , AV_DICKE => NamedSignal_B_AV_DICKE, AV_VARIANCE => PinSignal_Calculate_Variance_Modul_AV_VARIANCE, Wie man erkennt wird "ADDR_RAM_A4" nichtzugewiesen Hier ein auszug aus meinem Quellcode: entity Calculate_Thickness is port ( ADDR_RAM_A4 : inout std_logic_vector(7 downto 0); EN_RAM_A4 : inout std_logic; WE_RAM_A4 : inout std_logic ); end Calculate_Thickness; architecture Structure of Calculate_Thickness is -- Signal Declarations signal S_REG_H : std_logic_vector(7 downto 0); signal S_ADDR_RAM_A4_1 : std_logic_vector(7 downto 0); begin -- Adresse an den RAM (FIFO) anlegen process (USB_CLK) begin if(USB_CLK'event and USB_CLK = '0')then if(CLR = '1' or GATE = '1')then ADDR_RAM_A4 <= (others => 'Z'); elsif(S_REG_H(3) = '1')then ADDR_RAM_A4 <= S_ADDR_RAM_A4_1; else ADDR_RAM_A4 <= (others => 'Z'); end if; end if; end process; process (USB_CLK) begin if(USB_CLK'event and USB_CLK = '1') then if(CLR = '1' or GATE = '1' or S_UPDATED_RAM_FIFO = '1') then S_REG_H <= "00000001"; elsif(SECOND_PEAK_DONE = '1')then S_REG_H <= S_REG_H(6 downto 0) & S_REG_H(7); -- schieben end if; end if; end process; Weiß einer an was es liegt?
@Sebastian >Ich habe 3 VHDL-Module, die auf einen Block-RAM zugreifen. Der Block-Ram >besitzt einen Anschluss für die Adresse (7 downto 0). Die 3 VHDL-Module >greifen auf diesen Adressbus zu (jedoch nicht gelichtzeitig) Nachdem ein >Modul auf den Bus zugegriffen hat, wird der Ausgang des Moduls auf >Tristate geschaltet, dadurch kann ein anderes VHDL-Modul auf den Bus >zugreifen. Vergiss die Tristates, nimm einen 3:1 MUX. Moderne FPGAs haben intern keine Tristates. >Ich habe die Ausgangsports der VHDL-Module auf "inout" gestellt, Das macht man auch nicht. ionout wird nur an den FPGA-Pins verwendet, nicht innerhalb des FPGAs zwischen Modulen. MfG Falk
Aha. Ich habe aber bereits VHDL-Module geschrieben, indem mehrere Prozesse auf einen Modulausgang zugegriffen haben. Dort habe ich den Tristate-Zustand benutzt. Dort hat der Compiler keinen Fehler angezeigt und es hat zudem funktioniert. Nur wenn mehrere Module auf diesen Bus zugreifen geht es auf einmal nicht mehr. Das ist für mich unlogisch. Das mit dem Multiplexer ist in meinem Fall umständlich. Wenn ich alles in eine Datei schreibe, dann geht es auch mit dem Tristate nur der Quellcode wird unübersichtlich. Grüsse Sebastian
so im allgemeinen dürfte das mit dem multiplexer aber hinhauen, es seiden er beachtet nich die tristatischen rückkopplungswiderstände die eine kapazitive last im elektrolyt mitsich führen und am messpunkt bx² mit einer niederohmigen amplitude rekombinieren. allet klar?
weißt du überhaupt was du da geschrieben hast? heißt du vielleicht ramon velasco san-martin? ramon, erst lesen dann posten!
Man kann intern soviele buss bauen wie man will - die Synthese nimmt das alles wieder weg. Das ist aber auch logisch so. Damit kann man nähmlich designs, die vorher top level waren und auch Ports gehen, auch intern wieder benutzen und kapseln. Umständlich kann der Muxer nicht sein, denn auch eine Tristate-Steuerlogig muss ja alternativ schalten, dass physikalisch kein Unsinn passiert. Wenn sie das tut, IST sie ein Multiplexer.
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.