Imは3までカウントアップし、0にカウントダウンします。 例:0 1 2 3 2 1 0 1 2 3 2 1 0 ...VHDLアップ/ダウンカウンタのエラーカウント
私がやったこと:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Counter is
port(
Clock: in std_logic;
Reset: in std_logic;
Output: out std_logic_vector(0 to 1));
end Counter;
architecture Behavioral of Counter is
signal temp: std_logic_vector(0 to 1);
signal down: std_logic := '0';
begin process(Clock,Reset)
begin
if Reset='0' then
temp <= "00";
down<= '0';
elsif(rising_edge(Clock)) then
if temp="11" then
down<= '1';
elsif temp="00" then
down<='0';
end if;
if down='0' then
temp <= temp +1;
else
temp <= temp-1;
end if;
end if;
end process;
Output <= temp;
end Behavioral;
はどういうわけか、出力が間違っている何 ...真ん中の数字を示すことなく、3から0に起こっていますか?
おそらくそれはカウントダウンではなくオーバーフローしています。あなたは信号ではなく可変であると考えていたので、 '<='ではなく ':='(即時の割り当て)を使用しましたか? – diginoise
Strangeでは、std_logic_vectorに何かを追加できます。どのツールを使用しますか?そしてそれは@diginoiseが言ったのと同じです。 'temp =" 11 "'を指定すると 'down <= '1' 'が割り当てられますが、プロセスが終了した後に起こります。したがって、if down = '0' then 'でチェックされても' 0 'です。それがオーバーフローする理由です。反対方向でも同じ。 – Staszek
@Staszek彼らはstd_logic_unsigned legacy pacakgeを使用しています。 –