我對VHDL和XILINX ISE非常陌生。我使用Xilinx ISE的版本13.2。使用VHDL和Xilinx的按鈕開關設計計數器
我想設計具有以下輸入一個非常簡單的計數器:
- 方向
- 計數
計數輸入將被分配到一個按鈕,我想計數器計數當按下按鈕時根據方向輸入上下。在這之前我已經寫了一個樣本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)發瘋了。他們有時會靜止幾秒鐘,有時只是快速閃現。我無法弄清楚我的錯誤在哪裏。我會很感激任何幫助,一些初學者教程非常感謝(我發現的鏈接指向我xilinx的文檔,他們似乎對初學者來說非常複雜)。
我知道這個帖子是舊的,但這裏是一個重要的錯誤,在較低的圖片!所顯示的去抖動邏輯僅僅是一個邊緣檢測。真正的去抖動邏輯需要定時器和FSM來過濾輸入信號中的毛刺(稱爲去抖動)。 – Paebbels 2014-08-25 12:28:35