⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clockgroups.vhd

📁 基于FPGA液晶控制器设计与实现(VHDL语言)
💻 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 + -