link: improve crc_tb/ preamble_tb and increase length
This commit is contained in:
parent
c810009387
commit
8f6354f2a3
|
@ -8,13 +8,13 @@ CFLAGS =-Wall -O0
|
||||||
|
|
||||||
crc_tb:
|
crc_tb:
|
||||||
$(CC) $(CFLAGS) $(INC) -o crc crc.c
|
$(CC) $(CFLAGS) $(INC) -o crc crc.c
|
||||||
./crc /> crc_ref
|
|
||||||
$(CMD) crc_tb.py
|
$(CMD) crc_tb.py
|
||||||
|
|
||||||
scrambler_tb:
|
scrambler_tb:
|
||||||
$(CC) $(CFLAGS) $(INC) -o scrambler scrambler.c
|
$(CC) $(CFLAGS) $(INC) -o scrambler scrambler.c
|
||||||
./scrambler /> scrambler_ref
|
|
||||||
$(CMD) scrambler_tb.py
|
$(CMD) scrambler_tb.py
|
||||||
|
|
||||||
|
all: crc_tb scrambler_tb
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm crc crc_ref scrambler scrambler_ref
|
rm crc scrambler
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
def check(ref, res):
|
||||||
|
shift = 0
|
||||||
|
while((ref[0] != res[0]) and (len(res)>1)):
|
||||||
|
res.pop(0)
|
||||||
|
shift += 1
|
||||||
|
length = min(len(ref), len(res))
|
||||||
|
errors = 0
|
||||||
|
for i in range(length):
|
||||||
|
if ref.pop(0) != res.pop(0):
|
||||||
|
errors += 1
|
||||||
|
return shift, length, errors
|
|
@ -14,7 +14,7 @@ int main(int argc, char *argv[])
|
||||||
crc = 0x52325032;
|
crc = 0x52325032;
|
||||||
data_count = 0;
|
data_count = 0;
|
||||||
|
|
||||||
while (data_count < 256) {
|
while (data_count < 65536) {
|
||||||
data_count++;
|
data_count++;
|
||||||
|
|
||||||
crc ^= data_in;
|
crc ^= data_in;
|
||||||
|
|
|
@ -1,28 +1,17 @@
|
||||||
from subprocess import check_output
|
import subprocess
|
||||||
|
|
||||||
from migen.fhdl.std import *
|
from migen.fhdl.std import *
|
||||||
|
|
||||||
from lib.sata.std import *
|
from lib.sata.std import *
|
||||||
from lib.sata.link.crc import *
|
from lib.sata.link.crc import *
|
||||||
|
from lib.sata.link.test.common import check
|
||||||
def check(ref, res):
|
|
||||||
shift = 0
|
|
||||||
while((ref[0] != res[0]) and (len(res)>1)):
|
|
||||||
res.pop(0)
|
|
||||||
shift += 1
|
|
||||||
length = min(len(ref), len(res))
|
|
||||||
errors = 0
|
|
||||||
for i in range(length):
|
|
||||||
if ref.pop(0) != res.pop(0):
|
|
||||||
errors += 1
|
|
||||||
return shift, length, errors
|
|
||||||
|
|
||||||
class TB(Module):
|
class TB(Module):
|
||||||
def __init__(self):
|
def __init__(self, length):
|
||||||
self.submodules.crc = SATACRC()
|
self.submodules.crc = SATACRC()
|
||||||
|
self.length = length
|
||||||
|
|
||||||
def gen_simulation(self, selfp):
|
def gen_simulation(self, selfp):
|
||||||
|
|
||||||
# init CRC
|
# init CRC
|
||||||
selfp.crc.d = 0x12345678
|
selfp.crc.d = 0x12345678
|
||||||
selfp.crc.ce = 1
|
selfp.crc.ce = 1
|
||||||
|
@ -31,15 +20,14 @@ class TB(Module):
|
||||||
selfp.crc.reset = 0
|
selfp.crc.reset = 0
|
||||||
|
|
||||||
# get C code results
|
# get C code results
|
||||||
ref = []
|
p = subprocess.Popen(["./crc"], stdout=subprocess.PIPE)
|
||||||
f = open("crc_ref", "r")
|
out, err = p.communicate()
|
||||||
for l in f:
|
ref = [int(e, 16) for e in out.decode("utf-8").split("\n")[:-1]]
|
||||||
ref.append(int(l, 16))
|
|
||||||
f.close()
|
|
||||||
|
|
||||||
# log results
|
# log results
|
||||||
res = []
|
res = []
|
||||||
for i in range(256):
|
for i in range(self.length):
|
||||||
res.append(selfp.crc.value)
|
res.append(selfp.crc.value)
|
||||||
yield
|
yield
|
||||||
|
|
||||||
|
@ -49,4 +37,5 @@ class TB(Module):
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
from migen.sim.generic import run_simulation
|
from migen.sim.generic import run_simulation
|
||||||
run_simulation(TB(), ncycles=1000, vcd_name="my.vcd", keep_files=True)
|
length = 8192
|
||||||
|
run_simulation(TB(length), ncycles=length+100, vcd_name="my.vcd", keep_files=True)
|
||||||
|
|
|
@ -56,7 +56,7 @@ int main(int argc, char *argv[])
|
||||||
unsigned char next[32];
|
unsigned char next[32];
|
||||||
context = 0xF0F6;
|
context = 0xF0F6;
|
||||||
|
|
||||||
for (i = 0; i < 256; ++i) {
|
for (i = 0; i < 65536; ++i) {
|
||||||
for (j = 0; j < 16; ++j) {
|
for (j = 0; j < 16; ++j) {
|
||||||
now[j] = (context >> j) & 0x01;
|
now[j] = (context >> j) & 0x01;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,28 +1,17 @@
|
||||||
from subprocess import check_output
|
import subprocess
|
||||||
|
|
||||||
from migen.fhdl.std import *
|
from migen.fhdl.std import *
|
||||||
|
|
||||||
from lib.sata.std import *
|
from lib.sata.std import *
|
||||||
from lib.sata.link.scrambler import *
|
from lib.sata.link.scrambler import *
|
||||||
|
from lib.sata.link.test.common import check
|
||||||
def check(ref, res):
|
|
||||||
shift = 0
|
|
||||||
while((ref[0] != res[0]) and (len(res)>1)):
|
|
||||||
res.pop(0)
|
|
||||||
shift += 1
|
|
||||||
length = min(len(ref), len(res))
|
|
||||||
errors = 0
|
|
||||||
for i in range(length):
|
|
||||||
if ref.pop(0) != res.pop(0):
|
|
||||||
errors += 1
|
|
||||||
return shift, length, errors
|
|
||||||
|
|
||||||
class TB(Module):
|
class TB(Module):
|
||||||
def __init__(self):
|
def __init__(self, length):
|
||||||
self.submodules.scrambler = SATAScrambler()
|
self.submodules.scrambler = SATAScrambler()
|
||||||
|
self.length = length
|
||||||
|
|
||||||
def gen_simulation(self, selfp):
|
def gen_simulation(self, selfp):
|
||||||
|
|
||||||
# init CRC
|
# init CRC
|
||||||
selfp.scrambler.ce = 1
|
selfp.scrambler.ce = 1
|
||||||
selfp.scrambler.reset = 1
|
selfp.scrambler.reset = 1
|
||||||
|
@ -30,20 +19,16 @@ class TB(Module):
|
||||||
selfp.scrambler.reset = 0
|
selfp.scrambler.reset = 0
|
||||||
|
|
||||||
# get C code results
|
# get C code results
|
||||||
ref = []
|
p = subprocess.Popen(["./scrambler"], stdout=subprocess.PIPE)
|
||||||
f = open("scrambler_ref", "r")
|
out, err = p.communicate()
|
||||||
for l in f:
|
ref = [int(e, 16) for e in out.decode("utf-8").split("\n")[:-1]]
|
||||||
ref.append(int(l, 16))
|
|
||||||
f.close()
|
|
||||||
|
|
||||||
# log results
|
# log results
|
||||||
yield
|
yield
|
||||||
res = []
|
res = []
|
||||||
for i in range(256):
|
for i in range(self.length):
|
||||||
res.append(selfp.scrambler.value)
|
res.append(selfp.scrambler.value)
|
||||||
yield
|
yield
|
||||||
for e in res:
|
|
||||||
print("%08x" %e)
|
|
||||||
|
|
||||||
# check results
|
# check results
|
||||||
s, l, e = check(ref, res)
|
s, l, e = check(ref, res)
|
||||||
|
@ -51,4 +36,5 @@ class TB(Module):
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
from migen.sim.generic import run_simulation
|
from migen.sim.generic import run_simulation
|
||||||
run_simulation(TB(), ncycles=1000, vcd_name="my.vcd", keep_files=True)
|
length = 8192
|
||||||
|
run_simulation(TB(length), ncycles=length+100, vcd_name="my.vcd", keep_files=True)
|
||||||
|
|
Loading…
Reference in New Issue