From e35c293d53673c337642df09f78df623ffc7a2e6 Mon Sep 17 00:00:00 2001
From: "Wesley W. Terpstra" <w.terpstra@gsi.de>
Date: Thu, 4 Apr 2013 20:00:24 +0200
Subject: [PATCH] usb: combine etherbone core into usb adapter

---
 Manifest.py                             |  2 +-
 hdl/eb_slave_core/Manifest.py           |  1 +
 hdl/eb_slave_core/eb_usb_slave_core.vhd | 11 ++++++---
 hdl/eb_usb_core/ez_usb.vhd              | 33 +++++++++++++------------
 4 files changed, 27 insertions(+), 20 deletions(-)

diff --git a/Manifest.py b/Manifest.py
index dde11b3..5f0d8f1 100644
--- a/Manifest.py
+++ b/Manifest.py
@@ -1 +1 @@
-modules = { "local": ["hdl/eb_slave_core"] }
+modules = { "local": ["hdl/eb_slave_core", "hdl/eb_usb_core"] }
diff --git a/hdl/eb_slave_core/Manifest.py b/hdl/eb_slave_core/Manifest.py
index 1af7199..b590168 100644
--- a/hdl/eb_slave_core/Manifest.py
+++ b/hdl/eb_slave_core/Manifest.py
@@ -11,4 +11,5 @@ files = [
   "sipo_flag.vhd",
   "vhdl_2008_workaround_pkg.vhd",
   "WB_bus_adapter_streaming_sg.vhd",
+  "eb_usb_slave_core.vhd",
   "xetherbone_core.vhd"];
diff --git a/hdl/eb_slave_core/eb_usb_slave_core.vhd b/hdl/eb_slave_core/eb_usb_slave_core.vhd
index 2980d2c..c7e1598 100644
--- a/hdl/eb_slave_core/eb_usb_slave_core.vhd
+++ b/hdl/eb_slave_core/eb_usb_slave_core.vhd
@@ -68,7 +68,7 @@ entity eb_usb_slave_core is
 end eb_usb_slave_core;
 
 
-architecture behavioral of eb_slave_core is
+architecture behavioral of eb_usb_slave_core is
 
   signal s_status_en  : std_logic;
   signal s_status_clr : std_logic;
@@ -95,6 +95,8 @@ architecture behavioral of eb_slave_core is
   signal  s_eb_main_fsm_2_scatter : t_wishbone_slave_in;
 
   signal slim_src_o_dat : std_logic_vector(7 downto 0); 
+  
+  signal B_SEL_o : std_logic_vector(0 downto 0);
 
 
 begin
@@ -142,7 +144,7 @@ gather : WB_bus_adapter_streaming_sg generic map (g_adr_width_A => 32,
               A_CYC_i   => snk_i.cyc,
               A_STB_i   => snk_i.stb,
               A_ADR_i   => snk_i.adr,
-              A_SEL_i   => snk_i.sel,
+              A_SEL_i   => snk_i.sel(0 downto 0),
               A_WE_i    => snk_i.we,
               A_DAT_i   => snk_i.dat(7 downto 0),
               A_ACK_o   => snk_o.ack,
@@ -189,7 +191,7 @@ scatter: WB_bus_adapter_streaming_sg generic map (g_adr_width_A => 32,
                                                  B_CYC_o       => src_o.cyc,
                                                  B_STB_o       => src_o.stb,
                                                  B_ADR_o       => src_o.adr,
-                                                 B_SEL_o       => src_o.sel,
+                                                 B_SEL_o       => B_SEL_o,
                                                  B_WE_o        => src_o.we,
                                                  B_DAT_o       => slim_src_o_dat,
                                                  B_ACK_i       => src_i.ack,
@@ -198,6 +200,9 @@ scatter: WB_bus_adapter_streaming_sg generic map (g_adr_width_A => 32,
                                                  B_STALL_i     => src_i.stall,
                                                  B_DAT_i       => (others => '0')); 
 
+
+  src_o.sel <= "000" & B_SEL_o;
+  
   EB : eb_main_fsm
     port map(
       --general
diff --git a/hdl/eb_usb_core/ez_usb.vhd b/hdl/eb_usb_core/ez_usb.vhd
index 3e1227a..fbc139d 100644
--- a/hdl/eb_usb_core/ez_usb.vhd
+++ b/hdl/eb_usb_core/ez_usb.vhd
@@ -184,6 +184,8 @@ begin
       baud_tick_o  => baud_tick,
       baud8_tick_o => baud8_tick);
   
+  -- all bytes sent to the device will be delivered reliably
+  -- ... but, of course, the WR LM32 driver drops bytes like mad
   U_TX : uart_async_tx -- USB2UART
     port map(
       clk_sys_i    => clk_sys_i,
@@ -199,6 +201,7 @@ begin
   usb2uart_uart_o.dat <= (others => '0');
   usb2uart_uart_o.int <= '0';
   
+  -- this will drop bytes once buffers are full (no host connected)
   U_RX : uart_async_rx -- UART2USB
     port map(
       clk_sys_i    => clk_sys_i,
@@ -227,21 +230,19 @@ begin
       w_master_o => usb2eb_eb_i,
       w_master_i => usb2eb_eb_o);
   
-  master_o <= cc_dummy_slave_in;
---  EB : eb_usb_slave_core
---    generic map(
---      g_sdb_address => x"00000000" & g_sdb_address)
---    port map(
---      clk_i       => clk_sys_i,
---      nRst_i      => rstn_i,
---      snk_i       => usb2eb_eb_i,
---      snk_o       => usb2eb_eb_o,
---      src_o       => eb2usb_m,
---      src_i       => eb2usb_s,
---      cfg_slave_o => open,
---      cfg_slave_i => cc_dummy_slave_in,
---      master_o    => master_o,
---      master_i    => master_i);
+  EB : eb_usb_slave_core
+    generic map(
+      g_sdb_address => x"00000000" & g_sdb_address)
+    port map(
+      clk_i       => clk_sys_i,
+      nRst_i      => rstn_i,
+      snk_i       => usb2eb_eb_i,
+      snk_o       => usb2eb_eb_o,
+      src_o       => eb2usb_m,
+      src_i       => eb2usb_s,
+      cfg_slave_o => open,
+      cfg_slave_i => cc_dummy_slave_in,
+      master_o    => master_o,
+      master_i    => master_i);
   
-
 end rtl;
-- 
GitLab