Fix the counter reset.
authorMalte S. Stretz <mss@apache.org>
Thu, 2 Jul 2009 12:39:43 +0000 (14:39 +0200)
committerMalte S. Stretz <mss@apache.org>
Thu, 2 Jul 2009 12:39:43 +0000 (14:39 +0200)
fhw_sd/sd_counter_e.vhd
fhw_sd/sd_parser_e.vhd

index 3571869..3dd229f 100644 (file)
@@ -36,10 +36,10 @@ begin
       -- `done` must be high for a single `clock` only, even if
       -- `enable` is low.
       done <= '0';
-      if enable  = '1' then
-        if rewind = '1' then
-         count_s <= 0;
-        elsif count_s = top then
+      if rewind = '1' then
+        count_s <= 0;
+      elsif enable  = '1' then
+        if count_s = top then
           count_s <= 0;
           done    <= '1';
         else
index f5d9865..6fad20e 100644 (file)
@@ -56,6 +56,7 @@ architecture rtl of sd_parser_e is
       done : out std_logic);
   end component;
   signal cnt_top_s  : counter_top_t;
+  signal cnt_rwnd_s : std_logic;
   signal cnt_tick_s : std_logic;
   signal cnt_done_s : std_logic;
 
@@ -84,6 +85,8 @@ begin
          else '0';
   
   cnt_top_s  <= create_counter_top(command, argument);
+  cnt_rwnd_s <= '1' when state_s = idle_state_c
+           else '0';
   cnt_tick_s <= '1' when state_s = load_state_c
            else '1' when state_s = send_state_c
            else '0';
@@ -188,7 +191,7 @@ begin
   counter : sd_counter_e port map(
     clock  => clock,
     enable => cnt_tick_s,
-    rewind => trigger,
+    rewind => cnt_rwnd_s,
     top    => cnt_top_s,
     done   => cnt_done_s);
 end rtl;