OpenCores
URL https://opencores.org/ocsvn/uart_block/uart_block/trunk

Subversion Repositories uart_block

[/] [uart_block/] [trunk/] [hdl/] [iseProject/] [baud_generator.vhd] - Diff between revs 8 and 11

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 8 Rev 11
Line 10... Line 10...
 
 
entity baud_generator is
entity baud_generator is
    Port ( rst : in STD_LOGIC;
    Port ( rst : in STD_LOGIC;
                          clk : in  STD_LOGIC;
                          clk : in  STD_LOGIC;
           cycle_wait : in  STD_LOGIC_VECTOR ((nBitsLarge-1) downto 0);
           cycle_wait : in  STD_LOGIC_VECTOR ((nBitsLarge-1) downto 0);
 
                          baud_oversample : out std_logic;
           baud : out  STD_LOGIC);
           baud : out  STD_LOGIC);
end baud_generator;
end baud_generator;
 
 
architecture Behavioral of baud_generator is
architecture Behavioral of baud_generator is
signal genTick : std_logic;
signal genTick : std_logic;
 
signal genTickOverSample : std_logic;
begin
begin
        process (rst, clk)
        process (rst, clk)
        variable wait_clk_cycles : STD_LOGIC_VECTOR ((nBitsLarge-1) downto 0);
        variable wait_clk_cycles : STD_LOGIC_VECTOR ((nBitsLarge-1) downto 0);
        variable half_cycle : STD_LOGIC_VECTOR ((nBitsLarge-1) downto 0);
        variable half_cycle : STD_LOGIC_VECTOR ((nBitsLarge-1) downto 0);
        begin
        begin
Line 41... Line 43...
                        end if;
                        end if;
                end if;
                end if;
        end process;
        end process;
 
 
        baud <= genTick;
        baud <= genTick;
 
        baud_oversample <= genTickOverSample;
 
 
 
        -- Process to generate the overclocked (8x) sample
 
        process (rst, clk)
 
        variable wait_clk_cycles : STD_LOGIC_VECTOR ((nBitsLarge-1) downto 0);
 
        variable half_cycle : STD_LOGIC_VECTOR ((nBitsLarge-1) downto 0);
 
        variable cycle_wait_oversample : STD_LOGIC_VECTOR ((nBitsLarge-1) downto 0);
 
        begin
 
                if rst = '1' then
 
                        wait_clk_cycles := (others => '0');
 
 
 
                        -- Divide cycle_wait by 8
 
                        cycle_wait_oversample := '0' & cycle_wait(cycle_wait'high downto 1);
 
                        cycle_wait_oversample := '0' & cycle_wait_oversample(cycle_wait_oversample'high downto 1);
 
                        cycle_wait_oversample := '0' & cycle_wait_oversample(cycle_wait_oversample'high downto 1);
 
 
 
                        -- Half of cycle_wait_oversample
 
                        half_cycle := '0' & cycle_wait_oversample(cycle_wait_oversample'high downto 1);
 
                        genTickOverSample <= '0';
 
                elsif rising_edge(clk) then
 
                        -- Just decremented the cycle_wait by one because genTick would be updated on the next cycle
 
                        -- and we really want to bring genTick <= '1' when (wait_clk_cycles = cycle_wait)
 
                        if wait_clk_cycles = (cycle_wait_oversample - conv_std_logic_vector(1, (nBitsLarge-1))) then
 
                                genTickOverSample <= '1';
 
                                wait_clk_cycles := (others => '0');
 
                        else
 
                                wait_clk_cycles := wait_clk_cycles + conv_std_logic_vector(1, (nBitsLarge-1));
 
                                -- If we're at half of the cycle
 
                                if wait_clk_cycles = half_cycle then
 
                                        genTickOverSample <= '0';
 
                                end if;
 
                        end if;
 
                end if;
 
        end process;
 
 
end Behavioral;
end Behavioral;
 
 
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.