Reset (aka rewind) the counter, synchronized.
authorMalte S. Stretz <mss@apache.org>
Sun, 28 Jun 2009 16:47:35 +0000 (18:47 +0200)
committerMalte S. Stretz <mss@apache.org>
Sun, 28 Jun 2009 16:47:35 +0000 (18:47 +0200)
fhw_sd/sd_counter_e.vhd
fhw_sd/sd_host.vhd
fhw_sd_t/sd_io_t.vhd

index f8dbe7d..8557bd5 100644 (file)
@@ -15,9 +15,10 @@ entity sd_counter_e is
     max : positive);
   port(
     clock  : in  std_logic;
-    reset  : in  std_logic;
     enable : in  std_logic;
     
+    rewind : in  std_logic;
+    
     top  : in  natural range 1 to max;
     done : out std_logic);
 end sd_counter_e;
@@ -29,17 +30,16 @@ architecture rtl of sd_counter_e is
   subtype count_t is natural range 0 to max;
   signal  count_s : count_t;
 begin
-  counter : process(clock, reset)
+  counter : process(clock)
   begin
-    if reset = '1' then
-      count_s <= 0;
-      done    <= '0';
-    elsif rising_edge(clock) then
+    if rising_edge(clock) then
       -- `done` must be high for a single `clock` only, even if
       -- `enable` is low.
       done <= '0';
       if enable  = '1' then
-        if count_s = top then
+        if rewind = '1' then
+         count_s <= 0;
+        elsif count_s = top then
           count_s <= 0;
           done    <= '1';
         else
index 49ed348..05266b0 100644 (file)
@@ -113,9 +113,10 @@ architecture rtl of sd_host is
       max : positive := counter_max_c);
     port(
       clock  : in  std_logic;
-      reset  : in  std_logic;
       enable : in  std_logic;
     
+      rewind : in  std_logic;
+    
       top  : in  counter_top_t;
       done : out std_logic);
   end component;
@@ -221,9 +222,10 @@ begin
   
   counter : sd_counter_e port map(
     clock => clk,
-    reset => rst,
     enable => cnt_tick_s,
     
+    rewind => io_start_s,
+    
     top  => cnt_top_s,
     done => cnt_done_s);
   
index 4125dc0..5ce9aaf 100644 (file)
@@ -51,9 +51,10 @@ architecture test of sd_io_t is
       max : positive := 32);
     port(
       clock  : in  std_logic;
-      reset  : in  std_logic;
       enable : in  std_logic;
     
+      rewind : in  std_logic;
+    
       top  : in  integer range 1 to 32;
       done : out std_logic);
   end component;
@@ -76,6 +77,7 @@ architecture test of sd_io_t is
   signal spi_rxd_i_s   : std_logic_byte_t;
   
   signal cnt_top_s : positive;
+  signal cnt_res_s : std_logic;
   
   signal txd_s : std_logic_byte_t;
   signal rxd_s : std_logic_byte_t;
@@ -92,10 +94,12 @@ begin
     spi_busy_i_s,
     spi_txd_o_s,
     spi_rxd_i_s);
-  cnt : sd_counter_e port map(clock_s, reset_s,
+  cnt : sd_counter_e port map(clock_s,
     cnt_tick_o_s,
+    cnt_res_s,
     cnt_top_s,
     cnt_done_i_s);
+  cnt_res_s <= start_i_s;
   
   stimulus : process
   begin