phy: remove ALIGN primitives on RX path
authorFlorent Kermarrec <florent@enjoy-digital.fr>
Thu, 11 Dec 2014 17:35:56 +0000 (18:35 +0100)
committerFlorent Kermarrec <florent@enjoy-digital.fr>
Thu, 11 Dec 2014 17:35:56 +0000 (18:35 +0100)
lib/sata/phy/k7sataphy/datapath.py

index 809d4e8ab2e85f9d00891ffbb52cde90f519f710..3a3683c70aff6c6b06c862ef73ba28537cea8cd2 100644 (file)
@@ -137,6 +137,11 @@ class K7SATAPHYDatapath(Module):
                        )
                send_align = (align_cnt < 2)
 
+               receive_align = Signal()
+               self.comb += receive_align.eq(rx.source.stb &
+                                               (rx.source.charisk == 0b0001) &
+                                               (rx.source.data == primitives["ALIGN"])
+
        # user / ctrl mux
                self.comb += [
                        # user
@@ -152,10 +157,14 @@ class K7SATAPHYDatapath(Module):
                                        tx.sink.charisk.eq(self.sink.charisk),
                                        self.sink.ack.eq(tx.sink.ack)
                                ),
-                               self.source.stb.eq(rx.source.stb),
-                               self.source.data.eq(rx.source.data),
-                               self.source.charisk.eq(rx.source.charisk),
-                               rx.source.ack.eq(1),
+                               If(receive_align,
+                                       rx.source.ack.eq(1)
+                               ).Else(
+                                       self.source.stb.eq(rx.source.stb),
+                                       self.source.data.eq(rx.source.data),
+                                       self.source.charisk.eq(rx.source.charisk),
+                                       rx.source.ack.eq(1)
+                               )
                        # ctrl
                        ).Else(
                                tx.sink.stb.eq(ctrl.source.stb),