Hallo,
ich bekomme bei der Simulation eines Roms die unten stehende
Fehlermeldung. Ich habe beide Dateien angehaengt. Mein Ziel war es eine
Waveform ins Rom zu schreiben und dann entsprechend auszugeben. Das
funktionierte anfaenglich auch bis ich die Adressenliste auf 256
vervolstaendigt habe. Nun weis ich nicht, warum die Simulation dann
immer stoppt. Wenn ich addr bis 2F laufen lasse, funktioniert es. Ich
kann die daten und adressen im Simulator vergleichen.
Vielen Dank,
Mark
Fehlermeldung:
ISim P.20131013 (signature 0x7708f090)
WARNING: A WEBPACK license was found.
WARNING: Please use Xilinx License Configuration Manager to check out a
full ISim license.
WARNING: ISim will run in Lite mode. Please refer to the ISim
documentation for more information on the differences between the Lite
and the Full version.
This is a Lite version of ISim.
Time resolution is 1 ps
Simulator is doing circuit initialization process.
Finished circuit initialization process.
ERROR: at 100 ns: Delay 1180000 fs is not greater than previous waveform
element delay 1270000 fs in assignment for target signal addr in File
"C:/_Xilinxprj/Rom/rom/roms_constant_tb.vhd" Line 92
ERROR: In process roms_constant_tb.vhd:stim_proc
INFO: Simulator is stopped.
ISim>
Mark W. schrieb:> ERROR: at 100 ns: Delay 1180000 fs is not greater than previous waveform> element delay 1270000 fs in
Naja, was könnte das wohl sein? Ich tippe auf einen Copy-Paste-Fehler.
Also gut. Datei aufgemacht und bei 1270 ns geschaut:
Mit dieser after Zuweisung wird nicht zwischen den Zuweisungen für
die angegebene Zeit gewartet, sondern diese Zeiten gelten ab
Simulationsstart.
Wenn du zwischen den Zuweisungen warten willst, dann musst du in einem
Prozess etwa so schreiben:
1
stim_proc:process
2
begin
3
-- hold reset state for 100 ns.
4
waitfor100ns;
5
6
--wait for clk_period*10;
7
8
-- insert stimulus here
9
addr<=x"00";waitfor10ns;
10
addr<=x"02";waitfor20ns;
11
addr<=x"03";waitfor30ns;
12
:
13
:
Aber du kannst dir doch einfach mal anschauen, wie Andere das gemacht
haben...
Das schreibt man eigentlich nicht zusammen:
1
1250ns
EDIT: zu langsam... :-(
Ist aber auch noch früh am Morgen... ;-)
Lothar Miller schrieb:> x"7D" after 1250ns,> x"7E" after 1260ns,
Oben schrieb jemand "vorbildlich". Das kann ich von deinem Post auch
sagen. Ohne dass ich vom eigentlichem Thema was verstehe, so kann sogar
ich nun den Fehler nachvollziehen.
Am Rande:
Das mit den Farben ist ja toll!
An alle,
danke fuer die Tips, habs gerafft.
Das mit dem "wait for" ist natuerlich noch viel besser. Spart ne Menge
Tipparbeit. Sicherlich gehts auch einfacher mit nem Counter, aber ich
moechte da Wellenformen speichern.
Ich habe mir den Stimulus muehselig vorgestern Abend angelegt, war wohl
schon etwas spaet. :-(
Mark
F. Fo schrieb:> Das mit den Farben ist ja toll!
Das geht so:
1
[vhdl]
2
VHDL Code
3
[/vhdl]
Und noch einen Tipp:
Nimm ausschließlich die numeric_std. Am besten gleich von Anfang an.
Dann wird das zwar länger:
1
data<=ROM(conv_integer(addr));
Aber es ist auch eindeutig klar, dass addr unsigned ist:
1
data<=ROM(to_integer(unsigned(addr)));
Na gut, hier ist es evtl. eh' klar, aber du musst nicht weit denken, bis
dir ein Fall einfällt, wo dich interessieren würde, ob die Operation
signed oder unsigned ist:
1
wert<=a+b;
Siehe den Beitrag "IEEE.STD_LOGIC_ARITH.ALL obsolete"
Und das da: http://www.lothar-miller.de/s9y/categories/16-Numeric_Std
Man muss sich nur merken: von und nach integer steht ein to_ davor
(to_integer(), to_unsigned(), to_signed()) und zwischen den Vektoren
wird nur gecastet (signed(), unsigned(), std_logic_vector()). Das wars,
alle Konvertierungen erledigt.
Mark W. schrieb:> Ich habe mir den Stimulus muehselig vorgestern Abend angelegt, war wohl> schon etwas spaet. :-(
Ich hätte das eher mit einer Schleife gemacht. In Testbenches kann und
darf man die ausgiebig verwenden:
1
LIBRARYieee;
2
USEieee.std_logic_1164.ALL;
3
USEieee.numeric_std.ALL;
4
5
ENTITYroms_constant_tbIS
6
ENDroms_constant_tb;
7
8
ARCHITECTUREbehaviorOFroms_constant_tbIS
9
10
-- Component Declaration for the Unit Under Test (UUT)