Generated by EASE/HDL for peterj on Mon Jul 02 10:55:24 2007

Documentation for architecture MGTEVB/MuxData/a0

Contents Side Data Generated HDL

VHDL Contents

    1  -- EASE/HDL begin --------------------------------------------------------------
    2  -- 
    3  -- Architecture 'a0' of entity 'MuxData'.
    4  -- 
    5  --------------------------------------------------------------------------------
    6  -- 
    7  -- Copy of the interface declaration:
    8  -- 
    9  --   port(
   10  --     ChanEn    : in     std_logic_vector(7 downto 0);
   11  --     ChanSts   : in     std_logic_vector(31 downto 0);
   12  --     Channel   : in     std_logic_vector(3 downto 0);
   13  --     EBData    : out    std_logic_vector(31 downto 0);
   14  --     EBEmpty   : out    std_logic;
   15  --     EBValid   : out    std_logic;
   16  --     EValid    : out    std_logic;
   17  --     EXData    : out    std_logic_vector(31 downto 0);
   18  --     EXEmpty   : out    std_logic;
   19  --     EXValid   : out    std_logic;
   20  --     EvDataRdy : out    std_logic;
   21  --     LRD       : in     std_logic_v32array(7 downto 0);
   22  --     LRX       : in     std_logic_v32array(7 downto 0);
   23  --     LastW     : out    std_logic;
   24  --     LastX     : out    std_logic;
   25  --     RDE       : in     std_logic_vector(7 downto 0);
   26  --     RDV       : in     std_logic_vector(7 downto 0);
   27  --     ReqD      : in     std_logic;
   28  --     ReqX      : in     std_logic;
   29  --     RqRD      : out    std_logic_vector(7 downto 0);
   30  --     RqXD      : out    std_logic_vector(7 downto 0);
   31  --     Rst_n     : in     std_logic;
   32  --     SClk      : in     std_logic;
   33  --     XDE       : in     std_logic_vector(7 downto 0);
   34  --     XDV       : in     std_logic_vector(7 downto 0));
   35  -- 
   36  -- EASE/HDL end ----------------------------------------------------------------
   37  
   38  architecture a0 of MuxData is
   39  
   40    signal LastRNE    : std_logic_vector(7 downto 0);
   41    signal LastXNE    : std_logic_vector(7 downto 0);
   42  
   43    signal IntEBValid : std_logic;
   44    signal IntLastW   : std_logic;
   45    signal IntLastX   : std_logic;
   46    signal RDPresent  : std_logic;
   47    signal XDPresent  : std_logic;
   48    signal ChanAct    : std_logic_vector(7 downto 0);     -- active MGT channels
   49  
   50  begin
   51  
   52    LastW    <= IntLastW;     -- last read from EventData fifo was successfull
   53    LastX    <= IntLastX;     -- last read from ExtendedData fifo was successfull
   54    EBValid  <= IntEBValid;   -- valid data on output of Eventdata fifo   
   55             -- EXValid;      -- valid data on output of Extended data fifo
   56  
   57    -- valid data for ID comparators
   58    EValid <= '1' when (IntEBvalid = '1' or IntLastW = '1') else '0';
   59  
   60    -- EventDataReady when EventData fifo and ExtendedData fifo have data.
   61    EvDataRdy <= '1' when (RDPresent = '1' and XDPresent = '1') else '0';
   62  
   63    ----------------------------------------------------------------------
   64  
   65    -- The next three signals are needed for running MGT-test mode.
   66    -- Say "Data Present" when a MGTlink is down (ChanSts=Ldown_n).
   67  
   68    ChanAct  <= ChanEn and ChanSts(7 downto 0); -- only work with active channels
   69  
   70    RDPresent <= '1' when
   71      (    (ChanEn(7 downto 0) /= x"00")
   72      and ((ChanEn(0) = '1' and RDE(0) = '0') xor ChanAct(0) = '0')
   73      and ((ChanEn(1) = '1' and RDE(1) = '0') xor ChanAct(1) = '0')
   74      and ((ChanEn(2) = '1' and RDE(2) = '0') xor ChanAct(2) = '0')
   75      and ((ChanEn(3) = '1' and RDE(3) = '0') xor ChanAct(3) = '0')
   76      and ((ChanEn(4) = '1' and RDE(4) = '0') xor ChanAct(4) = '0')
   77      and ((ChanEn(5) = '1' and RDE(5) = '0') xor ChanAct(5) = '0')
   78      and ((ChanEn(6) = '1' and RDE(6) = '0') xor ChanAct(6) = '0')
   79      and ((ChanEn(7) = '1' and RDE(7) = '0') xor ChanAct(7) = '0')
   80      ) else '0';           --  RDE = event-data-fifo-empty
   81  
   82    XDPresent <= '1' when
   83      (    (ChanEn(7 downto 0) /= x"00")
   84      and ((ChanEn(0) = '1' and XDE(0) = '0') xor ChanAct(0) = '0')
   85      and ((ChanEn(1) = '1' and XDE(1) = '0') xor ChanAct(1) = '0')
   86      and ((ChanEn(2) = '1' and XDE(2) = '0') xor ChanAct(2) = '0')
   87      and ((ChanEn(3) = '1' and XDE(3) = '0') xor ChanAct(3) = '0')
   88      and ((ChanEn(4) = '1' and XDE(4) = '0') xor ChanAct(4) = '0')
   89      and ((ChanEn(5) = '1' and XDE(5) = '0') xor ChanAct(5) = '0')
   90      and ((ChanEn(6) = '1' and XDE(6) = '0') xor ChanAct(6) = '0')
   91      and ((ChanEn(7) = '1' and XDE(7) = '0') xor ChanAct(7) = '0')
   92      ) else '0';           --  XDE = extended-data-fifo-empty
   93  
   94    ----------------------------------------------------------------------
   95  
   96    -- The request data lines for each channelfifo are set when that channel
   97    -- is selected and ReqD/X is set, or set always when the channel is disabled.
   98    -- The latter is needed to continuously flush the fifo in order that
   99    -- the outgoing datastream from the MRODIN is never stopped by fifo-full.
  100  
  101    RqRD(0) <= '1' when ((ReqD = '1' and Channel = "0000") or ChanEn(0) = '0') else '0';
  102    RqRD(1) <= '1' when ((ReqD = '1' and Channel = "0001") or ChanEn(1) = '0') else '0';
  103    RqRD(2) <= '1' when ((ReqD = '1' and Channel = "0010") or ChanEn(2) = '0') else '0';
  104    RqRD(3) <= '1' when ((ReqD = '1' and Channel = "0011") or ChanEn(3) = '0') else '0';
  105    RqRD(4) <= '1' when ((ReqD = '1' and Channel = "0100") or ChanEn(4) = '0') else '0';
  106    RqRD(5) <= '1' when ((ReqD = '1' and Channel = "0101") or ChanEn(5) = '0') else '0';
  107    RqRD(6) <= '1' when ((ReqD = '1' and Channel = "0110") or ChanEn(6) = '0') else '0';
  108    RqRD(7) <= '1' when ((ReqD = '1' and Channel = "0111") or ChanEn(7) = '0') else '0';
  109  
  110    RqXD(0) <= '1' when ((ReqX = '1' and Channel = "0000") or ChanEn(0) = '0') else '0';
  111    RqXD(1) <= '1' when ((ReqX = '1' and Channel = "0001") or ChanEn(1) = '0') else '0';
  112    RqXD(2) <= '1' when ((ReqX = '1' and Channel = "0010") or ChanEn(2) = '0') else '0';
  113    RqXD(3) <= '1' when ((ReqX = '1' and Channel = "0011") or ChanEn(3) = '0') else '0';
  114    RqXD(4) <= '1' when ((ReqX = '1' and Channel = "0100") or ChanEn(4) = '0') else '0';
  115    RqXD(5) <= '1' when ((ReqX = '1' and Channel = "0101") or ChanEn(5) = '0') else '0';
  116    RqXD(6) <= '1' when ((ReqX = '1' and Channel = "0110") or ChanEn(6) = '0') else '0';
  117    RqXD(7) <= '1' when ((ReqX = '1' and Channel = "0111") or ChanEn(7) = '0') else '0';
  118  
  119    -- multiplex the data from the event-data fifo
  120    with Channel select EBData <=
  121      LRD(0) when "0000",
  122      LRD(1) when "0001",
  123      LRD(2) when "0010",
  124      LRD(3) when "0011",
  125      LRD(4) when "0100",
  126      LRD(5) when "0101",
  127      LRD(6) when "0110",
  128      LRD(7) when others;
  129      --LRD(7) when "0111",
  130      --(others => '0') when others;
  131    --
  132    -- multiplex the data from the extended-data fifo
  133    with Channel select EXData <=
  134      LRX(0) when "0000",
  135      LRX(1) when "0001",
  136      LRX(2) when "0010",
  137      LRX(3) when "0011",
  138      LRX(4) when "0100",
  139      LRX(5) when "0101",
  140      LRX(6) when "0110",
  141      LRX(7) when others;
  142    --
  143    -- multiplex the empty flags from the event-data fifo.
  144    with Channel select EBEmpty <=
  145      RDE(0) when "0000",
  146      RDE(1) when "0001",
  147      RDE(2) when "0010",
  148      RDE(3) when "0011",
  149      RDE(4) when "0100",
  150      RDE(5) when "0101",
  151      RDE(6) when "0110",
  152      RDE(7) when "0111",
  153      '0'    when others;
  154    --
  155    -- multiplex the empty flags from the extended-data fifo.
  156    with Channel select EXEmpty <=
  157      XDE(0) when "0000",
  158      XDE(1) when "0001",
  159      XDE(2) when "0010",
  160      XDE(3) when "0011",
  161      XDE(4) when "0100",
  162      XDE(5) when "0101",
  163      XDE(6) when "0110",
  164      XDE(7) when "0111",
  165      '0'    when others;
  166    --
  167    -- multiplex the valid flags from the event-data fifo.
  168    with Channel select IntEBValid <=
  169      RDV(0) when "0000",
  170      RDV(1) when "0001",
  171      RDV(2) when "0010",
  172      RDV(3) when "0011",
  173      RDV(4) when "0100",
  174      RDV(5) when "0101",
  175      RDV(6) when "0110",
  176      RDV(7) when "0111",
  177      '0'    when others;
  178    --
  179    -- multiplex the valid flags from the extended-data fifo.
  180    with Channel select EXValid <=
  181      XDV(0) when "0000",
  182      XDV(1) when "0001",
  183      XDV(2) when "0010",
  184      XDV(3) when "0011",
  185      XDV(4) when "0100",
  186      XDV(5) when "0101",
  187      XDV(6) when "0110",
  188      XDV(7) when "0111",
  189      '0'    when others;
  190    --
  191    -- multiplex the last-read-valid flags from the event-data fifo.
  192    with Channel select IntLastW <=
  193      LastRNE(0) when "0000",
  194      LastRNE(1) when "0001",
  195      LastRNE(2) when "0010",
  196      LastRNE(3) when "0011",
  197      LastRNE(4) when "0100",
  198      LastRNE(5) when "0101",
  199      LastRNE(6) when "0110",
  200      LastRNE(7) when "0111",
  201      '0'        when others;
  202    --
  203    -- multiplex the last-read-valid flags from the extended-data fifo.
  204    with Channel select IntLastX <=
  205      LastXNE(0) when "0000",
  206      LastXNE(1) when "0001",
  207      LastXNE(2) when "0010",
  208      LastXNE(3) when "0011",
  209      LastXNE(4) when "0100",
  210      LastXNE(5) when "0101",
  211      LastXNE(6) when "0110",
  212      LastXNE(7) when "0111",
  213      '0'        when others;
  214    --
  215  
  216    ----------------------------------------------------------------------
  217  
  218    prFlags:
  219    process (SClk, Rst_n)
  220    begin
  221      if (Rst_n = '0') then
  222        LastRNE(7 downto 0) <= (others => '0');
  223        LastXNE(7 downto 0) <= (others => '0');
  224      elsif (rising_edge(SClk)) then
  225        if (ReqD = '1') then
  226          case Channel is
  227          when "0000" =>
  228            LastRNE(0) <= not RDE(0);
  229          when "0001" =>
  230            LastRNE(1) <= not RDE(1);
  231          when "0010" =>
  232            LastRNE(2) <= not RDE(2);
  233          when "0011" =>
  234            LastRNE(3) <= not RDE(3);
  235          when "0100" =>
  236            LastRNE(4) <= not RDE(4);
  237          when "0101" =>
  238            LastRNE(5) <= not RDE(5);
  239          when "0110" =>
  240            LastRNE(6) <= not RDE(6);
  241          when "0111" =>
  242            LastRNE(7) <= not RDE(7);
  243          when others =>
  244            null;
  245          end case;
  246        end if;
  247        --
  248        if (ReqX = '1') then
  249          case Channel is
  250          when "0000" =>
  251            LastXNE(0) <= not XDE(0);
  252          when "0001" =>
  253            LastXNE(1) <= not XDE(1);
  254          when "0010" =>
  255            LastXNE(2) <= not XDE(2);
  256          when "0011" =>
  257            LastXNE(3) <= not XDE(3);
  258          when "0100" =>
  259            LastXNE(4) <= not XDE(4);
  260          when "0101" =>
  261            LastXNE(5) <= not XDE(5);
  262          when "0110" =>
  263            LastXNE(6) <= not XDE(6);
  264          when "0111" =>
  265            LastXNE(7) <= not XDE(7);
  266          when others =>
  267            null;
  268          end case;
  269        end if;
  270      end if;
  271    end process;
  272  
  273  end architecture a0 ; -- of MuxData
  274  
  275