Hallo,
ich bräuchte mal wieder eure Hilfe.
Ich habe hier eine entity geschrieben, die mir die Eingangssignale
miteinander verknüpft und auf vier Kanälen wieder ausgibt. Das ganze
habe ich in der Simulation getestet und es funktioniert auch soweit.
Allerdings habe ich in der Simulation bisher mit "Force clock" und
"Force constant" gearbeitet. Also wollte ich eine Testbench schreiben.
Nun bricht diese Testbench aber schon beim Start ab. Als Fehler bekomme
ich nur
"ERROR: [USF-XSim-62] 'compile' step failed with error(s).
ERROR: [Vivado 12-4473] Detected error while running simulation. Please
correct the issue and retry this operation.
ERROR: [Common 17-39] 'launch_simulation' failed due to earlier errors."
Anbei die Testbench:
1
libraryIEEE;
2
useIEEE.STD_LOGIC_1164.ALL;
3
useIEEE.NUMERIC_STD.ALL;
4
5
-- Uncomment the following library declaration if using
6
-- arithmetic functions with Signed or Unsigned values
7
--use IEEE.NUMERIC_STD.ALL;
8
9
-- Uncomment the following library declaration if instantiating
RGB_DATA<=STD_LOGIC_VECTOR(to_unsigned(I,RGB_DATA'LENGTH));--hier scheint etwas falsch zu sein
76
77
signal_loop:forJin0to15loop
78
79
-- die folgenden 4 Zeilen scheinen auch falsch zu sein
80
HSYNC<=(STD_LOGIC_VECTOR(to_unsigned(J,4))(0));
81
VSYNC<=STD_LOGIC_VECTOR(to_unsigned(J,4))(1);
82
DATA_EN<=STD_LOGIC_VECTOR(to_unsigned(J,4))(2);
83
LOAD<=STD_LOGIC_VECTOR(to_unsigned(J,4))(3);
84
85
waitforCLK_100_PERIOD;
86
87
endloopsignal_loop;
88
89
waitforCLK_100_PERIOD;
90
91
endloopdata_loop;
92
93
endprocessstim_proc;
94
95
endBehavioral;
Mit den Schleifen wollte ich erreichen, dass alle Möglichkeiten
durchgespielt werden. Dass die erste Schleife nur bis 255 reicht, ist
nur dem ersten Versuch und der Verkürzung der Simulationszeit
geschuldet.
Ersetze ich bei den Zuweisungen innerhalb der Schleifen durch eine
Zuweisung mit
1
...<='1';
so startet die Simulation zumindest. Ich scheine also hier etwas falsch
zu machen.
Könnt ihr mir bitte helfen?
Viele Grüße
Hallo Klakx,
vielen Dank für den Hinweis mit dem Log.
Hier der Auszug des Logs:
INFO: [VRFC 10-163] Analyzing VHDL file
"C:/.../sources_1/new/DataGen.vhd" into library xil_defaultlib
INFO: [VRFC 10-307] analyzing entity DataGen
INFO: [VRFC 10-163] Analyzing VHDL file
"C:/.../sim_3/new/testbench3.vhd" into library xil_defaultlib
INFO: [VRFC 10-307] analyzing entity Data_Gen_tb
ERROR: [VRFC 10-435] cannot index the result of a type conversion
[C:/.../sim_3/new/testbench3.vhd:80]
ERROR: [VRFC 10-435] cannot index the result of a type conversion
[C:/.../sim_3/new/testbench3.vhd:81]
ERROR: [VRFC 10-435] cannot index the result of a type conversion
[C:/.../sim_3/new/testbench3.vhd:82]
ERROR: [VRFC 10-435] cannot index the result of a type conversion
[C:/.../sim_3/new/testbench3.vhd:83]
ERROR: [VRFC 10-1504] unit behavioral ignored due to previous errors
[C:/.../sim_3/new/testbench3.vhd:18]
INFO: [VRFC 10-240] VHDL file C:/.../sim_3/new/testbench3.vhd ignored
due to errors
Es liegt also wohl daran, dass ich nicht auf einen Index der
Typkonvertierung zugreifen kann. Ein Versuch das ganze in einer
variablen zu puffern und dort auf den Index zuzugreifen, scheiterte
ebenfalls mit folgendem Fehler (aus dem Log):
ERROR: [VRFC 10-1551] variable outside of subprogram or process must be
'shared'
Habt ihr sonst einen Tipp für mich, wie ich mein Vorhaben einigermaßen
elegant umsetzen kann?
Guenther schrieb:> Ein Versuch das ganze in einer> variablen zu puffern und dort auf den Index zuzugreifen, scheiterte> ebenfalls mit folgendem Fehler (aus dem Log):>> ERROR: [VRFC 10-1551] variable outside of subprogram or process must be> 'shared'
dann packe die Variable doch einfach in den Prozess
Du versuchst, einen Slice/Index vom Ergebnis einer Typumwandlung zu
bilden. Das ist nicht erlaubt (obwohl es manchmal geschickt wäre und in
Quartus z.b. funktioniert, in ModelSim allerdings nicht).
So (mit der Zuweisung des Ergebnisses der Typumwandlung an eine
Zwischenvariable) würd's funktionieren:
1
--stimulus process
2
stim_proc:process
3
variableslv:std_logic_vector(4downto0);
4
begin
5
6
data_loop:forIin0to255loop
7
8
RGB_DATA<=STD_LOGIC_VECTOR(to_unsigned(I,RGB_DATA'LENGTH));--hier scheint etwas falsch zu sein
Was sollte bei der Zeile "--hier scheint etwas falsch zu sein" nicht
passen? Was erwartest du und was passiert stattdessen?
Markus F. schrieb:> So (mit der Zuweisung des Ergebnisses der Typumwandlung an eine> Zwischenvariable) würd's funktionieren:
Fast... ;-)
1
variableslv:std_logic_vector(4downto0);-- ein Bit zu viel... ;-)
2
3
(HSYNC,VSYNC,DATA_EN,LOAD)<=slv(0to3);-- falsche Reihenfolge, das wird ein leerer Vektor...
Lothar M. schrieb:> Dort ist sie üblicherweise... ;-)
Yup, aber der TO hat wohl versucht, sie in der architecture zu
deklarieren (sonst käme seine Fehlermeldung nicht und die Simu hätte
funktioniert).