mirror of https://github.com/openXC7/prjxray.git
Merge pull request #234 from mcmasterg/dbfixup
dbfixup: per project instead of globally
This commit is contained in:
commit
c7d5f785d0
|
|
@ -1,3 +1,5 @@
|
|||
# NOt using clb.mk: 0-2 segmatch
|
||||
# Could probably change segmatch to re though
|
||||
|
||||
N := 1
|
||||
SPECIMENS := $(addprefix specimen_,$(shell seq -f '%03.0f' $(N)))
|
||||
|
|
|
|||
|
|
@ -1,11 +1,2 @@
|
|||
/.Xil
|
||||
/design/
|
||||
/design.bit
|
||||
/design.bits
|
||||
/design.dcp
|
||||
/usage_statistics_webtalk.*
|
||||
/vivado*
|
||||
/specimen_*
|
||||
/__pycache__/
|
||||
/*.segbits
|
||||
/run.ok
|
||||
build
|
||||
|
||||
|
|
|
|||
|
|
@ -1,29 +1,3 @@
|
|||
N := 1
|
||||
SPECIMENS := $(addprefix specimen_,$(shell seq -f '%03.0f' $(N)))
|
||||
SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS))
|
||||
|
||||
database: $(SPECIMENS_OK)
|
||||
${XRAY_SEGMATCH} -o seg_clblx.segbits $(addsuffix /segdata_clbl[lm]_[lr].txt,$(SPECIMENS))
|
||||
|
||||
pushdb:
|
||||
${XRAY_MERGEDB} clbll_l seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clbll_r seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clblm_l seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clblm_r seg_clblx.segbits
|
||||
|
||||
$(SPECIMENS_OK):
|
||||
bash generate.sh $(subst /OK,,$@)
|
||||
touch $@
|
||||
|
||||
run:
|
||||
$(MAKE) clean
|
||||
$(MAKE) database
|
||||
$(MAKE) pushdb
|
||||
touch run.ok
|
||||
|
||||
clean:
|
||||
rm -rf specimen_[0-9][0-9][0-9]/ seg_clblx.segbits __pycache__ run.ok
|
||||
rm -rf vivado*.log vivado_*.str vivado*.jou design *.bits *.dcp *.bit top.v
|
||||
|
||||
.PHONY: database pushdb run clean
|
||||
include ../clb.mk
|
||||
|
||||
|
|
|
|||
|
|
@ -1,17 +1,5 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -ex
|
||||
|
||||
source ${XRAY_GENHEADER}
|
||||
|
||||
#echo '`define SEED 32'"'h$(echo $1 | md5sum | cut -c1-8)" > setseed.vh
|
||||
|
||||
python3 ../top.py >top.v
|
||||
vivado -mode batch -source ../generate.tcl
|
||||
|
||||
for x in design*.bit; do
|
||||
${XRAY_BITREAD} -F $XRAY_ROI_FRAMES -o ${x}s -z -y $x
|
||||
done
|
||||
|
||||
python3 ../generate.py
|
||||
source ${XRAY_DIR}/utils/top_generate.sh
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,2 @@
|
|||
/specimen_*/
|
||||
/*.segbits
|
||||
/vivado.log
|
||||
/vivado.jou
|
||||
/run.ok
|
||||
build
|
||||
|
||||
|
|
|
|||
|
|
@ -1,28 +1,3 @@
|
|||
N := 1
|
||||
SPECIMENS := $(addprefix specimen_,$(shell seq -f '%03.0f' $(N)))
|
||||
SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS))
|
||||
|
||||
database: $(SPECIMENS_OK)
|
||||
${XRAY_SEGMATCH} -o seg_clblx.segbits $(addsuffix /segdata_clbl[lm]_[lr].txt,$(SPECIMENS))
|
||||
|
||||
pushdb:
|
||||
${XRAY_MERGEDB} clbll_l seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clbll_r seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clblm_l seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clblm_r seg_clblx.segbits
|
||||
|
||||
$(SPECIMENS_OK):
|
||||
bash generate.sh $(subst /OK,,$@)
|
||||
touch $@
|
||||
|
||||
run:
|
||||
$(MAKE) clean
|
||||
$(MAKE) database
|
||||
$(MAKE) pushdb
|
||||
touch run.ok
|
||||
|
||||
clean:
|
||||
rm -rf specimen_[0-9][0-9][0-9]/ seg_clblx.segbits vivado*.log vivado_*.str vivado*.jou design *.bits *.dcp *.bit top.v run.ok
|
||||
|
||||
.PHONY: database pushdb run clean
|
||||
include ../clb.mk
|
||||
|
||||
|
|
|
|||
|
|
@ -2,18 +2,5 @@
|
|||
|
||||
set -ex
|
||||
if [ $(vivado -h |grep Vivado |cut -d\ -f 2) != "v2017.2" ] ; then echo "FIXME: requires Vivado 2017.2. See https://github.com/SymbiFlow/prjxray/issues/14"; exit 1; fi
|
||||
|
||||
source ${XRAY_GENHEADER}
|
||||
|
||||
#echo '`define SEED 32'"'h$(echo $1 | md5sum | cut -c1-8)" > setseed.vh
|
||||
|
||||
python3 ../top.py >top.v
|
||||
vivado -mode batch -source ../generate.tcl
|
||||
test -z "$(fgrep CRITICAL vivado.log)"
|
||||
|
||||
for x in design*.bit; do
|
||||
${XRAY_BITREAD} -F $XRAY_ROI_FRAMES -o ${x}s -z -y $x
|
||||
done
|
||||
|
||||
python3 ../generate.py
|
||||
source ${XRAY_DIR}/utils/top_generate.sh
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1 @@
|
|||
/specimen_*/
|
||||
/*.segbits
|
||||
/run.ok
|
||||
build
|
||||
|
|
|
|||
|
|
@ -1,28 +1,3 @@
|
|||
N := 1
|
||||
SPECIMENS := $(addprefix specimen_,$(shell seq -f '%03.0f' $(N)))
|
||||
SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS))
|
||||
|
||||
database: $(SPECIMENS_OK)
|
||||
${XRAY_SEGMATCH} -o seg_clblx.segbits $(addsuffix /segdata_clbl[lm]_[lr].txt,$(SPECIMENS))
|
||||
|
||||
pushdb:
|
||||
${XRAY_MERGEDB} clbll_l seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clbll_r seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clblm_l seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clblm_r seg_clblx.segbits
|
||||
|
||||
$(SPECIMENS_OK):
|
||||
bash generate.sh $(subst /OK,,$@)
|
||||
touch $@
|
||||
|
||||
run:
|
||||
$(MAKE) clean
|
||||
$(MAKE) database
|
||||
$(MAKE) pushdb
|
||||
touch run.ok
|
||||
|
||||
clean:
|
||||
rm -rf specimen_[0-9][0-9][0-9]/ seg_clblx.segbits vivado*.log vivado_*.str vivado*.jou design *.bits *.dcp *.bit top.v run.ok
|
||||
|
||||
.PHONY: database pushdb run clean
|
||||
include ../clb.mk
|
||||
|
||||
|
|
|
|||
|
|
@ -1,18 +1,5 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -ex
|
||||
|
||||
source ${XRAY_GENHEADER}
|
||||
|
||||
#echo '`define SEED 32'"'h$(echo $1 | md5sum | cut -c1-8)" > setseed.vh
|
||||
|
||||
python3 ../top.py >top.v
|
||||
vivado -mode batch -source ../generate.tcl
|
||||
test -z "$(fgrep CRITICAL vivado.log)"
|
||||
|
||||
for x in design*.bit; do
|
||||
${XRAY_BITREAD} -F $XRAY_ROI_FRAMES -o ${x}s -z -y $x
|
||||
done
|
||||
|
||||
python3 ../generate.py
|
||||
source ${XRAY_DIR}/utils/top_generate.sh
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1 @@
|
|||
/.Xil
|
||||
/design/
|
||||
/design.bit
|
||||
/design.bits
|
||||
/design.dcp
|
||||
/usage_statistics_webtalk.*
|
||||
/vivado*
|
||||
/specimen_*
|
||||
/*.segbits
|
||||
/run.ok
|
||||
build
|
||||
|
|
|
|||
|
|
@ -1,28 +1,3 @@
|
|||
N := 1
|
||||
SPECIMENS := $(addprefix specimen_,$(shell seq -f '%03.0f' $(N)))
|
||||
SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS))
|
||||
|
||||
database: $(SPECIMENS_OK)
|
||||
${XRAY_SEGMATCH} -o seg_clblx.segbits $(addsuffix /segdata_clbl[lm]_[lr].txt,$(SPECIMENS))
|
||||
|
||||
pushdb:
|
||||
${XRAY_MERGEDB} clbll_l seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clbll_r seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clblm_l seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clblm_r seg_clblx.segbits
|
||||
|
||||
$(SPECIMENS_OK):
|
||||
bash generate.sh $(subst /OK,,$@)
|
||||
touch $@
|
||||
|
||||
run:
|
||||
$(MAKE) clean
|
||||
$(MAKE) database
|
||||
$(MAKE) pushdb
|
||||
touch run.ok
|
||||
|
||||
clean:
|
||||
rm -rf specimen_[0-9][0-9][0-9]/ seg_clblx.segbits vivado*.log vivado_*.str vivado*.jou design *.bits *.dcp *.bit top.v run.ok
|
||||
|
||||
.PHONY: database pushdb run clean
|
||||
include ../clb.mk
|
||||
|
||||
|
|
|
|||
|
|
@ -1,17 +1,5 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -ex
|
||||
|
||||
source ${XRAY_GENHEADER}
|
||||
|
||||
#echo '`define SEED 32'"'h$(echo $1 | md5sum | cut -c1-8)" > setseed.vh
|
||||
|
||||
python3 ../top.py >top.v
|
||||
vivado -mode batch -source ../generate.tcl
|
||||
|
||||
for x in design*.bit; do
|
||||
${XRAY_BITREAD} -F $XRAY_ROI_FRAMES -o ${x}s -z -y $x
|
||||
done
|
||||
|
||||
python3 ../generate.py
|
||||
source ${XRAY_DIR}/utils/top_generate.sh
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1 @@
|
|||
/specimen_*/
|
||||
/*.segbits
|
||||
/vivado.log
|
||||
/vivado.jou
|
||||
build
|
||||
|
|
|
|||
|
|
@ -1,29 +1,4 @@
|
|||
N := 1
|
||||
SPECIMENS := $(addprefix specimen_,$(shell seq -f '%03.0f' $(N)))
|
||||
SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS))
|
||||
|
||||
database: $(SPECIMENS_OK)
|
||||
${XRAY_SEGMATCH} -o seg_clblx.segbits $(addsuffix /segdata_clbl[lm]_[lr].txt,$(SPECIMENS))
|
||||
|
||||
pushdb:
|
||||
${XRAY_MERGEDB} clbll_l seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clbll_r seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clblm_l seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clblm_r seg_clblx.segbits
|
||||
${XRAY_DBFIXUP}
|
||||
|
||||
$(SPECIMENS_OK):
|
||||
bash generate.sh $(subst /OK,,$@)
|
||||
touch $@
|
||||
|
||||
run:
|
||||
$(MAKE) clean
|
||||
$(MAKE) database
|
||||
$(MAKE) pushdb
|
||||
touch run.ok
|
||||
|
||||
clean:
|
||||
rm -rf specimen_[0-9][0-9][0-9]/ seg_clblx.segbits vivado*.log vivado_*.str vivado*.jou design *.bits *.dcp *.bit top.v run.ok
|
||||
|
||||
.PHONY: database pushdb run clean
|
||||
DBFIXUP := ${XRAY_DBFIXUP} --db_root build --zero-db bits.dbf --zero-tile-types clblx
|
||||
include ../clb.mk
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,9 @@
|
|||
"30_00 30_01 30_02 30_03"
|
||||
"30_24 30_25 30_26 30_27"
|
||||
"30_35 30_36 30_37 30_38"
|
||||
"30_59 30_60 30_61 30_62"
|
||||
"30_04 31_00 31_01 31_02"
|
||||
"31_24 31_25 31_26 31_27"
|
||||
"31_35 31_36 31_37 31_38"
|
||||
"30_58 31_60 31_61 31_62"
|
||||
|
||||
|
|
@ -2,18 +2,5 @@
|
|||
|
||||
set -ex
|
||||
if [ $(vivado -h |grep Vivado |cut -d\ -f 2) != "v2017.2" ] ; then echo "FIXME: requires Vivado 2017.2. See https://github.com/SymbiFlow/prjxray/issues/14"; exit 1; fi
|
||||
|
||||
source ${XRAY_GENHEADER}
|
||||
|
||||
#echo '`define SEED 32'"'h$(echo $1 | md5sum | cut -c1-8)" > setseed.vh
|
||||
|
||||
python3 ../top.py >top.v
|
||||
vivado -mode batch -source ../generate.tcl
|
||||
test -z "$(fgrep CRITICAL vivado.log)"
|
||||
|
||||
for x in design*.bit; do
|
||||
${XRAY_BITREAD} -F $XRAY_ROI_FRAMES -o ${x}s -z -y $x
|
||||
done
|
||||
|
||||
python3 ../generate.py
|
||||
source ${XRAY_DIR}/utils/top_generate.sh
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,2 @@
|
|||
/specimen_*/
|
||||
/*.segbits
|
||||
!/o6.segbits
|
||||
/vivado.log
|
||||
/vivado.jou
|
||||
build
|
||||
|
||||
|
|
|
|||
|
|
@ -1,29 +1,4 @@
|
|||
N := 1
|
||||
SPECIMENS := $(addprefix specimen_,$(shell seq -f '%03.0f' $(N)))
|
||||
SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS))
|
||||
|
||||
database: $(SPECIMENS_OK)
|
||||
${XRAY_SEGMATCH} -o seg_clblx.segbits $(addsuffix /segdata_clbl[lm]_[lr].txt,$(SPECIMENS))
|
||||
|
||||
pushdb:
|
||||
${XRAY_MERGEDB} clbll_l seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clbll_r seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clblm_l seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clblm_r seg_clblx.segbits
|
||||
${XRAY_DBFIXUP}
|
||||
|
||||
$(SPECIMENS_OK):
|
||||
bash generate.sh $(subst /OK,,$@)
|
||||
touch $@
|
||||
|
||||
run:
|
||||
$(MAKE) clean
|
||||
$(MAKE) database
|
||||
$(MAKE) pushdb
|
||||
touch run.ok
|
||||
|
||||
clean:
|
||||
rm -rf specimen_[0-9][0-9][0-9]/ *.segbits vivado*.log vivado_*.str vivado*.jou design *.bits *.dcp *.bit top.v run.ok
|
||||
|
||||
.PHONY: database pushdb run clean
|
||||
DBFIXUP := ${XRAY_DBFIXUP} --db_root build --zero-db bits.dbf --zero-tile-types clblx
|
||||
include ../clb.mk
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,9 @@
|
|||
30_06 30_07 30_08 30_11
|
||||
30_20 30_21 30_22 30_23
|
||||
30_40 30_43 30_44 30_45
|
||||
30_51 30_52 30_56 30_57
|
||||
30_05 31_07 31_09 31_10
|
||||
30_28 30_29 31_20 31_21
|
||||
30_41 30_42 31_40 31_43
|
||||
30_53 31_53 31_56 31_57
|
||||
|
||||
|
|
@ -2,18 +2,5 @@
|
|||
|
||||
set -ex
|
||||
if [ $(vivado -h |grep Vivado |cut -d\ -f 2) != "v2017.2" ] ; then echo "FIXME: requires Vivado 2017.2. See https://github.com/SymbiFlow/prjxray/issues/14"; exit 1; fi
|
||||
|
||||
source ${XRAY_GENHEADER}
|
||||
|
||||
#echo '`define SEED 32'"'h$(echo $1 | md5sum | cut -c1-8)" > setseed.vh
|
||||
|
||||
python3 ../top.py >top.v
|
||||
vivado -mode batch -source ../generate.tcl
|
||||
test -z "$(fgrep CRITICAL vivado.log)"
|
||||
|
||||
for x in design*.bit; do
|
||||
${XRAY_BITREAD} -F $XRAY_ROI_FRAMES -o ${x}s -z -y $x
|
||||
done
|
||||
|
||||
python3 ../generate.py
|
||||
source ${XRAY_DIR}/utils/top_generate.sh
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,2 @@
|
|||
/specimen_*/
|
||||
/*.segbits
|
||||
/vivado.log
|
||||
/vivado.jou
|
||||
/run.ok
|
||||
build
|
||||
|
||||
|
|
|
|||
|
|
@ -1,29 +1,4 @@
|
|||
N := 1
|
||||
SPECIMENS := $(addprefix specimen_,$(shell seq -f '%03.0f' $(N)))
|
||||
SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS))
|
||||
|
||||
database: $(SPECIMENS_OK)
|
||||
${XRAY_SEGMATCH} -o seg_clblx.segbits $(addsuffix /segdata_clbl[lm]_[lr].txt,$(SPECIMENS))
|
||||
|
||||
pushdb:
|
||||
${XRAY_MERGEDB} clbll_l seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clbll_r seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clblm_l seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clblm_r seg_clblx.segbits
|
||||
${XRAY_DBFIXUP}
|
||||
|
||||
$(SPECIMENS_OK):
|
||||
bash generate.sh $(subst /OK,,$@)
|
||||
touch $@
|
||||
|
||||
run:
|
||||
$(MAKE) clean
|
||||
$(MAKE) database
|
||||
$(MAKE) pushdb
|
||||
touch run.ok
|
||||
|
||||
clean:
|
||||
rm -rf specimen_[0-9][0-9][0-9]/ seg_clblx.segbits vivado*.log vivado_*.str vivado*.jou design *.bits *.dcp *.bit top.v run.ok
|
||||
|
||||
.PHONY: database pushdb run clean
|
||||
DBFIXUP := ${XRAY_DBFIXUP} --db_root build --zero-db bits.dbf --zero-tile-types clblx
|
||||
include ../clb.mk
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,4 @@
|
|||
# Reserved for PRECYINIT.0
|
||||
# Running on empty DB still removes <const0>
|
||||
# https://github.com/SymbiFlow/prjxray/issues/232
|
||||
|
||||
|
|
@ -1,18 +1,5 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -ex
|
||||
|
||||
source ${XRAY_GENHEADER}
|
||||
|
||||
#echo '`define SEED 32'"'h$(echo $1 | md5sum | cut -c1-8)" > setseed.vh
|
||||
|
||||
python3 ../top.py >top.v
|
||||
vivado -mode batch -source ../generate.tcl
|
||||
test -z "$(fgrep CRITICAL vivado.log)"
|
||||
|
||||
for x in design*.bit; do
|
||||
${XRAY_BITREAD} -F $XRAY_ROI_FRAMES -o ${x}s -z -y $x
|
||||
done
|
||||
|
||||
python3 ../generate.py
|
||||
source ${XRAY_DIR}/utils/top_generate.sh
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1 @@
|
|||
/specimen_*/
|
||||
/*.segbits
|
||||
/vivado.log
|
||||
/vivado.jou
|
||||
build
|
||||
|
|
|
|||
|
|
@ -1,28 +1,3 @@
|
|||
N := 1
|
||||
SPECIMENS := $(addprefix specimen_,$(shell seq -f '%03.0f' $(N)))
|
||||
SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS))
|
||||
|
||||
database: $(SPECIMENS_OK)
|
||||
${XRAY_SEGMATCH} -o seg_clblx.segbits $(addsuffix /segdata_clbl[lm]_[lr].txt,$(SPECIMENS))
|
||||
|
||||
pushdb:
|
||||
${XRAY_MERGEDB} clbll_l seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clbll_r seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clblm_l seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clblm_r seg_clblx.segbits
|
||||
|
||||
$(SPECIMENS_OK):
|
||||
bash generate.sh $(subst /OK,,$@)
|
||||
touch $@
|
||||
|
||||
run:
|
||||
$(MAKE) clean
|
||||
$(MAKE) database
|
||||
$(MAKE) pushdb
|
||||
touch run.ok
|
||||
|
||||
clean:
|
||||
rm -rf specimen_[0-9][0-9][0-9]/ seg_clblx.segbits vivado*.log vivado_*.str vivado*.jou design *.bits *.dcp *.bit top.v run.ok
|
||||
|
||||
.PHONY: database pushdb run clean
|
||||
include ../clb.mk
|
||||
|
||||
|
|
|
|||
|
|
@ -1,18 +1,5 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -ex
|
||||
|
||||
source ${XRAY_GENHEADER}
|
||||
|
||||
#echo '`define SEED 32'"'h$(echo $1 | md5sum | cut -c1-8)" > setseed.vh
|
||||
|
||||
python3 ../top.py >top.v
|
||||
vivado -mode batch -source ../generate.tcl
|
||||
test -z "$(fgrep CRITICAL vivado.log)"
|
||||
|
||||
for x in design*.bit; do
|
||||
${XRAY_BITREAD} -F $XRAY_ROI_FRAMES -o ${x}s -z -y $x
|
||||
done
|
||||
|
||||
python3 ../generate.py
|
||||
source ${XRAY_DIR}/utils/top_generate.sh
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1 @@
|
|||
/specimen_*/
|
||||
/*.segbits
|
||||
/vivado.log
|
||||
/vivado.jou
|
||||
build
|
||||
|
|
|
|||
|
|
@ -1,15 +1,20 @@
|
|||
# clb.mk clblm only
|
||||
|
||||
N := 1
|
||||
SPECIMENS := $(addprefix specimen_,$(shell seq -f '%03.0f' $(N)))
|
||||
SPECIMENS := $(addprefix build/specimen_,$(shell seq -f '%03.0f' $(N)))
|
||||
SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS))
|
||||
|
||||
database: $(SPECIMENS_OK)
|
||||
${XRAY_SEGMATCH} -o seg_clblx.segbits $(addsuffix /segdata_clblm_[lr].txt,$(SPECIMENS))
|
||||
${XRAY_SEGMATCH} -o build/seg_clblx.segbits $(addsuffix /segdata_clblm_[lr].txt,$(SPECIMENS))
|
||||
|
||||
pushdb:
|
||||
${XRAY_MERGEDB} clblm_l seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clblm_r seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clblm_l build/seg_clblx.segbits
|
||||
${XRAY_MERGEDB} clblm_r build/seg_clblx.segbits
|
||||
|
||||
$(SPECIMENS_OK):
|
||||
build:
|
||||
mkdir build
|
||||
|
||||
$(SPECIMENS_OK): build
|
||||
bash generate.sh $(subst /OK,,$@)
|
||||
touch $@
|
||||
|
||||
|
|
@ -20,7 +25,7 @@ run:
|
|||
touch run.ok
|
||||
|
||||
clean:
|
||||
rm -rf specimen_[0-9][0-9][0-9]/ seg_clblx.segbits vivado*.log vivado_*.str vivado*.jou design *.bits *.dcp *.bit top.v run.ok
|
||||
rm -rf build
|
||||
|
||||
.PHONY: database pushdb run clean
|
||||
|
||||
|
|
|
|||
|
|
@ -1,18 +1,5 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -ex
|
||||
|
||||
source ${XRAY_GENHEADER}
|
||||
|
||||
#echo '`define SEED 32'"'h$(echo $1 | md5sum | cut -c1-8)" > setseed.vh
|
||||
|
||||
python3 ../top.py >top.v
|
||||
vivado -mode batch -source ../generate.tcl
|
||||
test -z "$(fgrep CRITICAL vivado.log)"
|
||||
|
||||
for x in design*.bit; do
|
||||
${XRAY_BITREAD} -F $XRAY_ROI_FRAMES -o ${x}s -z -y $x
|
||||
done
|
||||
|
||||
python3 ../generate.py
|
||||
source ${XRAY_DIR}/utils/top_generate.sh
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ build:
|
|||
mkdir build
|
||||
|
||||
$(SPECIMENS_OK): build
|
||||
bash generate.sh $(subst /OK,,$@)
|
||||
bash ${XRAY_DIR}/utils/top_generate.sh $(subst /OK,,$@)
|
||||
touch $@
|
||||
|
||||
run:
|
||||
|
|
|
|||
|
|
@ -12,13 +12,13 @@ database: $(SPECIMENS_OK)
|
|||
${XRAY_MASKMERGE} mask_clblm_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS))
|
||||
|
||||
pushdb:
|
||||
${XRAY_DBFIXUP} --db_root . --clb-int
|
||||
${XRAY_MERGEDB} int_l seg_int_l.segbits
|
||||
${XRAY_MERGEDB} int_r seg_int_r.segbits
|
||||
${XRAY_MERGEDB} mask_clbll_l mask_clbll_l.segbits
|
||||
${XRAY_MERGEDB} mask_clbll_r mask_clbll_r.segbits
|
||||
${XRAY_MERGEDB} mask_clblm_l mask_clblm_l.segbits
|
||||
${XRAY_MERGEDB} mask_clblm_r mask_clblm_r.segbits
|
||||
${XRAY_DBFIXUP}
|
||||
|
||||
$(SPECIMENS_OK):
|
||||
bash generate.sh $(subst /OK,,$@)
|
||||
|
|
|
|||
|
|
@ -8,9 +8,9 @@ database: $(SPECIMENS_OK)
|
|||
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS))
|
||||
|
||||
pushdb:
|
||||
${XRAY_DBFIXUP} --db_root . --clb-int
|
||||
${XRAY_MERGEDB} int_l seg_int_l.segbits
|
||||
${XRAY_MERGEDB} int_r seg_int_r.segbits
|
||||
${XRAY_DBFIXUP}
|
||||
|
||||
$(SPECIMENS_OK): todo.txt
|
||||
bash generate.sh $(subst /OK,,$@)
|
||||
|
|
|
|||
|
|
@ -8,9 +8,9 @@ database: $(SPECIMENS_OK)
|
|||
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS))
|
||||
|
||||
pushdb:
|
||||
${XRAY_DBFIXUP} --db_root . --clb-int
|
||||
${XRAY_MERGEDB} int_l seg_int_l.segbits
|
||||
${XRAY_MERGEDB} int_r seg_int_r.segbits
|
||||
${XRAY_DBFIXUP}
|
||||
|
||||
$(SPECIMENS_OK): todo.txt
|
||||
bash generate.sh $(subst /OK,,$@)
|
||||
|
|
|
|||
|
|
@ -8,9 +8,9 @@ database: $(SPECIMENS_OK)
|
|||
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS))
|
||||
|
||||
pushdb:
|
||||
${XRAY_DBFIXUP} --db_root . --clb-int
|
||||
${XRAY_MERGEDB} int_l seg_int_l.segbits
|
||||
${XRAY_MERGEDB} int_r seg_int_r.segbits
|
||||
${XRAY_DBFIXUP}
|
||||
|
||||
$(SPECIMENS_OK): todo.txt
|
||||
bash generate.sh $(subst /OK,,$@)
|
||||
|
|
|
|||
|
|
@ -8,9 +8,9 @@ database: $(SPECIMENS_OK)
|
|||
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS))
|
||||
|
||||
pushdb:
|
||||
${XRAY_DBFIXUP} --db_root . --clb-int
|
||||
${XRAY_MERGEDB} int_l seg_int_l.segbits
|
||||
${XRAY_MERGEDB} int_r seg_int_r.segbits
|
||||
${XRAY_DBFIXUP}
|
||||
|
||||
$(SPECIMENS_OK): todo.txt
|
||||
bash generate.sh $(subst /OK,,$@)
|
||||
|
|
|
|||
|
|
@ -8,9 +8,9 @@ database: $(SPECIMENS_OK)
|
|||
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS))
|
||||
|
||||
pushdb:
|
||||
${XRAY_DBFIXUP} --db_root . --clb-int
|
||||
${XRAY_MERGEDB} int_l seg_int_l.segbits
|
||||
${XRAY_MERGEDB} int_r seg_int_r.segbits
|
||||
${XRAY_DBFIXUP}
|
||||
|
||||
$(SPECIMENS_OK): todo.txt
|
||||
bash generate.sh $(subst /OK,,$@)
|
||||
|
|
|
|||
|
|
@ -8,9 +8,9 @@ database: $(SPECIMENS_OK)
|
|||
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS))
|
||||
|
||||
pushdb:
|
||||
${XRAY_DBFIXUP} --db_root . --clb-int
|
||||
${XRAY_MERGEDB} int_l seg_int_l.segbits
|
||||
${XRAY_MERGEDB} int_r seg_int_r.segbits
|
||||
${XRAY_DBFIXUP}
|
||||
|
||||
$(SPECIMENS_OK): todo.txt
|
||||
bash generate.sh $(subst /OK,,$@)
|
||||
|
|
|
|||
|
|
@ -8,9 +8,9 @@ database: $(SPECIMENS_OK)
|
|||
${XRAY_SEGMATCH} -m 5 -M 15 -o seg_int_r.segbits $(addsuffix /segdata_int_r.txt,$(SPECIMENS))
|
||||
|
||||
pushdb:
|
||||
${XRAY_DBFIXUP} --db_root . --clb-int
|
||||
${XRAY_MERGEDB} int_l seg_int_l.segbits
|
||||
${XRAY_MERGEDB} int_r seg_int_r.segbits
|
||||
${XRAY_DBFIXUP}
|
||||
|
||||
$(SPECIMENS_OK): todo.txt
|
||||
bash generate.sh $(subst /OK,,$@)
|
||||
|
|
|
|||
|
|
@ -12,13 +12,13 @@ database: $(SPECIMENS_OK)
|
|||
grep CK_INOUT seg_hclk_r.segbits | sed 's, .*, always,' > ppips_hclk_r.txt
|
||||
|
||||
pushdb:
|
||||
${XRAY_DBFIXUP} --db_root . --clb-int
|
||||
${XRAY_MERGEDB} hclk_l seg_hclk_l.segbits
|
||||
${XRAY_MERGEDB} hclk_r seg_hclk_r.segbits
|
||||
${XRAY_MERGEDB} mask_hclk_l mask_hclk_l.segbits
|
||||
${XRAY_MERGEDB} mask_hclk_r mask_hclk_r.segbits
|
||||
cp ppips_hclk_l.txt ${XRAY_DATABASE_DIR}/$(XRAY_DATABASE)/ppips_hclk_l.db
|
||||
cp ppips_hclk_r.txt ${XRAY_DATABASE_DIR}/$(XRAY_DATABASE)/ppips_hclk_r.db
|
||||
${XRAY_DBFIXUP}
|
||||
|
||||
$(SPECIMENS_OK):
|
||||
bash generate.sh $(subst /OK,,$@)
|
||||
|
|
|
|||
|
|
@ -8,9 +8,9 @@ database: $(SPECIMENS_OK)
|
|||
${XRAY_SEGMATCH} -o seg_dsp_r.segbits $(addsuffix /segdata_dsp_r_*.txt,$(SPECIMENS))
|
||||
|
||||
pushdb:
|
||||
${XRAY_DBFIXUP} --db_root . --clb-int
|
||||
${XRAY_MERGEDB} dsp_l seg_dsp_l.segbits
|
||||
${XRAY_MERGEDB} dsp_r seg_dsp_r.segbits
|
||||
${XRAY_DBFIXUP}
|
||||
|
||||
$(SPECIMENS_OK):
|
||||
bash generate.sh $(subst /OK,,$@)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,34 @@
|
|||
N ?= 1
|
||||
DBFIXUP ?=
|
||||
|
||||
SPECIMENS := $(addprefix build/specimen_,$(shell seq -f '%03.0f' $(N)))
|
||||
SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS))
|
||||
|
||||
database: $(SPECIMENS_OK)
|
||||
${XRAY_SEGMATCH} -o build/segbits_clblx.db $(addsuffix /segdata_clbl[lm]_[lr].txt,$(SPECIMENS))
|
||||
|
||||
pushdb:
|
||||
$(DBFIXUP)
|
||||
${XRAY_MERGEDB} clbll_l build/segbits_clblx.db
|
||||
${XRAY_MERGEDB} clbll_r build/segbits_clblx.db
|
||||
${XRAY_MERGEDB} clblm_l build/segbits_clblx.db
|
||||
${XRAY_MERGEDB} clblm_r build/segbits_clblx.db
|
||||
|
||||
build:
|
||||
mkdir build
|
||||
|
||||
$(SPECIMENS_OK): build
|
||||
bash generate.sh $(subst /OK,,$@)
|
||||
touch $@
|
||||
|
||||
run:
|
||||
$(MAKE) clean
|
||||
$(MAKE) database
|
||||
$(MAKE) pushdb
|
||||
touch run.ok
|
||||
|
||||
clean:
|
||||
rm -rf build
|
||||
|
||||
.PHONY: database pushdb run clean
|
||||
|
||||
|
|
@ -38,3 +38,15 @@ def get_roi():
|
|||
# we know that all bits for CLB MUXes are in frames 30 and 31, so filter all other bits
|
||||
def bitfilter_clb_mux(frame_idx, bit_idx):
|
||||
return frame_idx in [30, 31]
|
||||
|
||||
|
||||
def db_root_arg(parser):
|
||||
database_dir = os.getenv("XRAY_DATABASE_DIR")
|
||||
database = os.getenv("XRAY_DATABASE")
|
||||
db_root_kwargs = {}
|
||||
if database_dir is None or database is None:
|
||||
db_root_kwargs['required'] = True
|
||||
else:
|
||||
db_root_kwargs['required'] = False
|
||||
db_root_kwargs['default'] = os.path.join(database_dir, database)
|
||||
parser.add_argument('--db_root', help="Database root.", **db_root_kwargs)
|
||||
|
|
|
|||
306
utils/dbfixup.py
306
utils/dbfixup.py
|
|
@ -1,96 +1,158 @@
|
|||
#/usr/bin/env python3
|
||||
|
||||
import sys, os, re
|
||||
from prjxray import util
|
||||
|
||||
zero_db = [
|
||||
clb_int_zero_db = [
|
||||
# CLB interconnet
|
||||
# Ex:
|
||||
# segbits_hclk_l.db:73:HCLK_L.HCLK_LEAF_CLK_B_BOTL4.HCLK_CK_BUFHCLK10 00_21 04_21
|
||||
# segbits_int_l.db:207:INT_L.CLK_L0.GCLK_L_B8_WEST !01_21 00_21 00_25 01_20 01_24
|
||||
"00_21 00_22 00_26 01_28|00_25 01_20 01_21 01_24",
|
||||
"00_23 00_30 01_22 01_25|00_27 00_29 01_26 01_29",
|
||||
"01_12 01_14 01_16 01_18|00_10 00_11 01_09 01_10",
|
||||
"00_13 01_17 00_15 00_17|00_18 00_19 01_13 00_14",
|
||||
"00_34 00_38 01_33 01_37|00_35 00_39 01_38 01_40",
|
||||
"00_33 00_41 01_32 01_34|00_37 00_42 01_36 01_41",
|
||||
|
||||
# CLBL?_?.SLICE?_X?.?FF.DMUX
|
||||
"30_00 30_01 30_02 30_03",
|
||||
"30_24 30_25 30_26 30_27",
|
||||
"30_35 30_36 30_37 30_38",
|
||||
"30_59 30_60 30_61 30_62",
|
||||
"30_04 31_00 31_01 31_02",
|
||||
"31_24 31_25 31_26 31_27",
|
||||
"31_35 31_36 31_37 31_38",
|
||||
"30_58 31_60 31_61 31_62",
|
||||
|
||||
# CLBL?_?.SLICE?_X?.?MUX
|
||||
"30_06 30_07 30_08 30_11",
|
||||
"30_20 30_21 30_22 30_23",
|
||||
"30_40 30_43 30_44 30_45",
|
||||
"30_51 30_52 30_56 30_57",
|
||||
"30_05 31_07 31_09 31_10",
|
||||
"30_28 30_29 31_20 31_21",
|
||||
"30_41 30_42 31_40 31_43",
|
||||
"30_53 31_53 31_56 31_57",
|
||||
]
|
||||
|
||||
|
||||
def add_zero_bits(tile_type):
|
||||
assert os.getenv("XRAY_DATABASE") in ["artix7", "kintex7"]
|
||||
dbfile = "%s/%s/segbits_%s.db" % (
|
||||
os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"), tile_type)
|
||||
new_lines = set()
|
||||
llast = None
|
||||
def parse_line(line):
|
||||
parts = line.split()
|
||||
# Ex: CLBLL_L.SLICEL_X0.AMUX.A5Q
|
||||
tag = parts[0]
|
||||
# Ex: !30_06 !30_08 !30_11 30_07
|
||||
bits = set(parts[1:])
|
||||
return tag, bits
|
||||
|
||||
if not os.path.exists(dbfile):
|
||||
|
||||
def zero_range(bits, wordmin, wordmax):
|
||||
"""
|
||||
If any bits occur wordmin <= word <= wordmax,
|
||||
default bits in wordmin <= word <= wordmax to 0
|
||||
"""
|
||||
|
||||
# The bit index, if any, that needs to be one hotted
|
||||
bitidx = None
|
||||
for bit in bits:
|
||||
if bit[0] == "!":
|
||||
continue
|
||||
fidx, bidx = [int(s) for s in bit.split("_")]
|
||||
if wordmin <= fidx <= wordmax:
|
||||
assert bitidx is None or bidx == bitidx
|
||||
bitidx = bidx
|
||||
|
||||
if bitidx is None:
|
||||
return
|
||||
|
||||
for fidx in range(wordmin, wordmax + 1):
|
||||
bit = "%02d_%02d" % (fidx, bitidx)
|
||||
# Preserve 1 bits, set others to 0
|
||||
if bit not in bits:
|
||||
bits.add("!" + bit)
|
||||
|
||||
|
||||
def bits_str(bits):
|
||||
"""Convert a set into canonical form"""
|
||||
return ' '.join(sorted(list(bits)))
|
||||
|
||||
|
||||
def zero_groups(bits, zero_db, strict=True, verbose=False):
|
||||
"""
|
||||
See if a line occurs within a bit group
|
||||
If it does, add 0 bits
|
||||
|
||||
Ex: 01_02 04_05
|
||||
Means find a line that has either of these bits
|
||||
If either of them occurs, default bits in that set to zero
|
||||
|
||||
Ex: 01_02 04_05 | 07_08 10_11
|
||||
If any bits from the first group occur,
|
||||
default bits in the second group to zero
|
||||
|
||||
strict: assert that the size of the given group is the size of the given mask
|
||||
"""
|
||||
for zdb in zero_db:
|
||||
if "|" in zdb:
|
||||
a, b = zdb.split("|")
|
||||
a = a.split()
|
||||
b = b.split()
|
||||
else:
|
||||
a = zdb.split()
|
||||
b = a
|
||||
|
||||
match = False
|
||||
for bit in a:
|
||||
if bit in bits:
|
||||
match = True
|
||||
if match:
|
||||
bits_orig = set(bits)
|
||||
for bit in b:
|
||||
if bit not in bits:
|
||||
bits.add("!" + bit)
|
||||
verbose and print(
|
||||
"Grouped: %s => %s" % (bits_str(bits_orig), bits_str(bits)))
|
||||
if a == b and strict:
|
||||
assert len(bits) == len(
|
||||
a), "Mask size %u != DB entry size %u: %s" % (
|
||||
len(a), len(bits), bits_str(bits))
|
||||
|
||||
|
||||
def add_zero_bits(db_root, tile_type, zero_db, clb_int=False, verbose=False):
|
||||
'''
|
||||
Add multibit entries
|
||||
This requires adding some zero bits (ex: !31_09)
|
||||
If an entry has any of the
|
||||
'''
|
||||
dbfile = "%s/segbits_%s.db" % (db_root, tile_type)
|
||||
new_lines = set()
|
||||
changes = 0
|
||||
|
||||
verbose and print("zb %s: %s" % (dbfile, os.path.exists(dbfile)))
|
||||
if not os.path.exists(dbfile):
|
||||
return None
|
||||
|
||||
llast = None
|
||||
with open(dbfile, "r") as f:
|
||||
for line in f:
|
||||
# Hack: skip duplicate lines
|
||||
# This happens while merging a new multibit entry
|
||||
line = line.strip()
|
||||
if line == llast:
|
||||
continue
|
||||
line = line.split()
|
||||
tag = line[0]
|
||||
bits = set(line[1:])
|
||||
bitidx = None
|
||||
for bit in bits:
|
||||
if bit[0] == "!":
|
||||
continue
|
||||
fidx, bidx = [int(s) for s in bit.split("_")]
|
||||
if 22 <= fidx <= 25:
|
||||
bitidx = bidx
|
||||
if bitidx is not None:
|
||||
for fidx in range(22, 26):
|
||||
bit = "%02d_%02d" % (fidx, bitidx)
|
||||
if bit not in bits:
|
||||
bits.add("!" + bit)
|
||||
for zdb in zero_db:
|
||||
if "|" in zdb:
|
||||
a, b = zdb.split("|")
|
||||
a = a.split()
|
||||
b = b.split()
|
||||
else:
|
||||
a = zdb.split()
|
||||
b = a
|
||||
match = False
|
||||
for bit in a:
|
||||
if bit in bits:
|
||||
match = True
|
||||
if match:
|
||||
for bit in b:
|
||||
if bit not in bits:
|
||||
bits.add("!" + bit)
|
||||
new_lines.add(" ".join([tag] + sorted(bits)))
|
||||
|
||||
tag, bits = parse_line(line)
|
||||
"""
|
||||
This appears to be a large range of one hot interconnect bits
|
||||
They are immediately before the first CLB real bits
|
||||
"""
|
||||
# FIXME: handle these better
|
||||
# https://github.com/SymbiFlow/prjxray/issues/232
|
||||
orig_bits = line.replace(tag + " ", "")
|
||||
if orig_bits in ("<const0>", "<0 candidates>"):
|
||||
print("WARNING: dropping %s" % line)
|
||||
changes += 1
|
||||
continue
|
||||
if clb_int:
|
||||
zero_range(bits, 22, 25)
|
||||
zero_groups(bits, zero_db, strict=not clb_int, verbose=verbose)
|
||||
|
||||
new_line = " ".join([tag] + sorted(bits))
|
||||
if new_line != line:
|
||||
changes += 1
|
||||
new_lines.add(new_line)
|
||||
llast = line
|
||||
|
||||
with open(dbfile, "w") as f:
|
||||
for line in sorted(new_lines):
|
||||
print(line, file=f)
|
||||
|
||||
return changes
|
||||
|
||||
def update_mask(mask_db, *src_dbs, offset=0):
|
||||
|
||||
def update_mask(db_root, mask_db, src_dbs, offset=0):
|
||||
bits = set()
|
||||
mask_db_file = "%s/%s/mask_%s.db" % (
|
||||
os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"), mask_db)
|
||||
mask_db_file = "%s/mask_%s.db" % (db_root, mask_db)
|
||||
|
||||
if os.path.exists(mask_db_file):
|
||||
with open(mask_db_file, "r") as f:
|
||||
|
|
@ -101,8 +163,7 @@ def update_mask(mask_db, *src_dbs, offset=0):
|
|||
bits.add(line[1])
|
||||
|
||||
for src_db in src_dbs:
|
||||
seg_db_file = "%s/%s/segbits_%s.db" % (
|
||||
os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"), src_db)
|
||||
seg_db_file = "%s/segbits_%s.db" % (db_root, src_db)
|
||||
|
||||
if not os.path.exists(seg_db_file):
|
||||
continue
|
||||
|
|
@ -125,27 +186,100 @@ def update_mask(mask_db, *src_dbs, offset=0):
|
|||
print("bit %s" % bit, file=f)
|
||||
|
||||
|
||||
add_zero_bits("int_l")
|
||||
add_zero_bits("int_r")
|
||||
add_zero_bits("clbll_l")
|
||||
add_zero_bits("clbll_r")
|
||||
add_zero_bits("clblm_l")
|
||||
add_zero_bits("clblm_r")
|
||||
def load_zero_db(fn):
|
||||
# Remove comments and convert to list of lines
|
||||
ret = []
|
||||
for l in open(fn, "r"):
|
||||
pos = l.find("#")
|
||||
if pos >= 0:
|
||||
l = l[0:pos]
|
||||
l = l.strip()
|
||||
if not l:
|
||||
continue
|
||||
ret.append(l)
|
||||
return ret
|
||||
|
||||
update_mask("clbll_l", "clbll_l", "int_l")
|
||||
update_mask("clbll_r", "clbll_r", "int_r")
|
||||
update_mask("clblm_l", "clblm_l", "int_l")
|
||||
update_mask("clblm_r", "clblm_r", "int_r")
|
||||
update_mask("hclk_l", "hclk_l")
|
||||
update_mask("hclk_r", "hclk_r")
|
||||
|
||||
update_mask("bram_l", "bram_l")
|
||||
update_mask("bram_r", "bram_r")
|
||||
update_mask("dsp_l", "dsp_l")
|
||||
update_mask("dsp_r", "dsp_r")
|
||||
def run(
|
||||
db_root,
|
||||
clb_int=False,
|
||||
zero_db_fn=None,
|
||||
zero_tile_types=None,
|
||||
verbose=False):
|
||||
if clb_int:
|
||||
zero_db = clb_int_zero_db
|
||||
# clblx is used by the CLB fuzzers before being expanded to DB
|
||||
zero_tile_types = [
|
||||
"int_l", "int_r", "clbll_l", "clbll_r", "clblm_l", "clblm_r",
|
||||
"clblx"
|
||||
]
|
||||
else:
|
||||
assert zero_db_fn
|
||||
assert zero_tile_types
|
||||
zero_db = load_zero_db(zero_db_fn)
|
||||
print("CLB INT mode: %s" % clb_int)
|
||||
print("Segbit groups: %s" % len(zero_db))
|
||||
|
||||
for k in range(5):
|
||||
update_mask("bram_l", "int_l", offset=64 * k)
|
||||
update_mask("bram_r", "int_r", offset=64 * k)
|
||||
update_mask("dsp_l", "int_l", offset=64 * k)
|
||||
update_mask("dsp_r", "int_r", offset=64 * k)
|
||||
seg_files = 0
|
||||
seg_lines = 0
|
||||
for tile_type in zero_tile_types:
|
||||
changes = add_zero_bits(
|
||||
db_root, tile_type, zero_db, clb_int=clb_int, verbose=verbose)
|
||||
if changes is not None:
|
||||
seg_files += 1
|
||||
seg_lines += changes
|
||||
print(
|
||||
"Segbit: checked %u files w/ %u changed lines" %
|
||||
(seg_files, seg_lines))
|
||||
|
||||
if clb_int:
|
||||
for mask_db, src_dbs in [
|
||||
("clbll_l", ("clbll_l", "int_l")),
|
||||
("clbll_r", ("clbll_r", "int_r")),
|
||||
("clblm_l", ("clblm_l", "int_l")),
|
||||
("clblm_r", ("clblm_r", "int_r")),
|
||||
("hclk_l", ("hclk_l", )),
|
||||
("hclk_r", ("hclk_r", )),
|
||||
("bram_l", ("bram_l", )),
|
||||
("bram_r", ("bram_r", )),
|
||||
("dsp_l", ("dsp_l", )),
|
||||
("dsp_r", ("dsp_r", )),
|
||||
]:
|
||||
update_mask(db_root, mask_db, src_dbs)
|
||||
|
||||
for mask_db, src_dbs in [
|
||||
("bram_l", ("int_l", )),
|
||||
("bram_r", ("int_r", )),
|
||||
("dsp_l", ("int_l", )),
|
||||
("dsp_r", ("int_r", )),
|
||||
]:
|
||||
for k in range(5):
|
||||
update_mask(db_root, mask_db, src_dbs, offset=64 * k)
|
||||
|
||||
print("Mask: checked files")
|
||||
|
||||
|
||||
def main():
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser(description='Create multi-bit entries')
|
||||
|
||||
util.db_root_arg(parser)
|
||||
parser.add_argument('--verbose', action='store_true', help='')
|
||||
parser.add_argument(
|
||||
'--clb-int', action='store_true', help='Fixup CLB interconnect')
|
||||
parser.add_argument('--zero-db', help='Apply custom patches')
|
||||
parser.add_argument('--zero-tile-types', help='')
|
||||
args = parser.parse_args()
|
||||
|
||||
# XXX: can auto detect this?
|
||||
zero_tile_types = args.zero_tile_types.split(
|
||||
",") if args.zero_tile_types else None
|
||||
|
||||
run(
|
||||
args.db_root, args.clb_int, args.zero_db, zero_tile_types,
|
||||
args.verbose)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ Ex: BRAM_L_X6Y100:CLB_IO_CLK
|
|||
import sys, os, json, re
|
||||
from prjxray import bitstream
|
||||
from prjxray import db as prjxraydb
|
||||
from prjxray import util
|
||||
|
||||
|
||||
class NoDB(Exception):
|
||||
|
|
@ -449,21 +450,10 @@ def run(
|
|||
def main():
|
||||
import argparse
|
||||
|
||||
# XXX: tool still works, but not well
|
||||
# need to eliminate segments entirely
|
||||
parser = argparse.ArgumentParser(
|
||||
description='XXX: does not print all data?')
|
||||
description="Decode bits within a tile's address space")
|
||||
|
||||
database_dir = os.getenv("XRAY_DATABASE_DIR")
|
||||
database = os.getenv("XRAY_DATABASE")
|
||||
db_root_kwargs = {}
|
||||
if database_dir is None or database is None:
|
||||
db_root_kwargs['required'] = True
|
||||
else:
|
||||
db_root_kwargs['required'] = False
|
||||
db_root_kwargs['default'] = os.path.join(database_dir, database)
|
||||
|
||||
parser.add_argument('--db_root', help="Database root.", **db_root_kwargs)
|
||||
util.db_root_arg(parser)
|
||||
parser.add_argument('--verbose', action='store_true', help='')
|
||||
parser.add_argument(
|
||||
'-z',
|
||||
|
|
|
|||
|
|
@ -1,11 +1,12 @@
|
|||
#!/bin/bash
|
||||
# Generic generate.sh for scripts that use top.py to generate top.v
|
||||
# and then use generate.py for segment generation
|
||||
|
||||
set -ex
|
||||
|
||||
FUZDIR=$PWD
|
||||
source ${XRAY_GENHEADER}
|
||||
|
||||
|
||||
python3 $FUZDIR/top.py >top.v
|
||||
vivado -mode batch -source $FUZDIR/generate.tcl
|
||||
test -z "$(fgrep CRITICAL vivado.log)"
|
||||
Loading…
Reference in New Issue