📄 clk_div.vhd
字号:
--------------------------------------------------------------------------------- Title : A Parameterisable Clock Divider-- Project : --------------------------------------------------------------------------------- File : clk_div.vhd-- Author : Davy Huang <Dai.Huang@Xilinx.com>-- Company : Xilinx, Inc.-- Created : 2001/02/23-- Last Update: 2001-04-18-- Copyright : (c) Xilinx Inc, 2001--------------------------------------------------------------------------------- Uses : SRL16--------------------------------------------------------------------------------- Used by : --------------------------------------------------------------------------------- Description: -- In this top level module, two SRL16 (16-Bit Shift Register-- Look-Up-Table) are cascaded to generate a clocks of 1MHz from-- a system clock with much faster frequency range (3~80MHz)-- -- By cascading more SRL16s, this clock divider can accept even-- higher system frequency.---- Each SRL16 only uses one LUT.--------------------------------------------------------------------------------- Revisions :-- Date Version Author Description-- 2001/02/23 1.0 Davy Create the initial design-- 2001/03/06 1.0 Davy Change the generic to integer because FPGA-- Express doesn't accept std_logic_vector type on-- Generic.-------------------------------------------------------------------------------library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;-- synthesis translate_off-- synopsys translate_offlibrary unisim;use unisim.vcomponents.all;-- synopsys translate_on-- synthesis translate_onentity clk_divider is generic ( CLK_DIV : integer range 0 to 15 := 12); port ( reset : in std_logic; -- asynchronous reset clk_in : in std_logic; -- system clock clk_out : out std_logic -- output a slow clock );end clk_divider;architecture rtl of clk_divider is component SRL16 -- synopsys translate_off generic ( INIT : bit_vector ); -- synopsys translate_on port (D : in STD_ULOGIC; CLK : in STD_ULOGIC; A0 : in STD_ULOGIC; A1 : in STD_ULOGIC; A2 : in STD_ULOGIC; A3 : in STD_ULOGIC; Q : out STD_ULOGIC); end component; -- signals for the SRL16 signal d : std_logic; signal q1, q2 : std_logic; signal clk_gen : std_logic; signal addr : std_logic_vector (3 downto 0); signal tmp : std_logic_vector (4 downto 0); begin ----------------------------------------------------------- -- wiring ----------------------------------------------------------- tmp <= CONV_STD_LOGIC_VECTOR(CLK_DIV,5); -- generate the address -- from the generic addr <= tmp (3 downto 0); d <= not q2; clk_out <= clk_gen; ----------------------------------------------------------- -- Generate the slow clock, using the rising edge of output -- Q from the SRL16 to switch clk_slow so as to generate the -- clock ----------------------------------------------------------- clkgen: process(clk_in, reset) begin if reset = '1' then clk_gen <= '1'; elsif clk_in'event and clk_in = '1' then clk_gen <= q2; end if; end process clkgen; ----------------------------------------------------------- -- 16-Bit Shift Register Look-Up-Table -- Use A0~A3 to define the length of the shift register so -- as to generate the slow clock. A0~A3 is specified by -- the generic (CLK_DIV) -- ----------------------------------------------------------- -- Table : Generic Settings in Clock Divider Based on -- Input Clock Rates ----------------------------------------------------------- -- Min Input Max Input Divider CLK_DIV -- Clock Freq. Clock Freq. Ratio Value -- (MHz) (MHz) ----------------------------------------------------------- -- 3 5 4 0 -- 5 9 8 1 -- 9 14 12 2 -- 14 18 16 3 -- 18 22 20 4 -- 22 26 24 5 -- 26 30 28 6 -- 30 34 32 7 -- 34 38 36 8 -- 38 42 40 9 -- 42 46 44 10 -- 46 50 48 11 -- 50 54 52 12 -- 54 58 56 13 -- 58 62 60 14 -- 62 80 64 15 ----------------------------------------------------------- srl1: SRL16 -- synopsys translate_off generic map ( INIT => X"0000") -- synopsys translate_on port map ( CLK => clk_in, D => d, Q => q1, A0 => addr(0), A1 => addr(1), A2 => addr(2), A3 => addr(3)); srl2: SRL16 -- synopsys translate_off generic map ( INIT => X"0000") -- synopsys translate_on port map ( CLK => clk_in, D => q1, Q => q2, A0 => addr(0), A1 => addr(1), A2 => addr(2), A3 => addr(3)); end rtl;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -