Forum: FPGA, VHDL & Co. Funktionsaufrufe kapseln


von Bernd (Gast)


Lesenswert?

Ich möchte meine VHDL-Testbench besser strukturieren und z.B. 
organisierte Abläufe von der eigentlichen Testumgebung trennen, weil 
sowohl Ablauf, als auch Testumgebung varieren. Z.B. habe ich mehrere 
Hardwarekonstellationen (altes Prozessorboard, neues Prozessorbard mit 
jeweils alten AD-Wandlern und neuen Wandlern), die mit unterschiedlichen 
Testbenches zusammengesetzt sind, welche aber auf dieselbe Weise geprüft 
werden müssen. Da ich die verschiedenen Testbaläufe nur einmal schreiben 
und dann zu den Testbenches hinzuladen will, sollen die als 
Funktionsaufrufe abgespalten werden und in eine eigene Datei. Die 
Funktionen sollen aber trotzdem die Signale an die einzelnen Module in 
der Testumgebung anlegen können.

Problem: Wie komme ich über die entity-Grenze hinweg?

von Fpga4u (Gast)


Lesenswert?

Hallo,

verwende ein Package, in dem du globale Signale definierst.
Diese globalen Signale können in der gesamten Design-Hierarchie über die 
Entity-Grenzen hinweg gesetzt und abgefragt werden. Das Package muss 
natürlich im entsprechenden Modul eingebunden werden :
library work;
use work.pkg_test.all;


Vorsicht ist geboten, wenn man das globale Signal von mehreren Modulen 
aus treiben möchte, das geht ohne Weiteres schief.

Dieses Vorgehensweise funktioniert ausschließlich für Simulation.

Gruß,
Fpga4u

von Fpga4u (Gast)


Lesenswert?

Packages allgemein erleichtern das Funktion/Prozedur-Handling

von Bernd (Gast)


Lesenswert?

>verwende ein Package, in dem du globale Signale definierst.

Wie mache ich das? Ich habe oben in Package ein Signal definiert, kann 
es aber nicht einmal IM Package selber treiben.

"cannot drive this signal from this subprogra"
1
package drive_output is
2
  signal global_signal : std_logic_vector(7 downto 0);
3
  
4
-- drive output signal
5
procedure move_motor
6
(
7
  signal inputs : in  std_logic_vector(47 downto 0);
8
  signal outputs : out std_logic_vector(35 downto 0);
9
  signal code : in  std_logic_vector(15 downto 0)
10
);

Ich treibe ich alle Signale über outputs mit move_motor 
(inputs,outputs,code); und möchte eigentlich dahin kommen, daß ich 
schreiben kann :

move_motor (code);

Im Package soll dann je nach Code verzeigt werden und in Abhängigkeit 
der Inputs die Outputs getrieben werden.



1
move_motor (inputs,outputs,code);

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.