Ich habe (hatte) hier einen gößeren "process" der mir daten von einem ADC ins SRAM geschrieben hat. Danach hab ich das ganze per Seriell an den PC geschickt. Nun will ich da noch etwas Logik dazubauen und wollte den schon etwas stark ausgewachsenen vorhanden process aufsplitten. Konkret will ich jetzt einen Prozess der die Daten liest, einer der das ganze zurückschreibt und einen der z.B. die SRAM Adresse zurücksetzt. Nun kann ich ja aber nicht schreibend auf ein Signal aus mehreren Prozessen zugreifen. Wie würde man das lösen? Ich würde den Prozess auf jeden fall gerne aufsplitten oder bin ich da auf dem Holzweg? /relevante code teile: send_sram_data: process (clock) begin if rising_edge(clock) then if (send_to_uart = '1') then send_active <= '1'; end if; --send_to_uart if ( addr_in >= 250000 ) then send_active <= '0'; end if; if (send_active = '1')then --if last_byte --> send_active=0; -- only send when buffer not half-full (else do nothing) if (buffer_half_full = '0') then if (write_to_uart = '0') then ----problem: addr_in <= addr_in + '1'; ------------ --clock in an byte write_to_uart <= '1'; else write_to_uart <= '0'; end if; end if; --buffer_half_full end if; --send active end if; --risign edge end process; write_adc_to_sram: process(adc_clock) begin if rising_edge(adc_clock) then if (counter < "111111111111111111") then if (counter = "111111111111111100") then write_done <= '1'; end if; if (write_done = '0') then --write data srwrite <= '1'; ram_data_out <= data(8 downto 1); --problem: addr_in <= addr_in + '1'; ------------- ´ end if; else srwrite <= '0'; end if; counter <= counter + 1; end if; --rising edge end process;
Mach doch einen eigenen Prozess für das addr_in-Inkrement:
1 | if (write_to_uart = '0') or (write_done = '0') then |
2 | addr_in <= addr_in + 1; -- "+ '1'" sieht komisch aus |
3 | end if; |
Übrigens darfst du gerne Boolean-Variablen verwenden, damit kannst du dir die vielen ='0' und ='1' sparen und der Code wird übersichtlicher.
@ Manuel Kampert (manuel1139) >Nun kann ich ja aber nicht schreibend auf ein Signal aus mehreren >Prozessen zugreifen. Wie würde man das lösen? Ich würde den Prozess auf >jeden fall gerne aufsplitten oder bin ich da auf dem Holzweg? 1.) Prüfen ob man WIRKLICH auf ein Signal mehrfach schreibend zugreifen muss. 2.) Nach Möglichkeit mehrere Signale verwenden und dann über eine MUX zusammenführen. MfG Falk P.S. Bei IF abfragen kann man auch gegen normale Dezimalzahlen vergleichen, das macht den Code lesbarer.
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.