mikrocontroller.net

Forum: FPGA, VHDL & Co. VHDL-Prozeduraufruf aus einer anderen Prozedur


Autor: Martin R. (herki)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ist es möglich eine Prozedur aus einer anderen Prozedur heraus 
aufzurufen?

Es handelt sich hierbei nur um eine Simulation und muss deshalb nicht 
synthesefähig sein.

Im Moment sieht es bei mir wie folgt aus:
procedure Daten_anlegen
(
signal Daten_Telegramm_1: IN  std_logic_vector (gSPI_Breite - 1 downto 0);
signal CRC_Telegramm_1  : IN  std_logic_vector (gSPI_Breite - 1 downto 0);
signal Daten_Telegramm_2: IN  std_logic_vector (gSPI_Breite - 1 downto 0);
signal CRC_Telegramm_2  : IN  std_logic_vector (gSPI_Breite - 1 downto 0);
signal poSPI_CLK:  IN    STD_LOGIC;  -- SPI_Clk
signal poSPI_CS_AL  :  out    STD_LOGIC;      -- SPI CS (Active Low)
signal poSPI_MOSI  :  out    STD_LOGIC;      -- SPI MOSI
signal poSPI_MISO   :  OUT    STD_LOGIC      -- SPI MISO
) is

begin

SPI_Bus_anlegen (SPI_Daten => Daten_Telegramm_1, poSPI_CLK=>poSPI_CLK, poSPI_CS_AL=>poSPI_CS_AL, poSPI_MOSI=> poSPI_MOSI, poSPI_MISO=>poSPI_MISO);
SPI_Bus_anlegen (SPI_Daten => CRC_Telegramm_1, poSPI_CLK=>poSPI_CLK, poSPI_CS_AL=>poSPI_CS_AL, poSPI_MOSI=> poSPI_MOSI, poSPI_MISO=>poSPI_MISO);
SPI_Bus_anlegen (SPI_Daten => Daten_Telegramm_2, poSPI_CLK=>poSPI_CLK, poSPI_CS_AL=>poSPI_CS_AL, poSPI_MOSI=> poSPI_MOSI, poSPI_MISO=>poSPI_MISO);
SPI_Bus_anlegen (SPI_Daten => CRC_Telegramm_2, poSPI_CLK=>poSPI_CLK, poSPI_CS_AL=>poSPI_CS_AL, poSPI_MOSI=> poSPI_MOSI, poSPI_MISO=>poSPI_MISO);
end Daten_anlegen;


procedure SPI_Bus_anlegen
(
signal SPI_Daten :   IN    std_logic_vector(gSPI_Breite - 1 downto 0);
signal poSPI_CLK:  IN    STD_LOGIC;  -- SPI_Clk
signal poSPI_CS_AL  :  out    STD_LOGIC;      -- SPI CS (Active Low)
signal poSPI_MOSI  :  out    STD_LOGIC;      -- SPI MOSI
signal poSPI_MISO   :  OUT    STD_LOGIC      -- SPI MISO
) is
                                                                       

begin
  wait until falling_edge(poSPI_CLK);
  poSPI_CS_AL <= '1';
  wait until falling_edge(poSPI_CLK);
  poSPI_CS_AL <= '0';
  poSPI_MOSI <= SPI_Daten(7);
  wait until rising_edge(poSPI_CLK);
  wait until falling_edge(poSPI_CLK);
  poSPI_MOSI <= SPI_Daten(6);
  wait until rising_edge(poSPI_CLK);
  wait until falling_edge(poSPI_CLK);
  poSPI_MOSI <= SPI_Daten(5);
  wait until rising_edge(poSPI_CLK);
  wait until falling_edge(poSPI_CLK);
  poSPI_MOSI <= SPI_Daten(4);
  wait until rising_edge(poSPI_CLK);
  wait until falling_edge(poSPI_CLK);
  poSPI_MOSI <= SPI_Daten(3);
  wait until rising_edge(poSPI_CLK);
  wait until falling_edge(poSPI_CLK);
  poSPI_MOSI <= SPI_Daten(2);
  wait until rising_edge(poSPI_CLK);
  wait until falling_edge(poSPI_CLK);
  poSPI_MOSI <= SPI_Daten(1);
  wait until rising_edge(poSPI_CLK);
  wait until falling_edge(poSPI_CLK);
  poSPI_MOSI <= SPI_Daten(0);
  wait until rising_edge(poSPI_CLK);
  poSPI_CS_AL <= '1';          
  wait until rising_edge(poSPI_CLK);
end SPI_Bus_anlegen ;


Im Moment meckert mein EDA: 'Unknown identifier "SPI_Bus_anlegen"'...

Natürlich könnte ich alles auch in eine Proz. packen. Ich möchte es nur 
wissen.

Über eine kurze aAntwort freue ich mich sehr.

VG


Martin

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schnellschuss :
Gib die Prozedure Deklaration(en) in ein package und includiere das 
package dort, wo die Prozedure Daten_anlegen definiert wird.

Autor: dnalorac (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ebenfalls Schnellschuss:

In Daten_anlegen ist SPI_Bus_anlegen noch nicht deklariert. Vielleicht 
reicht es schon, die Reihenfolge der Deklarationen zu vertauschen.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin R. schrieb:
> Ist es möglich eine Prozedur aus einer anderen Prozedur heraus
> aufzurufen?
Fazit: Ja.
Die aufgerufene Prozedur muß beim Aufruf allerdings bekannt sein.

Autor: Martin R. (herki)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Entschuldigt bitte die späte Reaktion.

Es funktioniert.
Lösungsweg: Prozedur SPI_Bus_anlegen muss im Code über der Prozedur 
Daten_anlegen aufgeführt sein.

Dankeschön und einen schönen Tag noch

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.