Hallo zusammen,
also ich stehe gerade voll auf dem Schlauch... Folgendes Problem:
* Simulation mit GHDL
* Ich hab' 'ne TB, in der ich eine 'procedure' aufrufe, die mir ein SR
via SPI an ein Modul schickt und die empfangenen Daten in einem weiteren
SR liefert. Das funktioniert wunderpraechtig
Jetzt moechte ich einige der in der TB beschriebenen Sequenzen in eine
procedure in ein Package auslagern (damits uebersichtlicher wird). Damit
rufe ich die o.g. 'procedure' aus einer anderen procedure auf.
Und das tut hier nicht, ich kriege nur 'U' in meinem Empfangsregister
zurueck... Der Code ist m.M. nach der gleiche wie vorher in der TB. Ich
'sehe' in gtkwave, dass die SPI Signale richtig an mein DUT rausgehen,
und ich sehe auch, dass die richtigen Daten aus dem DUT rausgehen.
Hier mal der komplett runtergestrippte Code der procedure:
1 | procedure test_spi (signal nCS : out std_logic;
|
2 | signal SCK : out std_logic;
|
3 | signal MOSI : out std_logic;
|
4 | signal MISO : in std_logic
|
5 | ) is
|
6 | variable spi_in : std_logic_vector (31 downto 0) := (others => '0');
|
7 | variable spi_out : std_logic_vector (31 downto 0) := (others => '0');
|
8 | begin
|
9 | spi_in := x"B500_0000";
|
10 | cmd_spi_proc (spi_in, spi_out, nCS, SCK, MISO, MOSI);
|
11 | assert spi_out (31 downto 27) = "ZZZZZ"
|
12 | report "return data (31..27) is not high-Z!" severity failure;
|
13 | assert spi_out (26 downto 0) /= "ZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
|
14 | report "SPI return data (26..0) is high-Z!" severity failure;
|
15 | end test_spi;
|
und die GHDL Fehlermeldung:
1 | ...:(assertion failure): SPI return data (26..0) is high-Z!
|
2 | ...:error: assertion failed
|
3 | ...:error: simulation failed
|
4 | /usr/lib/ghdl/bin/ghdl: compilation error
|
Wie gesagt, wenn ich obigen Code direkt in die TB setze, dann
funktioniert das. Es muesste also was mit 'call procedure within a
procedure' zu tun haben...
Vlt. hat ja jemand lange Weile uebers WE und liesst das und hat 'nen
Tipp :o)