# this bit doesn't have to be in the FSM: connect up to read
         # regfiles on demand from DMI
-        sync += d_reg.ack.eq(0)
-        sync += d_reg.data.eq(0)
         with m.If(d_reg.req): # request for regfile access being made
             # TODO: error-check this
             # XXX should this be combinatorial?  sync better?
             else:
                 comb += self.int_r.addr.eq(d_reg.addr)
                 comb += self.int_r.ren.eq(1)
+        d_reg_delay  = Signal()
+        sync += d_reg_delay.eq(d_reg.req)
+        with m.If(d_reg_delay):
             # data arrives one clock later
-            sync += d_reg.data.eq(self.int_r.data_o)
-            sync += d_reg.ack.eq(1)
+            comb += d_reg.data.eq(self.int_r.data_o)
+            comb += d_reg.ack.eq(1)
 
         return m