Ich bin technisch neu in VHDL, und ich muss eine Pause von 2 Hz oder 0,5 Hz im VHDL-Programm für ein Counter-Projekt machen.Wie kann ich eine Pause von 2Hz in einer Uhr in VHDL machen?
Auf der anderen Seite, ich habe den folgenden Code:
architecture behavior of Counter is
signal q: std_logic_vector(7 downto 0);
begin
process(clock, choose)
begin
if clear = '1' then
q <= q - q;
else
if rising_edge(clock) then
-- when choose is '1', the process if for increment
if(choose = '1') then
case incodec is
when "001" => q <= q + 1;
when "011" => q <= q + 10;
when "111" => q <= q + 11;
when others => q <= q;
end case;
-- when choose is '0', the process if for decrement
elsif choose = '0' then
case incodec is
when "001" => q <= q - 1;
when "011" => q <= q - 10;
when "111" => q <= q - 11;
when others => q <= q;
end case;
end if;
end if;
end if;
case q(7 downto 4) is
--
when "0000" => hex7 <= "1000000"; --0
when "0001" => hex7 <= "1111001"; --1
when "0010" => hex7 <= "0100100"; --2
when "0011" => hex7 <= "0110000"; --3
when "0100" => hex7 <= "0011001"; --4
when "0101" => hex7 <= "0010010"; --5
when "0110" => hex7 <= "0000010"; --6
when "0111" => hex7 <= "1111000"; --7
when "1000" => hex7 <= "0000000"; --8
when "1001" => hex7 <= "0010000"; --9
when "1010" => hex7 <= "0001000"; --10/A
when "1011" => hex7 <= "0000011"; --11/B/b
when "1100" => hex7 <= "1000110"; --12/C
when "1101" => hex7 <= "0100001"; --13/D/d
when "1110" => hex7 <= "0000110"; --14/E
when "1111" => hex7 <= "0001110"; --15/F
when others => hex7 <= "0111111"; -- -
end case;
case q(3 downto 0) is
--
when "0000" => hex6 <= "1000000"; --0
when "0001" => hex6 <= "1111001"; --1
when "0010" => hex6 <= "0100100"; --2
when "0011" => hex6 <= "0110000"; --3
when "0100" => hex6 <= "0011001"; --4
when "0101" => hex6 <= "0010010"; --5
when "0110" => hex6 <= "0000010"; --6
when "0111" => hex6 <= "1111000"; --7
when "1000" => hex6 <= "0000000"; --8
when "1001" => hex6 <= "0010000"; --9
when "1010" => hex6 <= "0001000"; --10/A
when "1011" => hex6 <= "0000011"; --11/B/b
when "1100" => hex6 <= "1000110"; --12/C
when "1101" => hex6 <= "0100001"; --13/D/d
when "1110" => hex6 <= "0000110"; --14/E
when "1111" => hex6 <= "0001110"; --15/F
when others => hex6 <= "0111111"; -- -
end case;
end behavior
Wenn das Programm kompiliert zeigt die folgenden Fehler:
Error (10818): Can't infer register for "q[0]" at Counter.vhd(28) because it does not hold its value outside the clock edge I don't know what is means
Helfen Sie mir bitte :(
wirklich sind 11 Fehler wie diese. –
Bitte zeigen Sie uns zunächst den vollständigen Code, da der Fehler wahrscheinlich außerhalb des Code-Snippets liegt. Zweitens, warum gibt es so viele führende Nullen in Ihren steigenden Zahlen? An dritter Stelle müssen Sie q in den anderen Fällen nicht q zuweisen, da es sich um einen getakteten Prozess handelt, da einige Synthesizer durch diesen Codierungsstil irritiert werden könnten. Ist Ihnen bekannt, dass '00000011' ein Integer-Literal mit dem Wert 11 anstelle einer Binärzahl mit dem Wert 3 ist? – Paebbels
Wie hängen Sie in Bezug auf eine Pause mit Ihrem Code-Snippet zusammen? Pausen werden nicht in Hertz gemessen, sondern in Sekunden, weil es eine Zeit und keine Frequenz ist. – Paebbels