Ich habe Probleme mit diesem Code. Es scheint, dass der Zustand S0 immer aktiv ist, auch wenn es nicht sein sollte. Es scheint, dass die Ausgabe dieses Zustands invertiert ist (aktiv, wenn es deaktiviert werden soll). Irgendwelche Ideen? Ausdruck der Simulation unten.VHDL Warum ist der Zustand S0 aktiv, wenn er nicht sein soll?
Danklibrary IEEE;
use IEEE.STD_LOGIC_1164.all;
entity ControlUnit is
port(clk : in std_logic;
reset : in std_logic;
validTime : in std_logic;
timeData : in std_logic_vector(3 downto 0);
writeEnable : out std_logic;
writeAddress : out std_logic_vector(3 downto 0);
averageReady : out std_logic);
end ControlUnit;
architecture Behavioral of ControlUnit is
type TState is (S0, S1, S2, S3, S4, S5);
signal PState, NState: TState;
begin
sync_proc: process(clk, reset)
begin
if(reset = '1') then
PState <= S0;
elsif(rising_edge(clk)) then
PState <= NState;
end if;
end process;
comb_proc: process(PState, validTime, timeData)
begin
averageReady <= '0';
writeEnable <= '0';
case PState is
when S0 =>
if(validTime = '1') then
writeEnable <= '1';
NState <= S1;
else
NState <= S0;
end if;
when S1 =>
if(validTime = '1') then
writeEnable <= '1';
NState <= S2;
else
NState <= S1;
end if;
when S2 =>
if(validTime = '1') then
writeEnable <= '1';
NState <= S3;
else
NState <= S2;
end if;
when S3 =>
if(validTime = '1') then
writeEnable <= '1';
NState <= S4;
else
NState <= S3;
end if;
when S4 =>
if(validTime = '1') then
writeEnable <= '1';
NState <= S5;
else
NState <= S4;
end if;
when S5 =>
averageReady <= '1';
NState <= S0;
when others =>
NState <= S0;
end case;
end process;
with PState select
writeAddress <= "0000" when S0,
"0001" When S1,
"0010" when S2,
"0011" when S3,
"0100" when S4,
"XXXX" when others;
end Behavioral;
Hier ist ein Druck der Simulation:
Dies scheint eine Ein-Hot-Codierung zu sein (was bedeutet, dass es sich um eine Nach-Synthese-Simulation handelt). Die Polarität von PState.S0 scheint umgekehrt zu sein, während der Rest positiv wahr erscheint. Die synthetisierte Hardware muss die Polarität aufrecht erhalten, aber PState ist keine Ausgabe, simuliert sie richtig? Sie haben kein [minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve) bereitgestellt, das eine Simulation vor der Synthese ermöglicht. * Irgendwelche Ideen? * Ist ein bisschen breit für eine Frage. Vielleicht hättest du die Synthese anders einschränken können, wenn du hineinspähen wolltest. – user1155120