?? reset.vhd
字號:
-- -----------------------------------------------------------------------------
--
-- 文件名 : reset.vhd
--
-- 功能 : 產生 復位 信號.
--
-- 端口 : CLK : in PIN_28, 外部 50MHz 晶振.
-- CLK_Z : in 25MHz , 50% 占空比的時鐘信號.
-- pulse1K : in 1KHz 的 脈沖信號, 占空比很小.
--
-- CLK_EN : in 上電復位 的信號.
-- nRESET : in PIN_124, 外部 復位按鍵.
--
-- RESET : out 產生到其他模塊 大于671.08864ms 的 復位 信號.
--
-- 筆記 : 1.CLK_EN 只是在上電復位時,有一段時間的低電平.(詳見:altpll的幫助文檔)
-- 2. nRESET 是外部輸入的 復位按鍵信號, 所以 對其進行了 2ms 至 3ms 的 延時.
--
-- Total logic elements: 63/12,060 ( <1%)
-- -----------------------------------------------------------------------------
-- 建立日期 : 2007/4/15
-- -----------------------------------------------------------------------------
-- 修改日期 :
-- 修改內容 :
-- -----------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity reset is
PORT
(
CLK : in std_logic := '0';
CLK_Z : in std_logic := '0';
pulse1K : in std_logic;
CLK_EN : in std_logic;
nRESET : in std_logic;
RESET : out std_logic
);
end reset;
architecture rtl of reset is
signal resrt_en : std_logic;
signal resrtTemp1, resrtTemp2, resrtTemp3 : std_logic;
signal counter, tempCounter : std_logic_vector(28 downto 0) := "00000000000000000000000000000";
alias tempDelay is counter(28 downto 25);
begin
RESET <= '1' when (tempDelay = "0000") else '0';
resrt_en <= CLK_EN and (resrtTemp1 or resrtTemp2 or resrtTemp3);--nRESET 延時 (2 - 3)ms.
------------------- 產生 671.08864ms 延時 的 復位信號 --------------------------------------
tempCounter <= "00000000000000000000000000000" when (resrt_en = '0') else (counter + '1');
counter_pro : process(CLK, tempDelay, tempCounter)
begin
if (CLK'event and CLK = '1') then --上升沿
counter(24 downto 0) <= tempCounter(24 downto 0);
if (tempDelay = "1110") then
tempDelay <= "1010";
else
tempDelay <= tempCounter(28 downto 25);
end if;
end if;
end process;
--------------------- 為了 nRESET 的延時 ---------------------------
nRESET_pro : process(CLK_Z, pulse1K, nRESET, resrtTemp1, resrtTemp2)
begin
if (CLK_Z'event and CLK_Z = '1' and pulse1K = '1')then --上升沿
resrtTemp1 <= nRESET;
resrtTemp2 <= resrtTemp1;
resrtTemp3 <= resrtTemp2;
end if;
end process;
end rtl;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -