Ich bin gerade mitten in einer 12-Stunden-Debug-Sitzung und ich kann nicht, für das Leben von mir, diesen Buckel passieren.Kann Signalwert in VHDL nicht bestimmen
Die Art, wie mein Code eingerichtet wird, habe ich einen 8-Bit-std_logic_vector auf 8 Schalter auf der DE2-115-Platine zugeordnet. Jedes Bit entspricht dem Logikpegel, der durch den relativen Schalter (0 oder 1) aktiviert wird.
Das Ziel ist es, dass das Board darauf wartet, dass einer der 8 Schalter aktiviert wird, bevor der Timer gestartet wird. Dies wird aktiviert, wenn das Signal relative_time_enable auf den logischen Zustand 1 gesetzt ist Sobald das Signal auf 1 gesetzt ist, wird es letztlich nie auf 0 zurückgesetzt werden zurück Diese Variable initialisiert wird, wie gezeigt:
signal relative_time_enable : STD_LOGIC := '0';
signal signal_in : STD_LOGIC_VECTOR(7 downto 0);
signal_in abgebildet wird zu "in" Ports, die in meiner Entität deklariert sind, oder umgekehrt. Es wird jedoch gesagt, dass signal_in den Schaltern entspricht. Hier ist der Code, den ich gerade habe.
Ich glaube, ich habe das Problem zu dem Schluss geführt, dass die If-Aussage immer als wahr kommt. Fast so, als ob das Signal_in innerhalb der ersten Zyklen mehrere Zustände durchläuft, wodurch der Wert sofort auf 1 gesetzt wird, konnte ich nichts Online finden, das mich in die richtige Richtung lenken könnte.
An diesem Punkt habe ich alles versucht, um zu bestimmen, was die Werte tatsächlich sind einschließlich Ersetzen "00000000" mit "11111111", "UUUUUUUU", "ZZZZZZZZ", "XXXXXXXX" und alle von ihnen immer noch durchkommen.
Ich habe auch versucht:
process(clk_1MHz_enable, signal_in)
begin
if(clk_1MHz_enable = '1') then
if(relative_time_enable = '0') and (signal_in /= "00000000")then
for i in 0 to 7 loop
if(signal_in(i) = '1') then
relative_time_enable <= '1';
end if;
end loop;
end if;
end if;
end process;
Diese Methode scheint, wie es sollte ‚überprüfen‘, aber irgendwie hält sie durch immer und den Wert auf 1 gesetzt wird, bevor irgendwelche Schalter aktiviert werden. Außerdem habe ich signal_in auf dem LCD angezeigt und ändert, wenn ich Schalter und beim Start alles liest 00000000.
FYI: Ich habe nur mit diesem FPGA und VHDL für 2 Wochen gearbeitet, so ist es sehr möglich, dass ich etwas vermisse sehr grundlegend. Außerdem bin ich nicht hundertprozentig mit meinen Fähigkeiten in ModelSIM vertraut und nicht sicher, wie ich das, was ich sehe, in Probleme mit Code übersetzen würde.
Jede Hilfe würde sehr geschätzt werden. Wenn Sie mehr von dem Code sehen möchten, lassen Sie es mich wissen, ich werde gerne veröffentlichen, was auch immer benötigt wird. Ich habe einfach nicht alles aufgesetzt, weil es eine ziemlich lange Zustandsmaschine gibt, die das LCD steuert, was für diesen Beitrag nicht relevant ist.
Auch sollte ich erwähnen, dass der folgende Code wie erwartet funktioniert, aber das Problem mit diesem Code ist, dass relatives_time_enable zurück auf 0 zurückgesetzt wird, was ein großes Nein ist. Der einzige Grund, warum ich dies zeige, ist, dass es im Grunde wartet, bis ein Schalter aktiv ist, bevor die Uhr gestartet wird, aber sobald ich den Schalter deaktiviere, hört die Uhr auf zu laufen, was ein Problem darstellt.
process(clk_1MHz_enable, signal_in)
begin
if(clk_1MHz_enable = '1') then
if(relative_time_enable = '0') and (signal_in /= "00000000")then
relative_time_enable <= '1';
else
relative_time_enable <= '0';
end if;
end if;
end process;
Genuis! Bit_Vector hat wunderbar funktioniert. Danke für die Hilfe. – Dylan