Ich will einen std_logic_vector + 1 in einer Testbench rechnen. Normalerweise sollte ja einfach diese Programmzeile das Problem lösen: A <= std_logic_vector(unsigned(A) + 1; Dabei kommt jedoch zuerst 0000...000X und dann nach einer weiteren Clockschaltung XXXX...XXXX heraus. Ich benutze folgende Pakete: IEEE.std_logic_1164.all IEEE.std_logic_unsigned.all IEEE.std_logic_textio.all IEEE.std_logic_numeric_std.all std.textio.all
Mach mal die IEEE.std_logic_unsigned.all raus. Zuviel ist auch nicht gut... Gruß Marius
Jetzt bekomme ich einen Fehler während des Checks, und zwar kennt er angeblich keine Definition für "+".
Tandrael schrieb: > Jetzt bekomme ich einen Fehler während des Checks, und zwar kennt > er > angeblich keine Definition für "+". Ich habe mich geirrt. Ich bekomme jetzt in der Simulation die ganze Zeit nur Us.
Tandrael schrieb: > Tandrael schrieb: >> Jetzt bekomme ich einen Fehler während des Checks, und zwar kennt >> er >> angeblich keine Definition für "+". > > Ich habe mich geirrt. Ich bekomme jetzt in der Simulation die ganze Zeit > nur Us. Hast du den Vector überhaupt initialisiert?
Tandrael schrieb: > Ich habe mich geirrt. Ich bekomme jetzt in der Simulation die ganze Zeit > nur Us Und jetzt liest du noch nach, für was der Wert 'U' steht, dann sollte dir ein Licht aufgehen ;-)
HalloMalloPallo_HMP schrieb: > Hast du den Vector überhaupt initialisiert? Ja, als komplett 0. Theoretisch müsste also nach einem Clock-Durchgang statt 0000...0000 0000...0001 dastehen. Olga schrieb: > Und jetzt liest du noch nach, für was der Wert 'U' steht, dann sollte > dir ein Licht aufgehen ;-) Wie schaue ich das nach?
In deinem VHDL Buch ;-) Aber ums abzukürzen: 'U' bedeutet "uninitialized". Da ist also irgendwas in deiner Rechnung nicht richtig initialisiert.
Olga schrieb: > In deinem VHDL Buch ;-) Aber ums abzukürzen: 'U' bedeutet > "uninitialized". Da ist also irgendwas in deiner Rechnung nicht richtig > initialisiert. Vielen Dank, aber irgendsoetwas hatte ich mir schon gedacht. Die Frage ist nun, was stimmt nicht.
[vhdl] LIBRARY IEEE; USE IEEE.std_logic_1164.all; USE IEEE.STD_LOGIC_TEXTIO.ALL; USE IEEE.NUMERIC_STD.ALL; USE STD.TEXTIO.ALL; ENTITY testbench IS END testbench; ARCHITECTURE testbench_arch OF testbench IS COMPONENT prakt2 PORT ( A: in std_logic_vector (31 downto 0); B: in std_logic_vector (31 downto 0); F: in std_logic_vector (2 downto 0); Y: out std_logic_vector (31 downto 0); Clock: in std_logic ); END COMPONENT; --develop signals to stimulate SIGNAL A : std_logic_vector (31 downto 0) := (31 downto 0 => '0'); SIGNAL B : std_logic_vector (31 downto 0) := (31 downto 0 => '0'); SIGNAL F : std_logic_vector (2 downto 0) := (2 downto 0 => '0'); SIGNAL Y : std_logic_vector (31 downto 0) := (31 downto 0 => '0'); SIGNAL Clock : std_logic := '0'; SIGNAL V : std_logic_vector (31 downto 0) := (31 downto 1 => '0', others => '1'); --UUT means unit under test BEGIN UUT : prakt2 --map signals on right to entitys on the left PORT MAP ( A => A, B => B, F => F, Y => Y, Clock => Clock ); signal_Clock: process begin wait for 1 ns; Clock <= NOT Clock; end process; signal_A: process(Clock) begin if rising_edge(Clock) then A <= std_logic_vector(unsigned(A) + 1); end if; end process; END testbench_arch; [vhdl]
Also da dürfte eigentlich in A gar kein 'U' auftreten.
Olga schrieb: > Also da dürfte eigentlich in A gar kein 'U' auftreten. Tja, so geht es mir auch schon seit zwei Stunden, und ich kann den Grund für die vielen Us nicht finden. Für mich steht das V in VHDL ab jetzt für Verzweiflung.
Tandrael schrieb: > Olga schrieb: >> Also da dürfte eigentlich in A gar kein 'U' auftreten. > > Tja, so geht es mir auch schon seit zwei Stunden, und ich kann den Grund > für die vielen Us nicht finden. Für mich steht das V in VHDL ab jetzt > für Verzweiflung. Geht denn beu dir?
franke schrieb: > geht > > A <= A + '1'; > > ??? Mit den Anführungsstrichen bekomme ich wieder die Xe.
hab's Interesse halber mal in ALDEC reingezogen... da geht's. gruß
franke schrieb: > hab's Interesse halber mal in ALDEC reingezogen... > > da geht's. > > gruß Ja, ein Kumpel hat das beinahe gleiche Programm, die Abläufe sind genau dieselben, trotzdem funktioniert es nicht.
Tandrael schrieb: > SIGNAL A : std_logic_vector (31 downto 0) := (31 downto 0 => '0'); > SIGNAL B : std_logic_vector (31 downto 0) := (31 downto 0 => '0'); > SIGNAL F : std_logic_vector (2 downto 0) := (2 downto 0 => '0'); > SIGNAL Y : std_logic_vector (31 downto 0) := (31 downto 0 => '0'); > SIGNAL Clock : std_logic := '0'; > SIGNAL V : std_logic_vector (31 downto 0) := (31 downto 1 => '0', others > => '1'); kann es sein, dass deine Initialisierung (31 downto 0 => '0') usw. schief geht? Ich habe das so noch nie gesehen. Ich wuerde z.B. schreiben:
1 | ...
|
2 | SIGNAL Y : std_logic_vector (31 downto 0) := (others => '0'); |
3 | ...
|
4 | SIGNAL V : std_logic_vector (31 downto 0) := (0 => '1', others => '0'); |
Bei uns funktioniert die Deklaration; Alle Werte sind am Anfang mit 0 initialisiert, der Fehler tritt erst nach der ersten Addition auf.
Zeig doch mal einen Screenshot der Waveform deiner Testbench...
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.