]> rtime.felk.cvut.cz Git - fpga/lx-cpu1/lx-rocon.git/commitdiff
Tumbl: Separate wait for external bus data and state when external bus is taken by...
authorPavel Pisa <ppisa@pikron.com>
Tue, 30 Dec 2014 14:09:29 +0000 (15:09 +0100)
committerPavel Pisa <ppisa@pikron.com>
Tue, 30 Dec 2014 14:09:29 +0000 (15:09 +0100)
Original design reuses external bus clock enable/ready indication
for external master wait. This solution is broken because
external master leaves other data on the bus when clocks
are re-enabled than Tumbl expects. When external master
requests bus at/after end of the Tumbl external memory cycle
there is no need to do anything special in such case.

Signed-off-by: Pavel Pisa <ppisa@pikron.com>
hw/lx-rocon_tumbl/lx_rocon_tumbl.vhd
hw/lx_rocon_top.vhd
hw/tb/lx_tumbl_tb.vhd
submodule/tumbl

index 122e1b3f0f6e474e94279fc834ca0e45d048dde4..eafdf59cf66c7d38e1385e298e0d06dc9f3a5166 100644 (file)
@@ -213,7 +213,8 @@ I_EXEQ: exeq
 
        -- this is a very simple address block decoder, just "internal" dmem or "external"
        -- clken and int hardwired for fast internal data-memory
-       DMEMB_i_s.clken <= '1'         when (dmem_sel_s = '1') else XMEMB_i.clken;
+       DMEMB_i_s.bus_wait  <= '0'     when (dmem_sel_s = '1') else XMEMB_i.bus_wait;
+       DMEMB_i_s.bus_taken <= '0'     when (dmem_sel_s = '1') else XMEMB_i.bus_taken;
        DMEMB_i_s.data  <= dmem_data_s when (dmem_sel_r = '1') else XMEMB_i.data;
        DMEMB_i_s.int   <= XMEMB_i.int;
 
@@ -294,9 +295,7 @@ regd_proc:
                if (rst_i = '1') then           -- synchronous reset ...
                        dmem_sel_r   <= '1';
                else                            -- delay select_external_mem (needed for reading ...)
-                       if (DMEMB_i_s.clken = '1') then
-                               dmem_sel_r <= dmem_sel_s;   -- OR c2dmemb_s.wre; ??
-                       end if;
+                       dmem_sel_r <= dmem_sel_s;   -- OR c2dmemb_s.wre; ??
                end if;
        end process regd_proc;
 
index 25cf26bf396a736ef7fe4c2d3d3ad922b8fa9273..4c93032b69a4ff22317c78f4bb55a747aa813a89 100644 (file)
@@ -355,7 +355,9 @@ dff_reset: dff2
        --
        tumbl_xmemb_i_s.int <= '0'; -- No interrupt
        -- Enable clken only when available for Tumbl
-       tumbl_xmemb_i_s.clken <= not master_tumbl_xmem_lock_s;
+       tumbl_xmemb_i_s.bus_taken <= master_tumbl_xmem_lock_s;
+       tumbl_xmemb_i_s.bus_wait <= '0';
+
 
 
 -- Bus update
index 541863f4cc8b3b9163e3534353d70163c9105bb9..8c59fe8e7f3c954ae918f7e646d8cee3a8598711 100644 (file)
@@ -158,7 +158,8 @@ BEGIN
        end process;
 
        -- Enable xmem clken only when bus available for Tumbl
-       xmemb_i_s.clken <= not delay_access_s;
+       xmemb_i_s.bus_taken <= delay_access_s;
+       xmemb_i_s.bus_wait <= '0';
 
        xmemb_process :process
                variable xmemb_addr_v : std_logic_vector(14 downto 0);
index 7bf0b3bd95bc0a235f90ff063e39bb0cb3261268..3d80b5ce3a1537adda4bf6be12d6d7d94a9cc27c 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 7bf0b3bd95bc0a235f90ff063e39bb0cb3261268
+Subproject commit 3d80b5ce3a1537adda4bf6be12d6d7d94a9cc27c