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

Subversion Repositories w11

[/] [w11/] [tags/] [w11a_V0.6/] [rtl/] [sys_gen/] [tst_serloop/] [tst_serloop_hiomap.vhd] - Rev 24

Compare with Previous | Blame | View Log

-- $Id: tst_serloop_hiomap.vhd 476 2013-01-26 22:23:53Z mueller $
--
-- Copyright 2011- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
-- This program is free software; you may redistribute and/or modify it under
-- the terms of the GNU General Public License as published by the Free
-- Software Foundation, either version 2, or at your option any later version.
--
-- This program is distributed in the hope that it will be useful, but
-- WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY
-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-- for complete details.
--
------------------------------------------------------------------------------
-- Module Name:    tst_serloop_hiomap - syn
-- Description:    default human I/O mapper 
--
-- Dependencies:   -
-- Test bench:     -
--
-- Target Devices: generic
-- Tool versions:  xst 13.1; ghdl 0.29
--
-- Revision History: 
-- Date         Rev Version  Comment
-- 2011-12-09   437   1.0.2  rename serport stat->moni port
-- 2011-11-16   426   1.0.1  setup leds and dps
-- 2011-11-05   420   1.0    Initial version
------------------------------------------------------------------------------
--
-- Usage of Switches, Buttons, LEDs:
--
--    BTN(3):   -- unused --
--       (2):   -- unused --
--       (1):   load enables from SWI(7:4)
--                SWI(7) -> ENAFTDI
--                SWI(6) -> ENATHROTTLE
--                SWI(5) -> ENAESC
--                SWI(4) -> ENAXON
--       (0):   reset state  [!! decoded by top level design !!]
--
--    SWI(7:4)  select display or enable pattern (when BTN(1) pressed)
--       (3)    -- unused --
--       (2:1): mode  00  idle
--                    01  rxblast
--                    10  txblast
--                    11  loop
--    SWI(0)    0 -> main board RS232 port
--              1 -> Pmod1 RS232 port
--
--    LED(7)    enaesc
--       (6)    enaxon
--       (5)    rxfecnt > 0                     (frame error)
--       (4)    rxoecnt > 0                     (overrun error)
--       (3)    rxsecnt > 0                     (sequence error)
--       (2)    abact                           (shows ab activity)
--       (1)    (not rxok) or (not txok)        (shows back preasure)
--       (0)    rxact or txact                  (shows activity)
--
--    DSP       data as selected by SWI(7:4)
--                0000 -> rxfecnt
--                0001 -> rxoecnt
--                0010 -> rxsecnt
--                0100 -> rxcnt.l
--                0101 -> rxcnt.h
--                0110 -> txcnt.l
--                0111 -> txcnt.h
--                1000 -> rxokcnt
--                1001 -> txokcnt
--                1010 -> rxuicnt,rxuidat
--                1111 -> abclkdiv
--
--    DP(3):    not SER_MONI.txok   (shows tx back preasure)
--      (2):    SER_MONI.txact      (shows tx activity)
--      (1):    not SER_MONI.rxok   (shows rx back preasure)
--      (0):    SER_MONI.rxact      (shows rx activity)
--
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
use work.slvtypes.all;
use work.serportlib.all;
use work.tst_serlooplib.all;
 
-- ----------------------------------------------------------------------------
 
entity tst_serloop_hiomap is            -- default human I/O mapper 
  port (
    CLK : in slbit;                     -- clock
    RESET : in slbit;                   -- reset
    HIO_CNTL : out hio_cntl_type;       -- tester controls from hio
    HIO_STAT : in hio_stat_type;        -- tester status to diaplay by hio
    SER_MONI : in serport_moni_type;    -- serport monitor to display by hio
    SWI : in slv8;                      -- switch settings
    BTN : in slv4;                      -- button settings
    LED : out slv8;                     -- led data
    DSP_DAT : out slv16;                -- display data
    DSP_DP : out slv4                   -- display decimal points
  );
end tst_serloop_hiomap;
 
architecture syn of tst_serloop_hiomap is
 
  type regs_type is record
    enaxon : slbit;                     -- enable xon/xoff handling
    enaesc : slbit;                     -- enable xon/xoff escaping
    enathrottle : slbit;                -- enable 1 msec tx throttling
    enaftdi : slbit;                    -- enable ftdi flush handling
    dspdat : slv16;                     -- display data
  end record regs_type;
 
  constant regs_init : regs_type := (
    '0','0','0','0',                    -- enaxon,enaesc,enathrottle,enaftdi
    (others=>'0')                       -- dspdat
 
  );
 
  signal R_REGS : regs_type := regs_init;  -- state registers
  signal N_REGS : regs_type := regs_init;  -- next value state regs
 
begin
 
  proc_regs: process (CLK)
  begin
 
    if rising_edge(CLK) then
      if RESET = '1' then
        R_REGS <= regs_init;
      else
        R_REGS <= N_REGS;
      end if;
    end if;
 
  end process proc_regs;
 
  proc_next: process (R_REGS, HIO_STAT, SER_MONI, SWI, BTN)    
 
    variable r : regs_type := regs_init;
    variable n : regs_type := regs_init;
 
    variable icntl : hio_cntl_type := hio_cntl_init;
    variable iled  : slv8  := (others=>'0');
    variable idat  : slv16 := (others=>'0');
    variable idp   : slv4  := (others=>'0');
 
  begin
 
    r := R_REGS;
    n := R_REGS;
 
    icntl := hio_cntl_init;
    iled  := (others=>'0');
    idat  := (others=>'0');
    idp   := (others=>'0');
 
    -- handle BTN(1) "load enables" press
 
    if BTN(1) = '1' then
      n.enaxon  := SWI(4);
      n.enaesc  := SWI(5);
      n.enathrottle := SWI(6);
      n.enaftdi := SWI(7);
    end if;
 
    -- setup tester controls
 
    icntl.mode := SWI(2 downto 1);
    icntl.enaxon  := r.enaxon;
    icntl.enaesc  := r.enaesc;
    icntl.enathrottle := r.enathrottle;
    icntl.enaftdi := r.enaftdi;
 
    -- setup leds
    iled(7) := icntl.enaesc;
    iled(6) := icntl.enaxon;
    if unsigned(HIO_STAT.rxfecnt) > 0 then iled(5) := '1'; end if;
    if unsigned(HIO_STAT.rxoecnt) > 0 then iled(4) := '1'; end if;
    if unsigned(HIO_STAT.rxsecnt) > 0 then iled(3) := '1'; end if;
    iled(2) := SER_MONI.abact;
    iled(1) := (not SER_MONI.rxok) or (not SER_MONI.txok);
    iled(0) := SER_MONI.rxact or SER_MONI.txact;
 
    -- setup display data
 
    case SWI(7 downto 4) is
      when "0000" => idat := HIO_STAT.rxfecnt;
      when "0001" => idat := HIO_STAT.rxoecnt;
      when "0010" => idat := HIO_STAT.rxsecnt;
      when "0100" => idat := HIO_STAT.rxcnt(15 downto 0);
      when "0101" => idat := HIO_STAT.rxcnt(31 downto 16);
      when "0110" => idat := HIO_STAT.txcnt(15 downto 0);
      when "0111" => idat := HIO_STAT.txcnt(31 downto 16);
      when "1000" => idat := HIO_STAT.rxokcnt;
      when "1001" => idat := HIO_STAT.txokcnt;
      when "1010" => idat := HIO_STAT.rxuicnt & HIO_STAT.rxuidat;
      when "1111" => idat := SER_MONI.abclkdiv;
      when others => null;
    end case;
    n.dspdat := idat;
 
    -- setup display decimal points
 
    idp(3) := not SER_MONI.txok;        -- tx back preasure
    idp(2) := SER_MONI.txact;           -- tx activity
    idp(1) := not SER_MONI.rxok;        -- rx back preasure
    idp(0) := SER_MONI.rxact;           -- rx activity
 
    N_REGS <= n;
 
    HIO_CNTL <= icntl;
    LED      <= iled;
    DSP_DAT  <= r.dspdat;
    DSP_DP   <= idp;
 
  end process proc_next;
 
end syn;
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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