www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Process aufsplitten bzw Multisource Problem


Autor: Manuel Kampert (manuel1139)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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;

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach doch einen eigenen Prozess für das addr_in-Inkrement:
if (write_to_uart = '0') or (write_done = '0') then
  addr_in <= addr_in + 1; -- "+ '1'" sieht komisch aus
end if;

Übrigens darfst du gerne Boolean-Variablen verwenden, damit kannst du 
dir die vielen ='0' und ='1' sparen und der Code wird übersichtlicher.

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.