usbif.vhd

    1  -- title:              USB I/F
    2  -- author:             Sebastian Weiss
    3  -- last change:        15.10.13
    4 
    5 library IEEE;
    6 use IEEE.std_logic_1164.all;
    7 use IEEE.numeric_std.all;
    8 
    9 entity usbif is
   10         port
   11         (
   12                 clk             : in std_logic;
   13                 rst             : in std_logic;
   14                 if_en           : in std_logic;
   15 
   16                 usb_rd_n        : out std_logic;
   17                 usb_wr          : out std_logic;
   18                 usb_dq          : inout std_logic_vector(7 downto 0);
   19                 usb_txe_n       : in std_logic;
   20                 usb_rxf_n       : in std_logic;
   21 
   22                 wr_req          : in std_logic;
   23                 wr_full         : out std_logic;
   24                 wr_data         : in std_logic_vector(31 downto 0);
   25                 wr_clk          : in std_logic;
   26 
   27                 rd_req          : in std_logic;
   28                 rd_empty        : out std_logic;
   29                 rd_data         : out std_logic_vector(15 downto 0)
   30         );
   31 end entity;
   32 
   33 architecture behavioral of usbif is
   34 signal infifo_wrreq     : std_logic;
   35 signal infifo_full      : std_logic;
   36 signal infifo_data      : std_logic_vector(15 downto 0);
   37 signal outfifo_rdreq    : std_logic;
   38 signal outfifo_empty    : std_logic;
   39 signal outfifo_data     : std_logic_vector(31 downto 0);
   40 signal ft_rd_d          : std_logic_vector(7 downto 0);
   41 signal ft_rd_req        : std_logic;
   42 signal ft_incomming     : std_logic;
   43 signal ft_ready         : std_logic;
   44 signal ft_wr_d          : std_logic_vector(7 downto 0);
   45 signal ft_wr_req        : std_logic;
   46 begin
   47 
   48         infifo  : entity work.fifo16 port map(
   49                 clock    => clk,
   50                 data     => infifo_data,
   51                 rdreq    => rd_req,
   52                 wrreq    => infifo_wrreq,
   53                 empty    => rd_empty,
   54                 full     => infifo_full,
   55                 q        => rd_data
   56         );
   57 
   58         outfifo : entity work.fifo32 port map(
   59                 data     => wr_data,
   60                 rdclk    => clk,
   61                 rdreq    => outfifo_rdreq,
   62                 wrclk    => wr_clk,
   63                 wrreq    => wr_req,
   64                 q        => outfifo_data,
   65                 rdempty  => outfifo_empty,
   66                 wrfull   => wr_full
   67         );
   68 
   69         ctrl    : entity work.usbctrl port map(
   70                 clk             => clk,
   71                 rst             => rst,
   72                 infifo_wrreq    => infifo_wrreq,
   73                 infifo_full     => infifo_full,
   74                 infifo_data     => infifo_data,
   75                 outfifo_rdreq   => outfifo_rdreq,
   76                 outfifo_empty   => outfifo_empty,
   77                 outfifo_data    => outfifo_data,
   78                 rd_d            => ft_rd_d,
   79                 rd_req          => ft_rd_req,
   80                 incomming       => ft_incomming,
   81                 ready           => ft_ready,
   82                 wr_d            => ft_wr_d,
   83                 wr_req          => ft_wr_req
   84         );
   85 
   86         ft245 : entity work.ft245if port map(
   87                 clk             => clk,
   88                 rst             => rst,
   89 
   90                 usb_rd_n        => usb_rd_n,
   91                 usb_wr          => usb_wr,
   92                 usb_dq          => usb_dq,
   93                 usb_txe_n       => usb_txe_n,
   94                 usb_rxf_n       => usb_rxf_n,
   95 
   96                 wr_d            => ft_wr_d,
   97                 rd_d            => ft_rd_d,
   98                 wr_req          => ft_wr_req,
   99                 rd_req          => ft_rd_req,
  100                 ready           => ft_ready,
  101                 if_en           => if_en
  102         );
  103 
  104         ft_incomming    <= not usb_rxf_n;
  105 
  106 end behavioral;
  107 

This page was generated using GHDL 0.29 (20100109) [Sokcho edition], a program written by Tristan Gingold