forked from M-Labs/artiq
fastlink: fix fastino style link
This commit is contained in:
parent
d98357051c
commit
30d1acee9f
|
@ -74,9 +74,8 @@ class SerDes(Module):
|
||||||
# big shift register for mosi and
|
# big shift register for mosi and
|
||||||
sr = [Signal(t_frame, reset_less=True) for i in range(n_mosi)]
|
sr = [Signal(t_frame, reset_less=True) for i in range(n_mosi)]
|
||||||
assert len(Cat(sr)) == len(words)
|
assert len(Cat(sr)) == len(words)
|
||||||
crc_insert = ([d[1] for d in self.data[:-1]] +
|
crc_insert = Cat(([d[0] for d in self.data[1:-1]] +
|
||||||
[d[0] for d in self.data[:-1]])
|
[d[1] for d in self.data[1:-1]])[:n_crc])
|
||||||
crc_insert = Cat(crc_insert[-n_crc:])
|
|
||||||
miso_sr = Signal(t_frame, reset_less=True)
|
miso_sr = Signal(t_frame, reset_less=True)
|
||||||
miso_sr_next = Signal.like(miso_sr)
|
miso_sr_next = Signal.like(miso_sr)
|
||||||
self.comb += [
|
self.comb += [
|
||||||
|
@ -106,8 +105,8 @@ class SerDes(Module):
|
||||||
# transpose, load
|
# transpose, load
|
||||||
[sri.eq(Cat(words[i::n_mosi])) for i, sri in enumerate(sr)],
|
[sri.eq(Cat(words[i::n_mosi])) for i, sri in enumerate(sr)],
|
||||||
# inject crc for the last cycle
|
# inject crc for the last cycle
|
||||||
crc_insert.eq(self.crca.next if n_crc // n_mosi == 1
|
crc_insert.eq(self.crca.next if n_crc // n_mosi <= 1
|
||||||
else self.crcb.next),
|
else self.crca.last),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -36,8 +36,7 @@ class TestPhaser(unittest.TestCase):
|
||||||
frame = []
|
frame = []
|
||||||
self.dut.comb += self.dut.payload.eq((1 << len(self.dut.payload)) - 1)
|
self.dut.comb += self.dut.payload.eq((1 << len(self.dut.payload)) - 1)
|
||||||
run_simulation(self.dut, self.record_frame(frame),
|
run_simulation(self.dut, self.record_frame(frame),
|
||||||
clocks={n: 2 for n in ["sys", "rio", "rio_phy"]},
|
clocks={n: 2 for n in ["sys", "rio", "rio_phy"]})
|
||||||
vcd_name="fastlink.vcd")
|
|
||||||
self.assertEqual(len(frame), 8*10//2)
|
self.assertEqual(len(frame), 8*10//2)
|
||||||
self.assertEqual([d[0] for d in frame], [0, 0, 3, 3] * 10)
|
self.assertEqual([d[0] for d in frame], [0, 0, 3, 3] * 10)
|
||||||
self.assertEqual([d[1] & 1 for d in frame[4*4 - 1:10*4 - 1:4]],
|
self.assertEqual([d[1] & 1 for d in frame[4*4 - 1:10*4 - 1:4]],
|
||||||
|
@ -79,12 +78,7 @@ class TestFastino(unittest.TestCase):
|
||||||
frame = []
|
frame = []
|
||||||
self.dut.comb += self.dut.payload.eq((1 << len(self.dut.payload)) - 1)
|
self.dut.comb += self.dut.payload.eq((1 << len(self.dut.payload)) - 1)
|
||||||
run_simulation(self.dut, self.record_frame(frame),
|
run_simulation(self.dut, self.record_frame(frame),
|
||||||
clocks={n: 2 for n in ["sys", "rio", "rio_phy"]},
|
clocks={n: 2 for n in ["sys", "rio", "rio_phy"]})
|
||||||
vcd_name="fastlink.vcd")
|
|
||||||
self.assertEqual(len(frame), 7*14//2)
|
self.assertEqual(len(frame), 7*14//2)
|
||||||
self.assertEqual([d[0] for d in frame], [3, 0, 1, 3, 2, 0, 3] * 7)
|
self.assertEqual([d[0] for d in frame], [3, 0, 1, 3, 2, 0, 3] * 7)
|
||||||
self.assertEqual(ref, frame)
|
self.assertEqual(frame[-1], [3, 3, 1, 1, 1, 2, 1, 0]) # crc12
|
||||||
print(frame)
|
|
||||||
|
|
||||||
|
|
||||||
ref = [[3, 3, 3, 3, 3, 3, 3, 0], [0, 3, 3, 3, 3, 3, 3, 0], [1, 3, 3, 3, 3, 3, 3, 0], [3, 3, 3, 3, 3, 3, 3, 0], [2, 3, 3, 3, 3, 3, 3, 0], [0, 3, 3, 3, 3, 3, 3, 0], [3, 3, 3, 3, 3, 3, 3, 0], [3, 3, 3, 3, 3, 3, 3, 0], [0, 3, 3, 3, 3, 3, 3, 0], [1, 3, 3, 3, 3, 3, 3, 0], [3, 3, 3, 3, 3, 3, 3, 0], [2, 3, 3, 3, 3, 3, 3, 0], [0, 3, 3, 3, 3, 3, 3, 0], [3, 3, 3, 3, 3, 3, 3, 0], [3, 3, 3, 3, 3, 3, 3, 0], [0, 3, 3, 3, 3, 3, 3, 0], [1, 3, 3, 3, 3, 3, 3, 0], [3, 3, 3, 3, 3, 3, 3, 0], [2, 3, 3, 3, 3, 3, 3, 0], [0, 3, 3, 3, 3, 3, 3, 0], [3, 2, 3, 3, 3, 3, 3, 0], [3, 3, 3, 3, 3, 3, 3, 0], [0, 3, 3, 3, 3, 3, 3, 0], [1, 3, 3, 3, 3, 3, 3, 0], [3, 1, 3, 3, 3, 3, 3, 0], [2, 3, 3, 3, 3, 3, 3, 0], [0, 3, 3, 3, 3, 3, 3, 0], [3, 2, 3, 3, 3, 3, 3, 0], [3, 3, 3, 3, 3, 3, 3, 0], [0, 3, 3, 3, 3, 3, 3, 0], [1, 3, 3, 3, 3, 3, 3, 0], [3, 1, 3, 3, 3, 3, 3, 0], [2, 3, 3, 3, 3, 3, 3, 0], [0, 3, 3, 3, 3, 3, 3, 0], [3, 2, 3, 3, 3, 3, 3, 0], [3, 3, 3, 3, 3, 3, 3, 0], [0, 3, 3, 3, 3, 3, 3, 0], [1, 3, 3, 3, 3, 3, 3, 0], [3, 1, 3, 3, 3, 3, 3, 0], [2, 3, 3, 3, 3, 3, 3, 0], [0, 3, 3, 3, 3, 3, 3, 0], [3, 2, 3, 3, 3, 3, 3, 0], [3, 3, 3, 3, 3, 3, 3, 0], [0, 3, 3, 3, 3, 3, 3, 0], [1, 3, 3, 3, 3, 3, 3, 0], [3, 3, 3, 3, 3, 3, 3, 0], [2, 3, 3, 3, 3, 3, 3, 0], [0, 3, 3, 3, 3, 3, 3, 0], [3, 3, 1, 1, 1, 2, 1, 0]]
|
|
||||||
|
|
Loading…
Reference in New Issue