Hallo,
ich arbeite momentan an einer Peripherie für einen Leon3 Softcore (AHB
Bus) von Gaisler. Um die Peripherie zu testen benutze ich den
mitgelieferten ambatest framework von
GRLIB(http://www.gaisler.com/index.php/downloads/leongrlib). Nun habe
ich ein Signal ctrl das einen Master der auf den AHB Bus zugreift
steuert. Leider werden meine, an eine PROCEDURE(ahbwrite) übergebenen
Werte, nicht auf ctrl geschrieben.
1
ENTITYtb_nocIS
2
ENDtb_noc;
3
4
ARCHITECTUREbehaviorOFtb_nocIS
5
6
-- Component Declaration for the Unit Under Test (UUT)
Man sieht dass meine übergebenen Werte nicht geschrieben werden anhand
der Simulation im Anhang. Im Bild sieht man ein Signalwechsel bei 210ns,
aber die Werte ändern sich nicht.
Hier noch der Testbench AHB Master:
1
componentahbtbmis
2
generic(
3
hindex:integer:=0;
4
hirq:integer:=0;
5
venid:integer:=0;
6
devid:integer:=0;
7
version:integer:=0;
8
chprot:integer:=3;
9
incaddr:integer:=0);
10
port(
11
rst:instd_ulogic;
12
clk:instd_ulogic;
13
ctrli:inahbtbm_ctrl_in_type;
14
ctrlo:outahbtbm_ctrl_out_type;
15
ahbmi:inahb_mst_in_type;
16
ahbmo:outahb_mst_out_type
17
);
18
endcomponent;
Ich sitze seit Tagen an dem Problem und verstehe nicht warum nicht auf
das Signal geschrieben wird.
MfG
Ok da hat ich mich verschaut. Versuch mal mit Text Ausgaben dich an die
Stelle zu tasten wo es hängt.
Etwas skeptisch sehe ich die Verwendung von inout in der Prozedur
Ja mein Gedanke war auch das es mit dem INOUT zu tun haben muss. Ich
habe nie mit INOUT gearbeitet bis jetzt. Ich habe versucht das INOUT zu
entfernen aber es ist zum Chaos geworden mit der Übersicht in der
Package, und habe es sein lassen.
Ich wollte mal schauen was man hier dazu sagen würde.
Ich habe mal eine Textausgabe eingebaut gehabt und die Prozedure läuft
durch. Die Testbench wird ja bis ahbtbmdone ausgeführt (Sieht man in der
Abschluss Textausgabe "AHBTBM Testbench Done").
Elvin S. schrieb:> Ich habe nie mit INOUT gearbeitet bis jetzt.
Es ist innerhalb eines FPGAs auch sehr unschön, weil es weit weg von der
tatsächlichen Hardware ist. Wenn schon records dann wenigstens getrennt
nach Ein- und Ausgängen. Sonst versteigt man sich in aller
Bidirektionalität und bekommt einen Buskonflikt.
Ich kann mich mit der Gaisler-Schreib- und Denkweise überhaupt nicht
anfreunden...
Die Simulation sieht genauso aus wie mein erster Anhang.
???
Ich frage anscheinend wird was geschrieben bei 210ns aber es ist nach
wie vor nicht was ich übergebe zB "010" für ctrl.i.ac.hsize.
Elvin S. schrieb:> ahbwrite(x"40000000", x"12345679", "10", 2, true , ctrl.o, ctrl.i);
vielleicht geht's wenn der record ganz getrennt ist. Ich mische auch nie
Inputs und Outputs.
Lattice User schrieb:> Ich habe einen Verdacht:> Füge mal ein kleines delay nach den beiden waits in der ahbwrite> procedure hinzu:
Das wars! Jetzt wo ichs sehe ^^ Oh mann
Anscheinend wird alles in einem gemacht und nicht mehr auf die nächste
rising_edge(ctrlo.clk) gewartet so dass das idle signal wieder angelegt
wird (Was für ein S******). Warum wartet er nicht auf die nächste
positive Taktflanke?
Oh mann,
jetzt sehe ich auch ich muss nur appidle auf false setzen. Danke
Lattice, Klakx, Lothar für eure Unterstützung!
Kann mir jemand noch ne Erklärung geben warum rising_edge auf die
vergangene Taktflanke reagiert, obwohl diese 2ns her ist?
MfG
Kleiner Nachtrag:
Ich habe jetzt rausgefunden, dass das Problem am ISim vom Xilinx liegt.
Ich habe das selbe auf Modelsim probiert und es läuft wie geschmiert.
lg