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

Subversion Repositories gecko3

[/] [gecko3/] [trunk/] [GECKO3COM/] [gecko3com-ip/] [core/] [GECKO3COM_simple_datapath.vhd] - Diff between revs 24 and 26

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

Rev 24 Rev 26
Line 67... Line 67...
    o_receive_fifo_full       : out std_logic;
    o_receive_fifo_full       : out std_logic;
    o_receive_fifo_data       : out std_logic_vector(BUSWIDTH-1 downto 0);
    o_receive_fifo_data       : out std_logic_vector(BUSWIDTH-1 downto 0);
    i_receive_fifo_reset      : in  std_logic;
    i_receive_fifo_reset      : in  std_logic;
    o_receive_transfersize    : out std_logic_vector(31 downto 0);
    o_receive_transfersize    : out std_logic_vector(31 downto 0);
    i_receive_transfersize_en : in  std_logic_vector((32/SIZE_DBUS_GPIF)-1 downto 0);
    i_receive_transfersize_en : in  std_logic_vector((32/SIZE_DBUS_GPIF)-1 downto 0);
 
    o_receive_transfersize_lsb : out std_logic;
    i_receive_counter_load    : in  std_logic;
    i_receive_counter_load    : in  std_logic;
    i_receive_counter_en      : in  std_logic;
    i_receive_counter_en      : in  std_logic;
    o_receive_counter_zero    : out std_logic;
    o_receive_counter_zero    : out std_logic;
    o_dev_dep_msg_out         : out std_logic;
    o_dev_dep_msg_out         : out std_logic;
    o_request_dev_dep_msg_in  : out std_logic;
    o_request_dev_dep_msg_in  : out std_logic;
Line 142... Line 143...
  -----------------------------------------------------------------------------
  -----------------------------------------------------------------------------
 
 
  signal s_receive_transfersize : std_logic_vector(31 downto 0);
  signal s_receive_transfersize : std_logic_vector(31 downto 0);
  signal s_send_transfersize_reg: std_logic_vector(31 downto 0);
  signal s_send_transfersize_reg: std_logic_vector(31 downto 0);
 
 
  signal s_receive_transfersize_count: std_logic_vector(31 downto 0);
  signal s_receive_transfersize_count : std_logic_vector(30 downto 0);
  signal s_send_transfersize_count: std_logic_vector(31 downto 0);
  signal s_send_transfersize_count    : std_logic_vector(30 downto 0);
 
 
  signal s_receive_fifo_empty : std_logic;
  signal s_receive_fifo_empty : std_logic;
 
 
  signal s_send_fifo_data : std_logic_vector(SIZE_DBUS_GPIF-1 downto 0);
  signal s_send_fifo_data : std_logic_vector(SIZE_DBUS_GPIF-1 downto 0);
  signal s_btag, s_nbtag, s_msg_id: std_logic_vector(7 downto 0);
  signal s_btag, s_nbtag, s_msg_id: std_logic_vector(7 downto 0);
Line 200... Line 201...
      end if;
      end if;
    end if;
    end if;
  end process receive_transfersize;
  end process receive_transfersize;
 
 
  o_receive_transfersize <= s_receive_transfersize;
  o_receive_transfersize <= s_receive_transfersize;
 
  o_receive_transfersize_lsb <= s_receive_transfersize(0);
 
 
 
 
  -- purpose: 32 bit send_transfersize register
  -- purpose: 32 bit send_transfersize register
  -- type   : sequential
  -- type   : sequential
  -- inputs : i_sysclk, i_nReset, i_send_transfersize, i_receive_transfersize_en
  -- inputs : i_sysclk, i_nReset, i_send_transfersize, i_receive_transfersize_en
Line 228... Line 230...
  begin  -- process receive_counter
  begin  -- process receive_counter
    if i_nReset = '0' then              -- asynchronous reset (active low)
    if i_nReset = '0' then              -- asynchronous reset (active low)
      s_receive_transfersize_count <= (others => '0');
      s_receive_transfersize_count <= (others => '0');
    elsif i_sysclk'event and i_sysclk = '1' then  -- rising clock edge
    elsif i_sysclk'event and i_sysclk = '1' then  -- rising clock edge
      if i_receive_counter_load = '1' then
      if i_receive_counter_load = '1' then
        s_receive_transfersize_count <= s_receive_transfersize;
        s_receive_transfersize_count <= s_receive_transfersize(31 downto 1);
      end if;
      elsif i_receive_counter_en = '1' then
      if i_receive_counter_en = '1' then
 
        s_receive_transfersize_count <= s_receive_transfersize_count - 1;
        s_receive_transfersize_count <= s_receive_transfersize_count - 1;
 
      else
 
        s_receive_transfersize_count <= s_receive_transfersize_count;
      end if;
      end if;
    end if;
    end if;
  end process receive_counter;
  end process receive_counter;
 
 
  o_receive_counter_zero <=
  o_receive_counter_zero <=
    '1' when s_receive_transfersize_count = x"0000" else
    '1' when s_receive_transfersize_count = "000000000000000000000000000000"
    '0';
    else '0';
 
 
 
 
  -- purpose: down counter for the send transfer size
  -- purpose: down counter for the send transfer size
  -- type   : sequential
  -- type   : sequential
  -- inputs : i_sysclk, i_nReset, s_send_transfersize_reg,
  -- inputs : i_sysclk, i_nReset, s_send_transfersize_reg,
Line 252... Line 255...
  begin  -- process send_counter
  begin  -- process send_counter
    if i_nReset = '0' then              -- asynchronous reset (active low)
    if i_nReset = '0' then              -- asynchronous reset (active low)
      s_send_transfersize_count <= (others => '0');
      s_send_transfersize_count <= (others => '0');
    elsif i_sysclk'event and i_sysclk = '1' then  -- rising clock edge
    elsif i_sysclk'event and i_sysclk = '1' then  -- rising clock edge
      if i_send_counter_load = '1' then
      if i_send_counter_load = '1' then
        s_send_transfersize_count <= s_send_transfersize_reg;
        s_send_transfersize_count <= s_send_transfersize_reg(31 downto 1);
      end if;
      elsif i_send_counter_en = '1' then
      if i_send_counter_en = '1' then
 
        s_send_transfersize_count <= s_send_transfersize_count - 1;
        s_send_transfersize_count <= s_send_transfersize_count - 1;
 
      else
 
        s_send_transfersize_count <= s_send_transfersize_count;
      end if;
      end if;
    end if;
    end if;
  end process send_counter;
  end process send_counter;
 
 
  o_send_counter_zero <=
  o_send_counter_zero <=
    '1' when s_send_transfersize_count = x"0000" else
    '1' when s_send_transfersize_count = "000000000000000000000000000000"
    '0';
    else '0';
 
 
 
 
  -- purpose: registers to store the btag and inverse btag
  -- purpose: registers to store the btag and inverse btag
  -- type   : sequential
  -- type   : sequential
  -- inputs : i_sysclk, i_nReset, i_btag_reg_en, i_nbtag_reg_en
  -- inputs : i_sysclk, i_nReset, i_btag_reg_en, i_nbtag_reg_en
Line 301... Line 305...
  o_request_dev_dep_msg_in <=
  o_request_dev_dep_msg_in <=
    '1' when s_msg_id(7 downto 0) = x"02" else
    '1' when s_msg_id(7 downto 0) = x"02" else
    '0';
    '0';
 
 
  o_eom_bit_detected <=
  o_eom_bit_detected <=
    '1' when i_rx_data(15 downto 8) = b"00000001" else
    '1' when i_rx_data(7 downto 0) = b"00000001" else
    '0';
    '0';
 
 
 
 
  -- purpose: mulitiplexer to construct the tmc header structure
  -- purpose: mulitiplexer to construct the tmc header structure
  -- type   : combinational
  -- type   : combinational
Line 314... Line 318...
  -- outputs: o_tx_data
  -- outputs: o_tx_data
  tx_data_mux: process (i_send_mux_sel, i_send_have_more_data, s_btag,
  tx_data_mux: process (i_send_mux_sel, i_send_have_more_data, s_btag,
                        s_nbtag, s_send_fifo_data, s_send_transfersize_reg)
                        s_nbtag, s_send_fifo_data, s_send_transfersize_reg)
  begin  -- process tx_data_mux
  begin  -- process tx_data_mux
    case i_send_mux_sel is
    case i_send_mux_sel is
      when "000" => o_tx_data <= x"02" & s_btag;  -- MsgID and stored bTag
      when "000"  => o_tx_data <= s_btag & s_msg_id; -- MsgID and stored bTag
      when "001" => o_tx_data <= s_nbtag & x"00"; -- inverted bTag and Reserved
      when "001"  => o_tx_data <= x"00" & s_nbtag; -- inverted bTag and Reserved
      when "010" => o_tx_data <= s_send_transfersize_reg(15 downto 0);
      when "010" => o_tx_data <= s_send_transfersize_reg(15 downto 0);
      when "011" => o_tx_data <= s_send_transfersize_reg(31 downto 16);
      when "011" => o_tx_data <= s_send_transfersize_reg(31 downto 16);
                    --TransferAttributes EOM bit:
                    --TransferAttributes EOM bit:
      when "100" => o_tx_data <= b"000000000000000" & i_send_have_more_data;
      when "100"  => o_tx_data <= b"000000000000000" & not i_send_have_more_data;
      when "101" => o_tx_data <= x"0000";  -- Header byte 10 and 11, Reserved
      when "101" => o_tx_data <= x"0000";  -- Header byte 10 and 11, Reserved
      when "110" => o_tx_data <= s_send_fifo_data;  -- message data
      when "110" => o_tx_data <= s_send_fifo_data;  -- message data
      when others => o_tx_data <= s_send_fifo_data;
      when others => o_tx_data <= s_btag & s_msg_id; -- MsgID and stored bTag
    end case;
    end case;
  end process tx_data_mux;
  end process tx_data_mux;
 
 
 
 
  -- purpose: set and reset behavour for the status flags
  -- purpose: set and reset behavour for the status flags

powered by: WebSVN 2.1.0

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