私はVHDLとXILINXISEを初めて使用します。XilinxISEにはバージョン13.2を使用しています。
次の入力を使用して、非常に単純なカウンターを設計したいと思います。
- 方向
- カウント
カウント入力はボタンに割り当てられ、ボタンが押されたときに入力された方向に応じてカウンターがカウントアップまたはカウントダウンするようにします。この前にサンプルVHDLを作成しました。時計入力があり、時計入力に従ってカウントしていました。同期してカウントするのではなく、ボタンを押したときにカウントするようにします。
これが私のVHDLコードです(私のコードに論理的またはその他の欠陥があるかどうか教えてください):
entity counter is
Port ( COUNT_EN : in STD_LOGIC;
DIRECTION : in STD_LOGIC;
COUNT_OUT : out STD_LOGIC_VECTOR (3 downto 0));
end counter;
architecture Behavioral of counter is
signal count_int : std_logic_vector(3 downto 0) := "0000";
begin
process
begin
if COUNT_EN='1' then
if DIRECTION='1' then
count_int <= count_int + 1;
else
count_int <= count_int - 1;
end if;
end if;
end process;
COUNT_OUT <= count_int;
end Behavioral;
Spartan xc3s500eを使用し、それに応じて入力を配置しました。以下は私の.ucfファイルです:
#Created by Constraints Editor (xc3s500e-fg320-5) - 2013/03/18
NET "COUNT_EN" LOC = K17;
NET "COUNT_OUT[0]" LOC = F12;
NET "COUNT_OUT[1]" LOC = E12;
NET "COUNT_OUT[2]" LOC = E11;
NET "COUNT_OUT[3]" LOC = F11;
NET "DIRECTION" LOC = L13;
#Created by Constraints Editor (xc3s500e-fg320-5) - 2013/03/18
NET "COUNT_EN" CLOCK_DEDICATED_ROUTE = FALSE;
エラーが発生したため、最後の行を変更する必要がありました。
This will not allow the use of the fast path between the IO and the Clock...
このエラーがなくなった後、デバイスをプログラムしました。しかし、出力(LED)は狂ったように振る舞いました。彼らは時々数秒間静止し、時には非常に速く点滅しました。私は自分の間違いがどこにあるのか理解できませんでした。助けていただければ幸いです。いくつかの初心者向けチュートリアルは大歓迎です(私が見つけたリンクからザイリンクスのドキュメントにアクセスでき、初心者にとっては非常に複雑に見えました)。