Move counter into the parser.
authorMalte S. Stretz <mss@apache.org>
Mon, 29 Jun 2009 21:59:28 +0000 (23:59 +0200)
committerMalte S. Stretz <mss@apache.org>
Mon, 29 Jun 2009 21:59:28 +0000 (23:59 +0200)
fhw_sd/sd_counter_e.vhd
fhw_sd/sd_host.vhd
fhw_sd/sd_parser_e.vhd
fhw_sd_t/sd_parser_t.vhd

index 8557bd5..3571869 100644 (file)
@@ -19,7 +19,7 @@ entity sd_counter_e is
     
     rewind : in  std_logic;
     
-    top  : in  natural range 1 to max;
+    top  : in  natural range 0 to max;
     done : out std_logic);
 end sd_counter_e;
 
index 6ca1248..85a2eb5 100644 (file)
@@ -80,10 +80,6 @@ architecture rtl of sd_host is
       
       pipe     : out std_logic;
       
-      cnt_top  : out counter_top_t;
-      cnt_tick : out std_logic;
-      cnt_done : in  std_logic;
-    
       spi_start : out std_logic;
       spi_busy  : in  std_logic;
       spi_txd   : out std_logic_byte_t;
@@ -91,19 +87,6 @@ architecture rtl of sd_host is
       spi_cs    : out std_logic);
   end component;
 
-  component sd_counter_e is
-    generic(
-      max : positive := counter_max_c);
-    port(
-      clock  : in  std_logic;
-      enable : in  std_logic;
-    
-      rewind : in  std_logic;
-    
-      top  : in  counter_top_t;
-      done : out std_logic);
-  end component;
-  
   component spi_master 
     generic(
       clk_div    : positive := clock_divider;
@@ -130,10 +113,6 @@ architecture rtl of sd_host is
   signal sd_error_s    : std_logic;
   signal sd_idled_s    : std_logic;
   
-  signal cnt_top_s  : counter_top_t;
-  signal cnt_tick_s : std_logic;
-  signal cnt_done_s : std_logic;
-  
   signal spi_start_s : std_logic;
   signal spi_busy_s  : std_logic;
   signal spi_txd_s   : std_logic_byte_t;
@@ -175,25 +154,12 @@ begin
     
     pipe => shd,
     
-    cnt_top  => cnt_top_s,
-    cnt_tick => cnt_tick_s,
-    cnt_done => cnt_done_s,
-    
     spi_start => spi_start_s,
     spi_busy  => spi_busy_s,
     spi_txd   => spi_txd_s,
     spi_rxd   => spi_rxd_s,
     spi_cs    => spi_cs_s);
   
-  counter : sd_counter_e port map(
-    clock => clk,
-    enable => cnt_tick_s,
-    
-    rewind => sd_trigger_s,
-    
-    top  => cnt_top_s,
-    done => cnt_done_s);
-  
   cs <= not spi_cs_s;
   spi : spi_master port map(
     clk => clk,
index a98e389..7541751 100644 (file)
@@ -34,10 +34,6 @@ entity sd_parser_e is
     
     pipe     : out std_logic;
     
-    cnt_top  : out counter_top_t;
-    cnt_tick : out std_logic;
-    cnt_done : in  std_logic;
-    
     spi_start : out std_logic;
     spi_busy  : in  std_logic;
     spi_txd   : out std_logic_byte_t;
@@ -48,6 +44,22 @@ end sd_parser_e;
 -----------------------------------------------------------------------
 
 architecture rtl of sd_parser_e is
+  component sd_counter_e is
+    generic(
+      max : positive := counter_max_c);
+    port(
+      clock  : in  std_logic;
+      enable : in  std_logic;
+    
+      rewind : in  std_logic;
+    
+      top  : in  counter_top_t;
+      done : out std_logic);
+  end component;
+  signal cnt_top_s  : counter_top_t;
+  signal cnt_tick_s : std_logic;
+  signal cnt_done_s : std_logic;
+
   type state_t is(
     idle_state_c,
     load_state_c,
@@ -72,10 +84,10 @@ begin
                    and state_s = loop_state_c
          else '0';
   
-  cnt_top  <= create_counter_top(command, argument);
-  cnt_tick <= '1' when state_s = load_state_c
-         else '1' when state_s = send_state_c
-         else '0';
+  cnt_top_s  <= create_counter_top(command, argument);
+  cnt_tick_s <= '1' when state_s = load_state_c
+           else '1' when state_s = send_state_c
+           else '0';
   
   spi_txd   <= get_frame_head(frame_s);
   spi_start <= '1' when state_s = send_state_c
@@ -90,7 +102,7 @@ begin
     if rising_edge(clock) then
       case state_s is
         when idle_state_c => done_s <= '0';
-        when shft_state_c => done_s <= done_s or cnt_done;
+        when shft_state_c => done_s <= done_s or cnt_done_s;
         when vrfy_state_c => done_s <= done_s or break_s;
         when others       => null;
       end case;
@@ -181,4 +193,11 @@ begin
       end case;
     end if;
   end process;
+  
+  counter : sd_counter_e port map(
+    clock  => clock,
+    enable => cnt_tick_s,
+    rewind => trigger,
+    top    => cnt_top_s,
+    done   => cnt_done_s);
 end rtl;
index 3be2285..2f74d27 100644 (file)
@@ -42,10 +42,6 @@ architecture test of sd_parser_t is
       
       pipe     : out std_logic;
       
-      cnt_top  : out counter_top_t;
-      cnt_tick : out std_logic;
-      cnt_done : in  std_logic;
-    
       spi_start : out std_logic;
       spi_busy  : in  std_logic;
       spi_txd   : out std_logic_byte_t;
@@ -65,9 +61,6 @@ architecture test of sd_parser_t is
   signal error_o_s    : std_logic;
   signal idled_o_s    : std_logic;
   signal pipe_o_s     : std_logic;
-  signal top_o_s      : counter_top_t;
-  signal tick_o_s     : std_logic;
-  signal done_i_s     : std_logic;
   signal start_o_s    : std_logic;
   signal busy_i_s     : std_logic;
   signal txd_o_s      : std_logic_byte_t;
@@ -88,9 +81,6 @@ begin
     error_o_s,
     idled_o_s,
     pipe_o_s,
-    top_o_s,
-    tick_o_s,
-    done_i_s,
     start_o_s,
     busy_i_s,
     txd_o_s,
@@ -162,7 +152,7 @@ begin
     
     wait until rising_edge(start_o_s);
     busy_i_s  <= '1';
-    while counter_s <= (top_o_s + 1) loop
+    while shifting_o_s = '1' loop
       wait until rising_edge(clock_s);
       wait until rising_edge(clock_s);
       wait until rising_edge(clock_s);