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


von Martin (Firma: Angestellt) (herki)


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:
1
procedure Daten_anlegen
2
(
3
signal Daten_Telegramm_1: IN  std_logic_vector (gSPI_Breite - 1 downto 0);
4
signal CRC_Telegramm_1  : IN  std_logic_vector (gSPI_Breite - 1 downto 0);
5
signal Daten_Telegramm_2: IN  std_logic_vector (gSPI_Breite - 1 downto 0);
6
signal CRC_Telegramm_2  : IN  std_logic_vector (gSPI_Breite - 1 downto 0);
7
signal poSPI_CLK:  IN    STD_LOGIC;  -- SPI_Clk
8
signal poSPI_CS_AL  :  out    STD_LOGIC;      -- SPI CS (Active Low)
9
signal poSPI_MOSI  :  out    STD_LOGIC;      -- SPI MOSI
10
signal poSPI_MISO   :  OUT    STD_LOGIC      -- SPI MISO
11
) is
12
13
begin
14
15
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);
16
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);
17
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);
18
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);
19
end Daten_anlegen;
20
21
22
procedure SPI_Bus_anlegen
23
(
24
signal SPI_Daten :   IN    std_logic_vector(gSPI_Breite - 1 downto 0);
25
signal poSPI_CLK:  IN    STD_LOGIC;  -- SPI_Clk
26
signal poSPI_CS_AL  :  out    STD_LOGIC;      -- SPI CS (Active Low)
27
signal poSPI_MOSI  :  out    STD_LOGIC;      -- SPI MOSI
28
signal poSPI_MISO   :  OUT    STD_LOGIC      -- SPI MISO
29
) is
30
                                                                       
31
32
begin
33
  wait until falling_edge(poSPI_CLK);
34
  poSPI_CS_AL <= '1';
35
  wait until falling_edge(poSPI_CLK);
36
  poSPI_CS_AL <= '0';
37
  poSPI_MOSI <= SPI_Daten(7);
38
  wait until rising_edge(poSPI_CLK);
39
  wait until falling_edge(poSPI_CLK);
40
  poSPI_MOSI <= SPI_Daten(6);
41
  wait until rising_edge(poSPI_CLK);
42
  wait until falling_edge(poSPI_CLK);
43
  poSPI_MOSI <= SPI_Daten(5);
44
  wait until rising_edge(poSPI_CLK);
45
  wait until falling_edge(poSPI_CLK);
46
  poSPI_MOSI <= SPI_Daten(4);
47
  wait until rising_edge(poSPI_CLK);
48
  wait until falling_edge(poSPI_CLK);
49
  poSPI_MOSI <= SPI_Daten(3);
50
  wait until rising_edge(poSPI_CLK);
51
  wait until falling_edge(poSPI_CLK);
52
  poSPI_MOSI <= SPI_Daten(2);
53
  wait until rising_edge(poSPI_CLK);
54
  wait until falling_edge(poSPI_CLK);
55
  poSPI_MOSI <= SPI_Daten(1);
56
  wait until rising_edge(poSPI_CLK);
57
  wait until falling_edge(poSPI_CLK);
58
  poSPI_MOSI <= SPI_Daten(0);
59
  wait until rising_edge(poSPI_CLK);
60
  poSPI_CS_AL <= '1';          
61
  wait until rising_edge(poSPI_CLK);
62
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

von Klaus F. (kfalser)


Lesenswert?

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

von dnalorac (Gast)


Lesenswert?

Ebenfalls Schnellschuss:

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

von Martin (Firma: Angestellt) (herki)


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

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
Noch kein Account? Hier anmelden.