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

Subversion Repositories c16

[/] [c16/] [trunk/] [vhdl/] [uart._baudgen.vhd] - Diff between revs 9 and 26

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 9 Rev 26
library IEEE;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
 
 
--  Uncomment the following lines to use the declarations that are
--  Uncomment the following lines to use the declarations that are
--  provided for instantiating Xilinx primitive components.
--  provided for instantiating Xilinx primitive components.
--library UNISIM;
--library UNISIM;
--use UNISIM.VComponents.all;
--use UNISIM.VComponents.all;
 
 
entity uart_baudgen is
entity uart_baudgen is
        PORT(   CLK_I     : in  std_logic;
        PORT(   CLK_I     : in  std_logic;
                        RST_I     : in  std_logic;
                        RST_I     : in  std_logic;
 
 
                        RD        : in  std_logic;
                        RD        : in  std_logic;
                        WR        : in  std_logic;
                        WR        : in  std_logic;
 
 
                        TX_DATA   : in  std_logic_vector(7 downto 0);
                        TX_DATA   : in  std_logic_vector(7 downto 0);
                        TX_SEROUT : out std_logic;
                        TX_SEROUT : out std_logic;
                        RX_SERIN  : in  std_logic;
                        RX_SERIN  : in  std_logic;
                        RX_DATA   : out std_logic_vector(7 downto 0);
                        RX_DATA   : out std_logic_vector(7 downto 0);
                        RX_READY  : out std_logic;
                        RX_READY  : out std_logic;
                        TX_BUSY   : out std_logic
                        TX_BUSY   : out std_logic
                );
                );
end uart_baudgen;
end uart_baudgen;
 
 
architecture Behavioral of uart_baudgen is
architecture Behavioral of uart_baudgen is
 
 
        COMPONENT baudgen
        COMPONENT baudgen
        Generic(bg_clock_freq : integer; bg_baud_rate : integer);
        Generic(bg_clock_freq : integer; bg_baud_rate : integer);
        PORT(   CLK_I : IN std_logic;
        PORT(   CLK_I : IN std_logic;
                        RST_I : IN std_logic;
                        RST_I : IN std_logic;
                        CE_16 : OUT std_logic
                        CE_16 : OUT std_logic
                        );
                        );
        END COMPONENT;
        END COMPONENT;
 
 
        COMPONENT uart
        COMPONENT uart
        PORT(   CLK_I     : in std_logic;
        PORT(   CLK_I     : in std_logic;
                        RST_I     : in std_logic;
                        RST_I     : in std_logic;
                        CE_16     : in std_logic;
                        CE_16     : in std_logic;
 
 
                        TX_DATA   : in std_logic_vector(7 downto 0);
                        TX_DATA   : in std_logic_vector(7 downto 0);
                        TX_FLAG   : in  std_logic;
                        TX_FLAG   : in  std_logic;
                        TX_SEROUT : out std_logic;
                        TX_SEROUT : out std_logic;
                        TX_FLAGQ  : out std_logic;
                        TX_FLAGQ  : out std_logic;
 
 
                        RX_SERIN  : in  std_logic;
                        RX_SERIN  : in  std_logic;
                        RX_DATA   : out std_logic_vector(7 downto 0);
                        RX_DATA   : out std_logic_vector(7 downto 0);
                        RX_FLAG   : out std_logic
                        RX_FLAG   : out std_logic
                );
                );
        END COMPONENT;
        END COMPONENT;
 
 
        signal CE_16       : std_logic;
        signal CE_16       : std_logic;
        signal RX_FLAG     : std_logic;
        signal RX_FLAG     : std_logic;
        signal RX_OLD_FLAG : std_logic;
        signal RX_OLD_FLAG : std_logic;
        signal TX_FLAG     : std_logic;
        signal TX_FLAG     : std_logic;
        signal TX_FLAGQ    : std_logic;
        signal TX_FLAGQ    : std_logic;
        signal LTX_DATA    : std_logic_vector(7 downto 0);
        signal LTX_DATA    : std_logic_vector(7 downto 0);
        signal LRX_READY   : std_logic;
        signal LRX_READY   : std_logic;
 
 
begin
begin
 
 
        RX_READY <= LRX_READY;
        RX_READY <= LRX_READY;
        TX_BUSY  <= TX_FLAG xor TX_FLAGQ;
        TX_BUSY  <= TX_FLAG xor TX_FLAGQ;
 
 
        baud: baudgen
        baud: baudgen
        GENERIC MAP(bg_clock_freq => 40000000, bg_baud_rate => 115200)
        GENERIC MAP(bg_clock_freq => 40000000, bg_baud_rate => 115200)
        PORT MAP(
        PORT MAP(
                CLK_I => CLK_I,
                CLK_I => CLK_I,
                RST_I => RST_I,
                RST_I => RST_I,
                CE_16 => CE_16
                CE_16 => CE_16
        );
        );
 
 
        urt: uart
        urt: uart
        PORT MAP(       CLK_I     => CLK_I,
        PORT MAP(       CLK_I     => CLK_I,
                                RST_I     => RST_I,
                                RST_I     => RST_I,
                                CE_16     => CE_16,
                                CE_16     => CE_16,
                                TX_DATA   => LTX_DATA,
                                TX_DATA   => LTX_DATA,
                                TX_FLAG   => TX_FLAG,
                                TX_FLAG   => TX_FLAG,
                                TX_SEROUT => TX_SEROUT,
                                TX_SEROUT => TX_SEROUT,
                                TX_FLAGQ  => TX_FLAGQ,
                                TX_FLAGQ  => TX_FLAGQ,
                                RX_SERIN  => RX_SERIN,
                                RX_SERIN  => RX_SERIN,
                                RX_DATA   => RX_DATA,
                                RX_DATA   => RX_DATA,
                                RX_FLAG   => RX_FLAG
                                RX_FLAG   => RX_FLAG
                        );
                        );
 
 
        process(CLK_I)
        process(CLK_I)
        begin
        begin
                if (rising_edge(CLK_I)) then
                if (rising_edge(CLK_I)) then
                        if (RST_I = '1') then
                        if (RST_I = '1') then
                                TX_FLAG <= '0';
                                TX_FLAG <= '0';
                                LTX_DATA <= X"33";
                                LTX_DATA <= X"33";
                        else
                        else
                                if (RD = '1') then                      -- read Rx data
                                if (RD = '1') then                      -- read Rx data
                                        LRX_READY    <= '0';
                                        LRX_READY    <= '0';
                                end if;
                                end if;
 
 
                                if (WR = '1') then                      -- write Tx data
                                if (WR = '1') then                      -- write Tx data
                                        TX_FLAG  <= not TX_FLAG;
                                        TX_FLAG  <= not TX_FLAG;
                                        LTX_DATA <= TX_DATA;
                                        LTX_DATA <= TX_DATA;
                                end if;
                                end if;
 
 
                                if (RX_FLAG /= RX_OLD_FLAG) then
                                if (RX_FLAG /= RX_OLD_FLAG) then
                                        LRX_READY <= '1';
                                        LRX_READY <= '1';
                                end if;
                                end if;
 
 
                                RX_OLD_FLAG <= RX_FLAG;
                                RX_OLD_FLAG <= RX_FLAG;
                        end if;
                        end if;
                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.