Update tools to correctly handle ECC mask (ECC is only 13 LSB bits in word 50)

Signed-off-by: Clifford Wolf <clifford@clifford.at>
Signed-off-by: Tim 'mithro' Ansell <mithro@mithis.com>
This commit is contained in:
Clifford Wolf 2017-11-27 09:41:33 +01:00 committed by Tim 'mithro' Ansell
parent ddcf339da0
commit 339fd235bc
3 changed files with 11 additions and 8 deletions

View File

@ -3,10 +3,10 @@
set -ex
vivado -mode batch -source runme.tcl
${XRAY_BITREAD} -o design.bits -z -y design.bit
${XRAY_BITREAD} -F $XRAY_ROI_FRAMES -o design.bits -z -y design.bit
${XRAY_SEGPRINT} -bzd design.bits > design.segs
for id in b{0,1,2,3,4,5,6,7,8,9,10,11}; do
${XRAY_BITREAD} -o design_$id.bits -z -y design_$id.bit
${XRAY_BITREAD} -F $XRAY_ROI_FRAMES -o design_$id.bits -z -y design_$id.bit
${XRAY_SEGPRINT} -bzd design_$id.bits > design_$id.segs
done

View File

@ -532,7 +532,7 @@ int main(int argc, char **argv)
{
for (int i = 0; i < 101; i++)
for (int k = 0; k < 32; k++)
if ((i != 50 || FLAGS_C) && ((it.second.at(i) & (1 << k)) != 0)) {
if ((i != 50 || k > 12 || FLAGS_C) && ((it.second.at(i) & (1 << k)) != 0)) {
if (FLAGS_x)
fprintf(f, "bit_%08x_%03d_%02d_t%d_h%d_r%d_c%d_m%d\n",
fid.get_value(), i, k, fid.get_type(), fid.get_topflag(), fid.get_rowaddr(),
@ -549,7 +549,7 @@ int main(int argc, char **argv)
fprintf(f, ".frame 0x%08x%s\n", fid.get_value(), configframes_autoincr.count(fid.get_value()) ? " AI" : "");
for (int i = 0; i < 101; i++)
fprintf(f, "%08x%s", (i != 50 || FLAGS_C) ? it.second.at(i) : 0, (i % 6) == 5 ? "\n" : " ");
fprintf(f, "%08x%s", it.second.at(i) & ((i != 50 || FLAGS_C) ? 0xffffffff : 0xffffe000), (i % 6) == 5 ? "\n" : " ");
fprintf(f, "\n\n");
}
}

View File

@ -87,15 +87,18 @@ def get_database(segtype):
def handle_segment(segname):
if segname is None:
segframes = set()
segframes = dict()
for segname, segdata in grid["segments"].items():
framebase = int(segdata["baseaddr"][0], 16)
for i in range(segdata["frames"]):
segframes.add(framebase+i)
if (framebase+i) not in segframes:
segframes[framebase+i] = set()
for j in range(segdata["baseaddr"][1], segdata["baseaddr"][1] + segdata["words"]):
segframes[framebase+i].add(j)
for frame in sorted(bitdata.keys()):
if frame in segframes:
continue
for wordidx in sorted(bitdata[frame].keys()):
if frame in segframes and wordidx in segframes[frame]:
continue
for bitidx in sorted(bitdata[frame][wordidx]):
print("bit_%08x_%03d_%02d" % (frame, wordidx, bitidx))
return