VHDL - Inkrement mit einem (unsigned)
Ich versuche, mich ein code, der erhöht die eingehenden bits mit einem. Will ich mit zwei-segment-code-styling, aber das Problem hier ist, dass die bits, die erreichen nicht die Leistung. Irgendeine Idee? Danke!
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.ALL;
entity increment1 is
port(
from_ASMD_State_reg : in std_logic_vector(7 downto 0);
reset, clk : in std_logic;
to_mux : out std_logic_vector(7 downto 0)
);
end increment1;
architecture Behavioral of increment1 is
--signal count : unsigned(7 downto 0);
signal r_reg : unsigned(7 downto 0);
signal r_next : unsigned(7 downto 0);
begin
process(clk, reset)
begin
if(reset = '1') then
to_mux <= (others => '0');
elsif(clk'event and clk = '1') then
r_reg <= r_next;
end if;
end process;
r_next <= r_reg + 1;
to_mux <= std_logic_vector(r_reg);
end Behavioral;
Nach einigen Anpassungen im code, wie es scheint, funktioniert es jetzt!
architecture Behavioral of increment1 is
signal r_reg : unsigned(7 downto 0);
signal r_inc : unsigned(7 downto 0);
begin
process(clk, reset, r_reg)
begin
r_reg <= unsigned(from_ASMD_State_reg);
if(reset = '1') then
r_reg <= (others => '0');
elsif(clk'event and clk = '1') then
r_reg <= r_inc;
end if;
end process;
r_inc <= r_reg + 1;
to_mux <= std_logic_vector(r_inc);
end Behavioral;
- Die
from_ASMD_State_reg
ist nicht in dem Modul, so dass, wenn, dass ist der Eingang zu erhöhen, dann verwenden Sie es für ein start. Beachten Sie auch, dassto_mux
ist beide Gefahren im Prozess und außerhalb des Prozesses, und so mehrere Treiber können nicht synthetisieren, und ist wahrscheinlich zum generieren von X in der simulation; die Absicht ist wohl zu fahrenr_reg
im Prozess. Sie können endlich das tun, ohner_next
wennr_reg + 1
verwendet wird, direkt in den Prozess Ausdruck. - Danke für die Antwort. Nur Frage mich, wie soll ich from_ASMD_State_reg für einen start? Soll ich den r_reg zu from_ASMD_State_reg? Und wo sollte ich es tun? 🙂
- Es hängt wirklich von der Funktionalität, die Sie implementieren möchten, so starten Sie eine Angabe machen, zum Beispiel eine Tabelle, die listet die erwartete Ausgabe für die verschiedenen input-Werte, und in diesem Prozess sind Sie wahrscheinlich zu verstehen, was die Funktionalität, die Sie implementieren müssen in der Gestaltung.
- Ich habe einige änderungen eingefügt und den code auf meinen Beitrag. Können Sie bitte einen Blick auf meinen code und sehen, ob ich noch etwas dumm in meinem code? 🙂
- Sie sollte wohl nicht sein, die Zuordnung zu
r_reg
innerhalb des Prozesses, aber außerhalb desif
block.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre aktualisierten code ist fast richtig, aber nicht ganz. Wenn alles, was Sie tun möchten, Inkrementieren und register einen Wert, alles, was Sie brauchen, ist diese:
(Hinweis: bearbeitet die oben fix eine Zuordnung der Fehler und ordnen Sie die Aussagen zu machen, die angestrebte "zwei-segment-Stil" deutlicher)
Sind Sie sicher, dass es "arbeitet" mit der Zuordnung zu
r_reg
in Ihrem Prozess, aber außerhalb der if-block? Haben Sie versucht, zu synthetisieren, oder nur simuliert?Optimierungen:
r_inc
indem Sie die Inkrement-Anweisung direkt in dier_reg
Zuordnung in den Prozess.r_reg
durch Austausch mitto_mux
in der Prozess-und typecasting.Brauchen Sie nicht alle diese intermediate-Signale für diese operation. Wenn Sie Sie brauchen, für andere Funktionen, die Sie hinzufügen möchten, fühlen Sie sich frei, Sie zu halten, aber nur bewusst sein, dass die ports, die verwendet werden können, die in diesen Bereichen - Sie brauchen nicht zu ordnen Sie Sie auf ein anderes signal zuerst.
Die vereinfachte Zuordnung in Ihrem Prozess wäre dann:
Ist es kaum Wert, eine separate Komponente, um dies zu tun, aber Sie können, natürlich.
Beim erstellen eines flip-flop (um einen Wert zu speichern) legen Sie nur reset und clock in der sensitivity-Liste:
Wenn from_ASMD_State_reg nimmt Ihr Wert bei reset 1 ist, können Sie es direkt als reset-Wert:
Anders, Sie haben zu schreiben in einer anderen Weise. Bevor Sie müssen wissen, wenn Sie Ihre aus-reset:Sie können schreiben, also nur wenn die from_ASMD_State_reg signal nicht zurücksetzen, indem Sie reset-signal.
r_reg <=
und dann dieses neue signal initialisiert den counter:
Wo r_inc ist, wie Sie schrieb:
Eine Letzte Sache: normalerweise ist der reset ist low-aktiv (Sie zurücksetzen, wenn Sie reset = '0' und nicht, wenn Sie '1').
r_reg
nur direkt nach dem reset?