Ich habe einen strukturellen Entwurf eines Schieberegisters in vhdl gemacht. Wenn WriteShift 1 ist, dann habe ich Shift und wenn es 0 ist, lädt das Shift-Register einen Preis. Obwohl load perfekt funktioniert, wenn ich in der Testbench auf 1 setze, bekomme ich 00000 in der Simulation.Tragwerksplanung von Shift Register in VHDL
Mein Code ist folgende:
entity ShiftRegis is
Port (Din : in STD_LOGIC_VECTOR (4 downto 0);
WriteShift : in STD_LOGIC;
Clock : in STD_LOGIC;
reset : in STD_LOGIC;
En : in STD_LOGIC;
Q : out STD_LOGIC_VECTOR (4 downto 0));
end ShiftRegis;
architecture Behavioral of ShiftRegis is
component notGate
Port (in0 : in STD_LOGIC;
out0 : out STD_LOGIC);
end component;
component nand4Gate
Port (i0 : in STD_LOGIC;
i1 : in STD_LOGIC;
i2 : in STD_LOGIC;
i3 : in STD_LOGIC;
bitOut : out STD_LOGIC);
end component;
component D_FlipFlop
Port (Din : in STD_LOGIC;
En : in STD_LOGIC;
Q : out STD_LOGIC;
reset : in STD_LOGIC;
Clk : in STD_LOGIC);
end component;
signal q4, q3, q2, q1, in3, in2, in1, in0, notWS : std_logic;
begin
ff4 : D_FlipFlop
port map(Din => Din(4),
En => En,
Q => q4,
reset => reset,
Clk => Clock);
ff3 : D_FlipFlop
port map(Din => in3,
En => En,
Q => q3,
reset => reset,
Clk => Clock);
ff2 : D_FlipFlop
port map(Din => in2,
En => En,
Q => q2,
reset => reset,
Clk => Clock);
ff1 : D_FlipFlop
port map(Din => in1,
En => En,
Q => q1,
reset => reset,
Clk => Clock);
ff0 : D_FlipFlop
port map(Din => in0,
En => En,
Q => Q(0),
reset => reset,
Clk => Clock);
notg4 : notGate
port map(in0 => WriteShift,
out0 => notWS);
nandg3 : nand4Gate
port map(i0 => Din(3),
i1 => notWS,
i2 => WriteShift,
i3 => q4,
bitOut => in3);
nandg2 : nand4Gate
port map(i0 => Din(2),
i1 => notWS,
i2 => WriteShift,
i3 => q3,
bitOut => in2);
nandg1 : nand4Gate
port map(i0 => Din(1),
i1 => notWS,
i2 => WriteShift,
i3 => q2,
bitOut => in1);
nandg0 : nand4Gate
port map(i0 => Din(0),
i1 => notWS,
i2 => WriteShift,
i3 => q1,
bitOut => in0);
Q(4) <= q4;
Q(3) <= q3;
Q(2) <= q2;
Q(1) <= q1;
end Behavioral;
Wenn Sie Ihre Testbench auch posten, kann eine andere Person Ihre Ergebnisse reproduzieren. –
Wird nicht geladen Siehe auch [Detail A] (http://i.stack.imgur.com/xVFmh.png). Ich vermutete, dass Sie einen asynchronen Reset verwendeten (kein [minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve)). Die Ursache ist, dass Sie versuchen, 4 Eingangs-NAND-Gatter als 2: 1-Multiplexer entweder für den Lasteingang (Din) oder den Shift-Eingang zu verwenden. Sie können keinen Multiplexer aus nur einem NAND-Gatter machen. Beachten Sie auch, dass Sie nur eine '0' erhalten können, wenn WriteShift und notWS beide '1' sind und letzteres der invertierte Wert des ersten ist. Sie könnten 3 zwei Eingänge oder Gatter verwenden. – user1155120
Wo und wann haben Sie einen Wert von 00000 beobachtet? Die 4 Eingabe-NAND-Gatter geben immer den Wert 11111 (unter Vernachlässigung von Meta-Werten), weil "Writeshift nand not Writeshift = '1'" ist. Und ich erwarte, dass dieser Wert unmodifiziert in den 'D_FlipFlop' geladen wird, aber Sie haben seine Implementierung nicht offenbart. Bitte zeigen Sie uns auch Ihre Testbench, vielleicht ist der Fehler dort. –