Hi, habe gerade noch zwei Probleme versucht zu lösen: 1. kann ModelSim keine Signale als Parameter in Prozeduren treiben? Beispiel: signal s: std_logic; .. process(...) begin ... proc_foo(s); -- <== ModelSim motzt, ISim nicht ... end process; .. Fehlermeldung: >> Cannot drive signal "tbidx" from procedure "proc_foo" << Unter ISim(Xilinx) ist das kein Problem, sollte auch gem. VHDL-Spec möglich sein (Signale sind schliesslich als Parametertyp möglich). 2: Ein kleineres Problem in einer Prozedur: Ist v ein std_logic_vector(7 downto 0), dann meckert ModelSim bei procedure(..) begin .. for i in v'left to v'right loop proc_foo2(v(i)); end loop; end; ModelSim-Error: "..v is not a static expression..", v(5) aber z.B. wird akzeptiert (vermute mal, ModelSim kann die Schleifenvariable nicht als Konstante umwandeln). ISim hat auch hier kein Problem. Gruss
Edit (Fehlermeldung in 1.): >> Cannot drive signal "s" from procedure "proc_foo" <<
Sigi schrieb: > signal s: std_logic; > .. > process(...) > begin > ... > proc_foo(s); -- <== ModelSim motzt, ISim nicht > ... > end process; > .. Wie ist denn proc_foo definiert? Duke
Einfaches Beispiel: procedure proc_foo(signal s: inout std_logic) is begin if s = '1' then s= '0'; else s= '1'; end if; end; Wird sowohl von ISE+ISim,Quartus+ModelSim akzeptiert, der Aufruf innerhalb eines Prozesses führt aber in ModelSim zu einer Fehlermeldung.
Mein ModelSim motzt hier nicht:
1 | library ieee; |
2 | use ieee.std_logic_1164.all; |
3 | |
4 | |
5 | entity procedure_test is |
6 | end entity procedure_test; |
7 | |
8 | |
9 | architecture test of procedure_test is |
10 | |
11 | procedure proc_foo(signal s : inout std_logic) is |
12 | begin
|
13 | if s = '1' then |
14 | s <= '0'; |
15 | else
|
16 | s <= '1'; |
17 | end if; |
18 | end; |
19 | |
20 | signal s : std_logic := '0'; |
21 | |
22 | begin
|
23 | |
24 | s <= not s after 10 ns; |
25 | |
26 | process(s) |
27 | begin
|
28 | proc_foo(s); -- <== ModelSim motzt, ISim nicht |
29 | end process; |
30 | |
31 | end architecture test; |
Es macht was es soll: s nimmt den Zustand 'X' an. Duke
Sigi schrieb: > Einfaches Beispiel: ... Duke Scarring schrieb: > Mein ModelSim motzt hier nicht: ... Wie man schön sieht: eine Fehlersuche ohne KOMPLETTEN Quellcode ist eigentlich nicht möglich und unsinnig. Und wie üblich liegt der Fehler ausserhalb des geposteten Quellcodeabschnitts...
Lothar Miller schrieb: > Fehlersuche ohne KOMPLETTEN Quellcode ist Besser wäre sogar noch ein Minimalbeispiel... Duke
Quellcode oder Minimalbeispiel sind natürlich besser, aber leider ist die verwendete Bibliothek sehr umfangreich, und ins Netz kann ich sie auch nicht stellen. Nur soviel: Es geht um Testbenches. Eine Scanner/Parser-Lib (in VHDL) liesst Testbench-Scripts ein und generiert daraus di DUT-Signale (genau hier tritt das Probem auf). Die Signale werden dabei sehr tief in die Lib-Funktionen weitergereicht, ein einfaches Beispiel kann da also oft nur schemenhaft beschrieben werden. Habe gehofft, jemand hier ist schonmal auf ein vergleichbares Problem gestossen. @Duke Scarring, habe dein Beispiel auch mal schnell eingegeben und an meinen Kontext angepasst, klappt auch bei mir. Ich habe aber inzwischen das Problem(1) gefunden: Die Prozedur proc_foo wird nicht aus einem Process, sondern aus einer Prozedur "TBProc" heraus aufgerufen (falsche Annahme von mir). Die Prozedur TBProc selbst hat keine Parameter (muss also das Signal "sig" kennen, was ja auch der Fall ist). Das aber erlaubt ModelSim nicht, wohl aber ISim (habe ich auch in einem kleinen Beispiel replizierern können). Zu Problem(2): Leider ist ModelSim nicht in der Lage, aus einer Schleifenvariable (als Index) und einem Signal einen konstanten Ausdruck (~=Signal-Name) generieren. Gruss
Sigi schrieb: > Nur soviel: Es geht um Testbenches. > Eine Scanner/Parser-Lib (in VHDL) liesst Testbench-Scripts ein > und generiert daraus di DUT-Signale (genau hier tritt das Das hab ich auch mal gemacht. Letztendlich macht das keinen Spass, da andere Sprachen besser dafür geeignet sind, Testvektoren zu erzeugen und die Ergebnisse zu prüfen (z.B. Python oder Matlab). VHDL nutze ich dann nur noch um diese Stimuli einzulesen oder die Ergebnisse in eine Datei rauszuschreiben. Duke
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.