Forum: FPGA, VHDL & Co. packages geschickt nutzen


von gast (Gast)


Lesenswert?

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.

von Gast (Gast)


Lesenswert?

Ein paar Fragen weil ich mir nicht sicher bin, ob ich dich richtig 
verstehe. Wieviel hast du schon mit VHDL gemacht und was genau soll das 
jetzt werden? Eine Testbench oder soll das ganze wirklich auf einem FPGA 
laufen?
Das hört sich so an, als willst du VHDL für Nutzereingaben als 
sequentielle Programmiersprache verwenden?

von gast (Gast)


Lesenswert?

Ja, in etwa so. Es soll natürlich eine Testbench werden. Ich bin auch 
schon weitergekommen. Mein wesentliches Verständnisproblem ist, wie ich 
am minimalsten vorgehe. Wenn ich z.B. Kommandos formuliere, komme ich 
zwar zu sehr einfach Befehlen, muss aber immer massenweise Signale dem 
Packgage mitgeben, die es dann bedient.

Die Hierarchie der Architektur ist momentan so:

Toplevel
  -  UHT-Controller(Signalliste...)
  -  DDC-Steuerung
  -      - Inputs
  -      - Outputs
  -      - FSM

Faktisch ist also der Controller mit einem Interface mit der Steuerung 
verbunden. Diese Interface muss bedient werden.

Im Controller gibt es dazu in der Entity massenweise Signale und Busse.

Die Hierarchie der Packages ist momentan so:

UHT-Controller
- Entity
- library Package UHT-Kommandos
- Architecture


Im Package "UHT-Kommandos" gibt es wieder Packages mit Controlls:

- library Package DDC-Controls (Signalliste...)
- library Package ASM-Controls (Signalliste...)
- library Package BUS-Controls (Signalliste...)

Die dort vergrabenen Funktionen bedienen die Signale.

Allerdings muss ich allemöglichen Signale wie z.B. Clocks und Resets 
durch alle Signallisten der Packgages druchschleifen, weil sie z.t. 
unten gebraucht werden. Das sin massenweise Listen.

Wie komme ich da drum herum?

Ich hätte gern "oben" nur die Befehle selber und nur die Signale in der 
Liste, die auch wirklich mitgegebn werden müssen, weil sie 
Kommandospezifisch sind, also wie pben beschrieben "stop_simulation()" 
muss nur ein paar Signale nullen und get_data(adr) nur Adressen 
runterschicken.

Geht das überhaupt ?

Ich C gibt es auch auch Funktionsaufrufe, die auf globalen Variablen 
arbeiten, sodaß man in den Funktionen nur die Programmstruktur verpacken 
kann (Übersicht) und mit void arbeitet.

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.