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

Subversion Repositories open8_urisc

[/] [open8_urisc/] [trunk/] [VHDL/] [o8_sdlc_if.vhd] - Diff between revs 201 and 202

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

Rev 201 Rev 202
Line 74... Line 74...
library work;
library work;
  use work.sdlc_serial_pkg.all;
  use work.sdlc_serial_pkg.all;
 
 
entity o8_sdlc_if is
entity o8_sdlc_if is
generic(
generic(
  Monitor_Enable             : boolean := true;
  Monitor_Enable             : boolean := false;
  Attach_Monitor_to_CPU_Side : boolean := false;
  Attach_Monitor_to_CPU_Side : boolean := false;
  Poly_Init                  : std_logic_vector(15 downto 0) := x"0000";
  Poly_Init                  : std_logic_vector(15 downto 0) := x"0000";
  Set_As_Master              : boolean := true;
  Set_As_Master              : boolean := true;
  Clock_Offset               : integer := 6;
  Clock_Offset               : integer := 6;
  BitClock_Freq              : real := 500000.0;
  BitClock_Freq              : real := 500000.0;
Line 127... Line 127...
  signal Reg_Sel             : std_logic := '0';
  signal Reg_Sel             : std_logic := '0';
  signal Reg_Wr_En           : std_logic := '0';
  signal Reg_Wr_En           : std_logic := '0';
  signal Reg_Clk_Sel         : std_logic := '0';
  signal Reg_Clk_Sel         : std_logic := '0';
  signal Reg_TxS_Sel         : std_logic := '0';
  signal Reg_TxS_Sel         : std_logic := '0';
 
 
  -- Connect the serial engine to the dual-port memory
 
  signal DP_Addr             : std_logic_vector(8 downto 0) := (others => '0');
  signal DP_Addr             : std_logic_vector(8 downto 0) := (others => '0');
  signal DP_Wr_Data          : DATA_IN_TYPE := x"00";
  signal DP_Wr_Data          : DATA_IN_TYPE := x"00";
  signal DP_Wr_En            : std_logic := '0';
  signal DP_Wr_En            : std_logic := '0';
  signal DP_Rd_Data          : DATA_IN_TYPE := x"00";
  signal DP_Rd_Data          : DATA_IN_TYPE := x"00";
 
 
 
  signal DP_Port0_Addr       : DATA_IN_TYPE  := x"00";
 
  signal DP_Port0_RWn        : std_logic     := '0';
 
  signal DP_Port0_WrData     : DATA_IN_TYPE  := x"00";
 
  signal DP_Port0_RdData     : DATA_IN_TYPE  := x"00";
 
  signal DP_Port0_Req        : std_logic     := '0';
 
  signal DP_Port0_Ack        : std_logic     := '0';
 
 
 
  signal DP_Port1_Addr       : DATA_IN_TYPE  := x"00";
 
  signal DP_Port1_RWn        : std_logic     := '0';
 
  signal DP_Port1_WrData     : DATA_IN_TYPE  := x"00";
 
  signal DP_Port1_RdData     : DATA_IN_TYPE  := x"00";
 
  signal DP_Port1_Req        : std_logic     := '0';
 
  signal DP_Port1_Ack        : std_logic     := '0';
 
 
  signal BClk_RE             : std_logic := '0';
  signal BClk_RE             : std_logic := '0';
  signal BClk_FE             : std_logic := '0';
  signal BClk_FE             : std_logic := '0';
 
  signal BClk_Okay           : std_logic     := '0';
 
 
  signal TX_Wr_En            : std_logic := '0';
  signal TX_Wr_En            : std_logic := '0';
  signal TX_Wr_Flag          : std_logic := '0';
  signal TX_Wr_Flag          : std_logic := '0';
  signal TX_Wr_Data          : DATA_IN_TYPE := x"00";
  signal TX_Wr_Data          : DATA_IN_TYPE := x"00";
  signal TX_Req_Next         : std_logic := '0';
  signal TX_Req_Next         : std_logic := '0';
 
 
  signal TX_CRC_Clr          : std_logic := '0';
  signal TX_CRC_Clr          : std_logic := '0';
  signal TX_CRC_En           : std_logic := '0';
  signal TX_CRC_En           : std_logic := '0';
  signal TX_CRC_Data         : CRC_OUT_TYPE := x"0000";
  signal TX_CRC_Data         : CRC_OUT_TYPE := x"0000";
  alias  TX_CRC_Data_LB      is TX_CRC_Data(7 downto 0);
 
  alias  TX_CRC_Data_UB      is TX_CRC_Data(15 downto 8);
 
  signal TX_CRC_Valid        : std_logic := '0';
  signal TX_CRC_Valid        : std_logic := '0';
 
 
 
  signal TX_Interrupt        : std_logic     := '0';
 
 
  signal RX_Valid            : std_logic := '0';
  signal RX_Valid            : std_logic := '0';
  signal RX_Flag             : std_logic := '0';
  signal RX_Flag             : std_logic := '0';
  signal RX_Data             : DATA_IN_TYPE := x"00";
  signal RX_Data             : DATA_IN_TYPE;
  signal RX_Idle             : std_logic := '0';
  signal RX_Idle             : std_logic := '0';
 
 
  signal RX_CRC_Clr          : std_logic := '0';
  signal RX_Frame_Start      : std_logic     := '0';
  signal RX_CRC_En           : std_logic := '0';
  signal RX_Frame_Stop       : std_logic     := '0';
  signal RX_CRC_Data         : CRC_OUT_TYPE := x"0000";
  signal RX_Frame_Valid      : std_logic     := '0';
 
  signal RX_Frame_Data       : DATA_IN_TYPE  := x"00";
 
 
  signal RX_CRC_Valid        : std_logic := '0';
  signal RX_CRC_Valid        : std_logic := '0';
 
  signal RX_CRC_Data         : CRC_OUT_TYPE  := x"0000";
 
 
  signal BClk_Okay           : std_logic := '0';
  signal RX_Interrupt        : std_logic     := '0';
 
 
begin
begin
 
 
 
-- ***************************************************************************
 
-- *          Open8 Bus Interface and Control Register Detection             *
 
-- ***************************************************************************
 
 
  -- This decode needs to happen immediately, to give the RAM a chance to
  -- This decode needs to happen immediately, to give the RAM a chance to
  --  do the lookup before we have to set Rd_Data
  --  do the lookup before we have to set Rd_Data
  RAM_Addr_Match             <= '1' when Base_Addr = RAM_Upper_Addr else '0';
  RAM_Addr_Match             <= '1' when Base_Addr = RAM_Upper_Addr else '0';
  RAM_Wr_En                  <= RAM_Addr_Match and Wr_Enable;
  RAM_Wr_En                  <= RAM_Addr_Match and Wr_Enable;
 
 
Line 196... Line 217...
        Rd_Data              <= Rd_Data_i;
        Rd_Data              <= Rd_Data_i;
      end if;
      end if;
    end if;
    end if;
  end process;
  end process;
 
 
 
-- ***************************************************************************
 
-- *                     Shared Dual-Port Memory                             *
 
-- ***************************************************************************
 
 
  U_RAM : entity work.sdlc_dp512b_ram
  U_RAM : entity work.sdlc_dp512b_ram
  port map(
  port map(
    clock                    => Clock,
    clock                    => Clock,
    address_a                => RAM_Lower_Addr,
    address_a                => RAM_Lower_Addr,
    address_b                => DP_Addr,
    address_b                => DP_Addr,
Line 234... Line 259...
    q                        => open
    q                        => open
  );
  );
 
 
end generate;
end generate;
 
 
 
-- ***************************************************************************
 
-- *                     Memory Arbitration                                  *
 
-- ***************************************************************************
 
 
 
  U_ARB : entity work.sdlc_serial_arbfsm
 
  generic map(
 
    Reset_Level              => Reset_Level
 
  )
 
  port map(
 
    Clock                    => Clock,
 
    Reset                    => Reset,
 
    --
 
    DP_Port0_Addr            => DP_Port0_Addr,
 
    DP_Port0_RWn             => DP_Port0_RWn,
 
    DP_Port0_WrData          => DP_Port0_WrData,
 
    DP_Port0_RdData          => DP_Port0_RdData,
 
    DP_Port0_Req             => DP_Port0_Req,
 
    DP_Port0_Ack             => DP_Port0_Ack,
 
    --
 
    DP_Port1_Addr            => DP_Port1_Addr,
 
    DP_Port1_RWn             => DP_Port1_RWn,
 
    DP_Port1_WrData          => DP_Port1_WrData,
 
    DP_Port1_RdData          => DP_Port1_RdData,
 
    DP_Port1_Req             => DP_Port1_Req,
 
    DP_Port1_Ack             => DP_Port1_Ack,
 
    --
 
    DP_Addr                  => DP_Addr,
 
    DP_Wr_Data               => DP_Wr_Data,
 
    DP_Wr_En                 => DP_Wr_En,
 
    DP_Rd_Data               => DP_Rd_Data
 
  );
 
 
 
-- ***************************************************************************
 
-- *                        Serial BitClock                                  *
 
-- ***************************************************************************
 
 
  U_BCLK : entity work.sdlc_serial_clk
  U_BCLK : entity work.sdlc_serial_clk
  generic map(
  generic map(
    Set_As_Master            => Set_As_Master,
    Set_As_Master            => Set_As_Master,
    BitClock_Freq            => BitClock_Freq,
    BitClock_Freq            => BitClock_Freq,
    Reset_Level              => Reset_Level,
    Reset_Level              => Reset_Level,
Line 252... Line 313...
    BClk_FE                  => BClk_FE,
    BClk_FE                  => BClk_FE,
    BClk_RE                  => BClk_RE,
    BClk_RE                  => BClk_RE,
    BClk_Okay                => BClk_Okay
    BClk_Okay                => BClk_Okay
  );
  );
 
 
  U_CTRL : entity work.sdlc_serial_ctrl
-- ***************************************************************************
 
-- *                     Serial Transmit Path                                *
 
-- ***************************************************************************
 
 
 
  U_TXFSM: entity work.sdlc_serial_txfsm
  generic map(
  generic map(
    Reset_Level              => Reset_Level
    Reset_Level              => Reset_Level
  )
  )
  port map(
  port map(
    Clock                    => Clock,
    Clock                    => Clock,
Line 265... Line 330...
    BClk_Okay                => BClk_Okay,
    BClk_Okay                => BClk_Okay,
    --
    --
    Reg_Clk_Sel              => Reg_Clk_Sel,
    Reg_Clk_Sel              => Reg_Clk_Sel,
    Reg_TxS_Sel              => Reg_TxS_Sel,
    Reg_TxS_Sel              => Reg_TxS_Sel,
    --
    --
    DP_Addr                  => DP_Addr,
    DP_Port0_Addr            => DP_Port0_Addr,
    DP_Wr_Data               => DP_Wr_Data,
    DP_Port0_RWn             => DP_Port0_RWn,
    DP_Wr_En                 => DP_Wr_En,
    DP_Port0_WrData          => DP_Port0_WrData,
    DP_Rd_Data               => DP_Rd_Data,
    DP_Port0_RdData          => DP_Port0_RdData,
 
    DP_Port0_Req             => DP_Port0_Req,
 
    DP_Port0_Ack             => DP_Port0_Ack,
    --
    --
    TX_Wr_En                 => TX_Wr_En,
    TX_Wr_En                 => TX_Wr_En,
    TX_Wr_Flag               => TX_Wr_Flag,
    TX_Wr_Flag               => TX_Wr_Flag,
    TX_Wr_Data               => TX_Wr_Data,
    TX_Wr_Data               => TX_Wr_Data,
    TX_Req_Next              => TX_Req_Next,
    TX_Req_Next              => TX_Req_Next,
Line 280... Line 347...
    TX_CRC_Clr               => TX_CRC_Clr,
    TX_CRC_Clr               => TX_CRC_Clr,
    TX_CRC_En                => TX_CRC_En,
    TX_CRC_En                => TX_CRC_En,
    TX_CRC_Data              => TX_CRC_Data,
    TX_CRC_Data              => TX_CRC_Data,
    TX_CRC_Valid             => TX_CRC_Valid,
    TX_CRC_Valid             => TX_CRC_Valid,
    --
    --
    RX_Valid                 => RX_Valid,
    TX_Interrupt             => TX_Interrupt
    RX_Flag                  => RX_Flag,
  );
    RX_Data                  => RX_Data,
 
    RX_Idle                  => RX_Idle,
  U_TX_CRC : entity work.sdlc_crc16_ccitt
 
  generic map(
 
    Poly_Init                => Poly_Init,
 
    Reset_Level              => Reset_Level
 
  )
 
  port map(
 
    Clock                    => Clock,
 
    Reset                    => Reset,
    --
    --
    RX_CRC_Clr               => RX_CRC_Clr,
    Clear                    => TX_CRC_Clr,
    RX_CRC_En                => RX_CRC_En,
    Wr_En                    => TX_CRC_En,
    RX_CRC_Data              => RX_CRC_Data,
    Wr_Data                  => TX_Wr_Data,
    RX_CRC_Valid             => RX_CRC_Valid,
 
    --
    --
    Interrupt                => Interrupt
    CRC16_Valid              => TX_CRC_Valid,
 
    CRC16_Out                => TX_CRC_Data
  );
  );
 
 
  U_TX_SER : entity work.sdlc_serial_tx
  U_TX_SER : entity work.sdlc_serial_tx
  generic map(
  generic map(
    Reset_Level              => Reset_Level
    Reset_Level              => Reset_Level
Line 313... Line 387...
    TX_Req_Next              => TX_Req_Next,
    TX_Req_Next              => TX_Req_Next,
    --
    --
    Serial_Out               => SDLC_Out
    Serial_Out               => SDLC_Out
  );
  );
 
 
  U_TX_CRC : entity work.sdlc_crc16_ccitt
-- ***************************************************************************
  generic map(
-- *                     Serial Receive Path                                 *
    Poly_Init                => Poly_Init,
-- ***************************************************************************
    Reset_Level              => Reset_Level
 
  )
 
  port map(
 
    Clock                    => Clock,
 
    Reset                    => Reset,
 
    --
 
    Clear                    => TX_CRC_Clr,
 
    Wr_Data                  => TX_Wr_Data,
 
    Wr_En                    => TX_CRC_En,
 
    --
 
    CRC16_Out                => TX_CRC_Data,
 
    CRC16_Valid              => TX_CRC_Valid
 
  );
 
 
 
  U_RX_SER : entity work.sdlc_serial_rx
  U_RX_SER : entity work.sdlc_serial_rx
  generic map(
  generic map(
    Set_As_Master            => Set_As_Master,
    Set_As_Master            => Set_As_Master,
    Clock_Offset             => Clock_Offset,
    Clock_Offset             => Clock_Offset,
Line 351... Line 412...
    RX_Flag                  => RX_Flag,
    RX_Flag                  => RX_Flag,
    RX_Data                  => RX_Data,
    RX_Data                  => RX_Data,
    RX_Idle                  => RX_Idle
    RX_Idle                  => RX_Idle
  );
  );
 
 
 
  U_RX_PKT : entity work.sdlc_serial_frame
 
  generic map(
 
    Reset_Level              => Reset_Level
 
  )
 
  port map(
 
    Clock                    => Clock,
 
    Reset                    => Reset,
 
    --
 
    RX_Valid                 => RX_Valid,
 
    RX_Flag                  => RX_Flag,
 
    RX_Data                  => RX_Data,
 
    RX_Idle                  => RX_Idle,
 
    --
 
    RX_Frame_Start           => RX_Frame_Start,
 
    RX_Frame_Stop            => RX_Frame_Stop,
 
    RX_Frame_Valid           => RX_Frame_Valid,
 
    RX_Frame_Data            => RX_Frame_Data
 
  );
 
 
  U_RX_CRC : entity work.sdlc_crc16_ccitt
  U_RX_CRC : entity work.sdlc_crc16_ccitt
  generic map(
  generic map(
    Poly_Init                => Poly_Init,
    Poly_Init                => Poly_Init,
    Reset_Level              => Reset_Level
    Reset_Level              => Reset_Level
  )
  )
  port map(
  port map(
    Clock                    => Clock,
    Clock                    => Clock,
    Reset                    => Reset,
    Reset                    => Reset,
    --
    --
    Clear                    => RX_CRC_Clr,
    Clear                    => RX_Frame_Start,
    Wr_Data                  => RX_Data,
    Wr_En                    => RX_Frame_Valid,
    Wr_En                    => RX_CRC_En,
    Wr_Data                  => RX_Frame_Data,
 
    --
 
    CRC16_Valid              => RX_CRC_Valid,
 
    CRC16_Out                => RX_CRC_Data
 
  );
 
 
 
  U_RX_FSM : entity work.sdlc_serial_rxfsm
 
  generic map(
 
    Reset_Level              => Reset_Level
 
  )
 
  port map(
 
    Clock                    => Clock,
 
    Reset                    => Reset,
 
    --
 
    BClk_Okay                => BClk_Okay,
 
    --
 
    DP_Port1_Addr            => DP_Port1_Addr,
 
    DP_Port1_RWn             => DP_Port1_RWn,
 
    DP_Port1_WrData          => DP_Port1_WrData,
 
    DP_Port1_RdData          => DP_Port1_RdData,
 
    DP_Port1_Req             => DP_Port1_Req,
 
    DP_Port1_Ack             => DP_Port1_Ack,
 
    --
 
    RX_CRC_Valid             => RX_CRC_Valid,
 
    RX_CRC_Data              => RX_CRC_Data,
 
    --
 
    RX_Frame_Start           => RX_Frame_Start,
 
    RX_Frame_Stop            => RX_Frame_Stop,
 
    RX_Frame_Valid           => RX_Frame_Valid,
 
    RX_Frame_Data            => RX_Frame_Data,
    --
    --
    CRC16_Out                => RX_CRC_Data,
    RX_Interrupt             => RX_Interrupt
    CRC16_Valid              => RX_CRC_Valid
 
  );
  );
 
 
 
-- ***************************************************************************
 
-- *                        Merge Interrupts                                 *
 
-- ***************************************************************************
 
 
 
   Interrupt_merge_proc: process( Clock, Reset )
 
   begin
 
     if( Reset = Reset_Level )then
 
       Interrupt             <= '0';
 
     elsif( rising_edge(Clock) )then
 
       Interrupt             <= RX_Interrupt or TX_Interrupt;
 
     end if;
 
   end process;
 
 
end architecture;
end architecture;
 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.