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.