Ich möchte Folgendes tun:
Ich habe eine komplexe Steuerung, die anhand von Interface-Signalen in
bestimmte Zustände gefahren werden kann und dann eine Maschine steuert.
Allerdings sind da die timings sehr wichtig: Um einen Befehl komplett
abzuarbeiten, müssen teilweise bis zu 20 Signale gesetzt und auf
Reaktionen der Maschine gewartet werden, z.B. so:
1 | wait for free = 1;
|
2 | siga <= "011"; sigb <= '1'; trigger <= '0';
|
3 | wait for respond = 1;
|
4 | siga <= "111"; sigb <= '0'; trigger <= '0';
|
5 | wait for respond = 0;
|
6 | trigger <= '0';
|
7 | start <='1';
|
... etc. , d.h. es werden richtige Abläufe hinein injiziert! Von diesen
Befehls- und Ablaufgruppen gibt es über 50 (denkbare) und um das FPGA zu
testen, sollen allemöglichen Kombinationen , vor allem die "faulen"
durchgefahren werden. Also will ich die Befehle zusammenfassen und etwas
haben wie :
1 | config_machine1();
|
2 | -- config_machine2();
|
3 | -- oder auch check_status();
|
4 | make_rise();
|
5 | getall_data();
|
6 | reset_machine();
|
7 | getall_data(adr);
|
8 | stop_simulation();
|
9 | get_data(adr);
|
Herauskommen soll eine univserelle Befehlsliste, mit denen
Maschinenläufe simuliert werden können. Leider unterscheiden sich aber
die zu setzenden Signale jeweils und es werden auch nicht immer alle
gebraucht, sodaß ich nicht mit einer Schittstelle auskomme. Z.B. muessn
bei den config-Möglichkeiten ganz andere Signale bedient und überwacht
werden, als bei einem Datantransport, oder einer Sicherheitsabfrage. Bei
dem get_data müssen richtige Microcontroller-Buszugriffe gefahren und
der Bus abgehört werden, um an Adressen heranzukommen
Fragen:
1) Brauche ich dazu mehrere Packages oder einfach nur andere Befehle
innerhalb eines Packages?
2) Wie schaffe ich es, daß ich die Befehlsliste von der grundlegenden
Signalgeneration trenne? In der Hierarchie "oben" soll nur stehen
config1(a,b,c) oder config1(b,c) oder config2(a,b,d) und "unten" soll
dann je nach Befehle die entsprechende statemachine (aus waits z.B.
zusammengesetzt) laufen.
Der Tester soll quasi nur noch Befehle eintippen und keine Signale
sehen.
3) Ich habe schon mit Packages gearbeitet, aber nur mit einer Stufe.
Nun wären es ja zwei Stufen ineinander verschachtelt. Geht das so? Wie
mache ich das mit den Signalen? Muss im oberen Packgae, oder in dem
VHDL-Modul, das das obere PAckgae aufruft, alles verdrahtet sein?
Ich will nämlich möglichst nicht alle Signale über die gesamte Entity
führen, sondern im Package jeweils nur das mitgeben, was unbedingt
gebraucht wird.
Die ganzen lolevel Signale z.B. sind über 100, die an den
Maschinencontroller gehen. Gebraucht werden davon bestenfalls 20 und je
Befehl rund 5-10.
Wäre gut, wenn ich da einen Tip bekommen könnte.