📄 clockgroups.vhd
字号:
-- -----------------------------------------------------------------------------
--
-- 文件名 : clockGroups.vhd
--
-- 功能 : 产生几种 时钟 信号.
--
-- 端口 : CLK : in PIN_28, 外部 50MHz 晶振.
-- CLK_EN : out 上电复位 的信号.
--
-- CLK_Z : out 25MHz , 50% 占空比的时钟信号.
-- CLK_H : out 25MHz , 25% 占空比, 与 CLK_Z 同相 的时钟信号.
-- pulse1K : out 1KHz 的 脉冲信号, 占空比很小.
-- pulse1M : out 1MHz 的 脉冲信号, 占空比很小.
--
-- 笔记 : 1. pulse1K 不能用于 时钟信号. pulse1K 为 1 时, 有一个 CLK_Z 的上升沿.
-- 2. pulse1M 不能用于 时钟信号. pulse1M 为 1 时, 有一个 CLK_Z 的上升沿.
--
-- Total logic elements: 43/12,060 ( <1%)
-- Total PLLs : 1/2 (50%)
-- -----------------------------------------------------------------------------
-- 建立日期 : 2007/4/15
-- -----------------------------------------------------------------------------
-- 修改日期 :
-- 修改内容 :
-- -----------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
library altera_mf;
use altera_mf.altera_mf_components.all;
entity clockGroups is
PORT
(
CLK : in std_logic := '0';
CLK_EN : out std_logic;
CLK_Z : out std_logic;
CLK_H : out std_logic;
pulse1K : out std_logic;
pulse1M : out std_logic
);
end clockGroups;
architecture SYN of clockGroups is
component systemPLL is
PORT
(
inclk0 : in std_logic := '0';
c0 : out std_logic ;
c1 : out std_logic ;
locked : out std_logic
);
end component;
signal tempCLK_Z : std_logic;
signal coun1M, tempCoun1M : std_logic_vector(4 downto 0) := "00000" ;
signal coun1K, tempCoun1K : std_logic_vector(14 downto 0) := "000000000000000" ;
signal tempPulse1M, tempPulse1K : std_logic;
begin
pulse1K <= tempPulse1K;
pulse1M <= tempPulse1M;
------------------- 产生 1KHz 的脉冲 --------------------------------------
tempCoun1K <= coun1K + '1';
pulse1K_pro : process(tempCLK_Z, tempCoun1K)
begin
if tempCLK_Z'event and tempCLK_Z = '0' then --下降沿
if (tempCoun1K = "110000110101000") then
coun1K <= "000000000000000";
tempPulse1K <= '1';
else
coun1K <= tempCoun1K;
tempPulse1K <= '0';
end if;
end if;
end process;
------------------- 产生 1MHz 的脉冲 --------------------------------------
tempCoun1M <= coun1M + '1';
pulse1M_pro : process(tempCLK_Z, tempCoun1M)
begin
if tempCLK_Z'event and tempCLK_Z = '0' then --下降沿
if (tempCoun1M = "11001") then
coun1M <= "00000";
tempPulse1M <= '1';
else
coun1M <= tempCoun1M;
tempPulse1M <= '0';
end if;
end if;
end process;
------------------- 产生 25MHz 的 时钟信号 ----------------------------------
CLK_Z <= tempCLK_Z;
pll_pro : systemPLL
port map(
inclk0 => CLK,
locked => CLK_EN,
c1 => CLK_H,
c0 => tempCLK_Z
);
end SYN;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -