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 14 and 15

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

Rev 14 Rev 15
Line 2... Line 2...
--! http://www.fpga4fun.com/SerialInterface.html
--! http://www.fpga4fun.com/SerialInterface.html
library ieee;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_arith.all;
 
use ieee.numeric_std.all;
 
 
--! Use CPU Definitions package
--! Use CPU Definitions package
use work.pkgDefinitions.all;
use work.pkgDefinitions.all;
 
 
entity baud_generator is
entity baud_generator is
Line 29... Line 30...
                        half_cycle := '0' & cycle_wait(cycle_wait'high downto 1);
                        half_cycle := '0' & cycle_wait(cycle_wait'high downto 1);
                        genTick <= '0';
                        genTick <= '0';
                elsif rising_edge(clk) then
                elsif rising_edge(clk) then
                        -- Just decremented the cycle_wait by one because genTick would be updated on the next cycle
                        -- 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)
                        -- and we really want to bring genTick <= '1' when (wait_clk_cycles = cycle_wait)
                        if wait_clk_cycles = (cycle_wait - conv_std_logic_vector(1, (nBitsLarge-1))) then
                        if wait_clk_cycles = (cycle_wait - conv_std_logic_vector(1, nBitsLarge)) then
                                genTick <= '1';
                                genTick <= '1';
                                wait_clk_cycles := (others => '0');
                                wait_clk_cycles := (others => '0');
                        else
                        else
                                wait_clk_cycles := wait_clk_cycles + conv_std_logic_vector(1, (nBitsLarge-1));
                                wait_clk_cycles := wait_clk_cycles + conv_std_logic_vector(1, nBitsLarge);
                                -- If we're at half of the cycle
                                -- If we're at half of the cycle
                                if wait_clk_cycles = half_cycle then
                                if wait_clk_cycles = half_cycle then
                                        genTick <= '0';
                                        genTick <= '0';
                                end if;
                                end if;
                        end if;
                        end if;
 
 
 
                        -- Avoid creation of transparent latch (By default the VHDL will create an register for vectors that are assigned only in one
 
                        -- ocasion of a (if, case) instruction
 
                        half_cycle := '0' & cycle_wait(cycle_wait'high downto 1);
                end if;
                end if;
        end process;
        end process;
 
 
        baud <= genTick;
        baud <= genTick;
        baud_oversample <= genTickOverSample;
        baud_oversample <= genTickOverSample;
Line 55... Line 60...
        begin
        begin
                if rst = '1' then
                if rst = '1' then
                        wait_clk_cycles := (others => '0');
                        wait_clk_cycles := (others => '0');
 
 
                        -- Divide cycle_wait by 4
                        -- Divide cycle_wait by 4
                        cycle_wait_oversample := '0' & cycle_wait(cycle_wait'high downto 1);
                        --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);
 
                        cycle_wait_oversample := "00" & cycle_wait(cycle_wait'high downto 2);   -- Shift right by 2                     
 
 
 
 
                        -- Half of cycle_wait_oversample
                        -- Half of cycle_wait_oversample
                        half_cycle := '0' & cycle_wait_oversample(cycle_wait_oversample'high downto 1);
                        half_cycle := '0' & cycle_wait_oversample(cycle_wait_oversample'high downto 1); -- Shift right by 1
                        genTickOverSample <= '0';
                        genTickOverSample <= '0';
                elsif rising_edge(clk) then
                elsif rising_edge(clk) then
                        -- Just decremented the cycle_wait by one because genTick would be updated on the next cycle
                        -- 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)
                        -- 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
                        if wait_clk_cycles = (cycle_wait_oversample - conv_std_logic_vector(1, nBitsLarge)) then
                                genTickOverSample <= '1';
                                genTickOverSample <= '1';
                                wait_clk_cycles := (others => '0');
                                wait_clk_cycles := (others => '0');
                        else
                        else
                                wait_clk_cycles := wait_clk_cycles + conv_std_logic_vector(1, (nBitsLarge-1));
                                wait_clk_cycles := wait_clk_cycles + conv_std_logic_vector(1, nBitsLarge);
                                -- If we're at half of the cycle
                                -- If we're at half of the cycle
                                if wait_clk_cycles = half_cycle then
                                if wait_clk_cycles = half_cycle then
                                        genTickOverSample <= '0';
                                        genTickOverSample <= '0';
                                end if;
                                end if;
                        end if;
                        end if;
 
 
 
                        -- Avoid creation of transparent latch (By default the VHDL will create an register for vectors that are assigned only in one
 
                        -- ocasion of a (if, case) instruction
 
                        cycle_wait_oversample := "00" & cycle_wait(cycle_wait'high downto 2);
 
                        half_cycle := '0' & cycle_wait_oversample(cycle_wait_oversample'high downto 1);
                end if;
                end if;
        end process;
        end process;
 
 
end Behavioral;
end Behavioral;
 
 

powered by: WebSVN 2.1.0

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