Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,11 @@ log/
logs/
temp/
picker_out*
output/
dependence/xcomm
dependence/fmt/
dependence/slang/
dependence/yaml-cpp/
AppDir/
app_image_build/

Expand All @@ -66,3 +70,4 @@ Testing
# Local verible installs/archives
verible-*/
verible-*.tar.gz

10 changes: 6 additions & 4 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,12 @@ else()
message(FATAL_ERROR "dependence/slang is missing. Run 'make init' first to fetch slang and fmt.")
endif()

# third
# add_subdirectory(third/type_safe)
# add_subdirectory(third/cppast)
add_subdirectory(third/yaml-cpp)
# YAML parser
if(EXISTS "${PROJECT_SOURCE_DIR}/dependence/yaml-cpp/CMakeLists.txt")
add_subdirectory(dependence/yaml-cpp)
else()
message(FATAL_ERROR "dependence/yaml-cpp is missing. Run 'make init' first to fetch yaml-cpp.")
endif()
LINK_LIBRARIES(yaml-cpp)

# source
Expand Down
49 changes: 20 additions & 29 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
SHELL := /bin/bash
SHELL := bash
.SHELLFLAGS := -eu -o pipefail -c

.PHONY: all init build install appimage test test_all test_vpi_all test_mem_direct_all \
test_all_java test_all_scala clean wheel wheel_install tests smoke_tests unit_tests

include example/example.mk

export NPROC := $(shell (nproc 2>/dev/null || sysctl -n hw.ncpu) 2>/dev/null)
export BUILD_XSPCOMM_SWIG ?= python

Expand Down Expand Up @@ -45,44 +47,33 @@ test: build
./build/bin/picker exports -h

test_all:
rm -rf picker_out_*
./example/Adder/release-verilator.sh --lang python
./example/RandomGenerator/release-verilator.sh --lang python
./example/AdderMultiInstance/release-verilator.sh --lang python
./example/Cache/release-verilator.sh --lang python
rm -rf output
@for example in $(EXAMPLE_TEST_ALL); do \
$(MAKE) test_$$example EXAMPLE_LANG=python ARGS="$(ARGS)" || exit $$?; \
done

test_vpi_all:
bash example/InternalSignals/release-verilator.sh --lang cpp
bash example/InternalSignals/release-verilator.sh --lang golang
bash example/InternalSignals/release-verilator.sh --lang java
bash example/InternalSignals/release-verilator.sh --lang lua
bash example/InternalSignals/release-verilator.sh --lang python
bash example/InternalSignals/release-verilator.sh --lang scala
@for lang in cpp golang java lua python scala; do \
$(MAKE) test_InternalSignals EXAMPLE_LANG=$$lang ARGS="$(ARGS)" || exit $$?; \
done

test_mem_direct_all:
bash example/CacheSignalCFG/release-verilator.sh --lang cpp
bash example/CacheSignalCFG/release-verilator.sh --lang golang
bash example/CacheSignalCFG/release-verilator.sh --lang java
bash example/CacheSignalCFG/release-verilator.sh --lang lua
bash example/CacheSignalCFG/release-verilator.sh --lang python
bash example/CacheSignalCFG/release-verilator.sh --lang scala
@for lang in cpp golang java lua python scala; do \
$(MAKE) test_CacheSignalCFG EXAMPLE_LANG=$$lang ARGS="$(ARGS)" || exit $$?; \
done

test_all_java:
bash example/Adder/release-verilator.sh --lang java
bash example/RandomGenerator/release-verilator.sh --lang java
bash example/DualPortStackCb/release-verilator.sh --lang java
bash example/InternalSignals/release-verilator.sh --lang java
bash example/CacheSignalCFG/release-verilator.sh --lang java
@for example in $(EXAMPLE_TEST_ALL_JAVA); do \
$(MAKE) test_$$example EXAMPLE_LANG=java ARGS="$(ARGS)" || exit $$?; \
done

test_all_scala:
bash example/Adder/release-verilator.sh --lang scala
bash example/RandomGenerator/release-verilator.sh --lang scala
bash example/DualPortStackCb/release-verilator.sh --lang scala
bash example/InternalSignals/release-verilator.sh --lang scala
bash example/CacheSignalCFG/release-verilator.sh --lang scala
@for example in $(EXAMPLE_TEST_ALL_SCALA); do \
$(MAKE) test_$$example EXAMPLE_LANG=scala ARGS="$(ARGS)" || exit $$?; \
done

clean:
rm -rf temp build dist picker_out* app_image_build AppDir
rm -rf temp build dist output app_image_build AppDir picker_out* picker_e203_ifu_ift2icb

wheel: init
cd dependence/xcomm && $(MAKE) wheel
Expand Down
9 changes: 6 additions & 3 deletions example/Adder/release-uvm.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
#!/bin/bash

rm -rf picker_out_adder/
OUT_ROOT="${OUT_ROOT:-output}"
OUT_DIR="${OUT_ROOT}/Adder"

rm -rf "$OUT_DIR"

./build/bin/picker pack --from-rtl example/Adder/Adder.v -n Adder -d -e

Expand All @@ -10,6 +13,6 @@ rm -rf uvmpy/example.py
cp example/Adder/example.py uvmpy/
cp example/Adder/example-uvm.sv uvmpy/

mv uvmpy picker_out_adder
mv uvmpy "$OUT_DIR"

cd picker_out_adder && make
cd "$OUT_DIR" && make
68 changes: 32 additions & 36 deletions example/Adder/release-vcs.sh
Original file line number Diff line number Diff line change
@@ -1,43 +1,39 @@
#!/bin/bash
set -e

rm -rf picker_out_adder/
./build/bin/picker export example/Adder/Adder.v --autobuild false --sim vcs -w Adder.fsdb --sname Adder --tdir picker_out_adder/ --sdir template $@
OUT_ROOT="${OUT_ROOT:-output}"
OUT_DIR="$(realpath -m "${OUT_ROOT}/Adder")"

rm -rf "$OUT_DIR"
./build/bin/picker export example/Adder/Adder.v --autobuild true --sim vcs -w Adder.fsdb --sname Adder --tdir "$OUT_DIR" --sdir template --coverage "$@"
# if python in $@, then it will generate python binding
if [[ $@ == *"python"* ]]; then
cp example/Adder/example.py picker_out_adder/
elif [[ $@ == *"java"* ]]; then
cp example/Adder/example.java picker_out_adder/Adder/java/
elif [[ $@ == *"scala"* ]]; then
cp example/Adder/example.scala picker_out_adder/Adder/scala/
elif [[ $@ == *"golang"* ]]; then
cp example/Adder/example.go picker_out_adder/Adder/golang/
if [[ $* == *"python"* ]]; then
cp example/Adder/example.py "$OUT_DIR"
elif [[ $* == *"java"* ]]; then
cp example/Adder/example.java "$OUT_DIR"
elif [[ $* == *"scala"* ]]; then
cp example/Adder/example.scala "$OUT_DIR"
elif [[ $* == *"golang"* ]]; then
cp example/Adder/example.go "$OUT_DIR"
elif [[ $* == *"lua"* ]]; then
cp example/Adder/example.lua "$OUT_DIR"
else
cp example/Adder/example.cpp picker_out_adder/Adder/cpp/
fi

# go to the Adder directory and make all
cd picker_out_adder/Adder && make EXAMPLE=ON

# go back to the root directory
cd ../

if [[ $@ != *"cpp"* ]]; then
echo "'cannot allocate memory in static TLS block'error for VCS is expected, please ignore it"
fi

if [[ $@ == *"python"* ]]; then
LD_PRELOAD=./Adder/libUTAdder.so python3 example.py
fi

if [[ $@ == *"scala"* ]]; then
LD_PRELOAD=./Adder/libUTAdder.so scala -cp ./Adder/UT_Adder-scala.jar:./Adder/xspcomm-scala.jar -ea com.ut.example
cp example/Adder/example.cpp "$OUT_DIR"
fi

if [[ $@ == *"java"* ]]; then
LD_PRELOAD=./Adder/libUTAdder.so java -cp ./Adder/UT_Adder-java.jar:./Adder/xspcomm-java.jar -ea com.ut.example
fi

if [[ $@ == *"golang"* ]]; then
LD_PRELOAD=./Adder/golang/src/UT_Adder/libUTAdder.so GO111MODULE=off GOPATH="`pwd`/Adder/golang" go build example.go
LD_PRELOAD=./Adder/golang/src/UT_Adder/libUTAdder.so GO111MODULE=off GOPATH="`pwd`/Adder/golang" ./example
cd "$OUT_DIR"

if [[ $* == *"python"* ]]; then
python3 example.py
elif [[ $* == *"java"* ]]; then
java -cp ./UT_Adder-java.jar:./xspcomm-java.jar -ea com.ut.example
elif [[ $* == *"scala"* ]]; then
scala -cp ./UT_Adder-scala.jar:./xspcomm-scala.jar -ea com.ut.example
elif [[ $* == *"golang"* ]]; then
GO111MODULE=off GOPATH="$(pwd)/golang" go build example.go
./example
elif [[ $* == *"lua"* ]]; then
LUA_PATH="./xspcomm/?.lua" lua example.lua
else
./UTAdder_example
fi
31 changes: 17 additions & 14 deletions example/Adder/release-verilator.sh
Original file line number Diff line number Diff line change
@@ -1,20 +1,23 @@
#!/bin/bash

rm -rf picker_out_adder/
./build/bin/picker export example/Adder/Adder.v --autobuild false -w Adder.fst --sname Adder --tdir picker_out_adder/Adder --sdir template $@
OUT_ROOT="${OUT_ROOT:-output}"
OUT_DIR="${OUT_ROOT}/Adder"

rm -rf "$OUT_DIR"
./build/bin/picker export example/Adder/Adder.v --autobuild false -w Adder.fst --sname Adder --tdir "$OUT_DIR" --sdir template "$@"
# if python in $@, then it will generate python binding
if [[ $@ == *"python"* ]]; then
cp example/Adder/example.py picker_out_adder/Adder/python/
elif [[ $@ == *"java"* ]]; then
cp example/Adder/example.java picker_out_adder/Adder/java/
elif [[ $@ == *"scala"* ]]; then
cp example/Adder/example.scala picker_out_adder/Adder/scala/
elif [[ $@ == *"golang"* ]]; then
cp example/Adder/example.go picker_out_adder/Adder/golang/
elif [[ $@ == *"lua"* ]]; then
cp example/Adder/example.lua picker_out_adder/Adder/lua/
if [[ $* == *"python"* ]]; then
cp example/Adder/example.py "$OUT_DIR/python/"
elif [[ $* == *"java"* ]]; then
cp example/Adder/example.java "$OUT_DIR/java/"
elif [[ $* == *"scala"* ]]; then
cp example/Adder/example.scala "$OUT_DIR/scala/"
elif [[ $* == *"golang"* ]]; then
cp example/Adder/example.go "$OUT_DIR/golang/"
elif [[ $* == *"lua"* ]]; then
cp example/Adder/example.lua "$OUT_DIR/lua/"
else
cp example/Adder/example.cpp picker_out_adder/Adder/cpp/
cp example/Adder/example.cpp "$OUT_DIR/cpp/"
fi

cd picker_out_adder/Adder && make EXAMPLE=ON
cd "$OUT_DIR" && make EXAMPLE=ON
13 changes: 8 additions & 5 deletions example/AdderMultiInstance/release-verilator.sh
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
#!/bin/bash

rm -rf picker_out_adder/
./build/bin/picker export example/AdderMultiInstance/Adder.v --autobuild false -w Adder.fst --sname Adder --tdir picker_out_adder --sdir template $@
OUT_ROOT="${OUT_ROOT:-output}"
OUT_DIR="${OUT_ROOT}/AdderMultiInstance"

rm -rf "$OUT_DIR"
./build/bin/picker export example/AdderMultiInstance/Adder.v --autobuild false -w Adder.fst --sname Adder --tdir "$OUT_DIR" --sdir template "$@"
# if python in $@, then it will generate python binding
if [[ $@ == *"python"* ]]; then
cp example/AdderMultiInstance/example.py picker_out_adder/python/
if [[ $* == *"python"* ]]; then
cp example/AdderMultiInstance/example.py "$OUT_DIR/python/"
else
echo "Only example.py find! Use --lang python"
exit -1
fi

cd picker_out_adder && make EXAMPLE=ON
cd "$OUT_DIR" && make EXAMPLE=ON
7 changes: 5 additions & 2 deletions example/Cache/release-verilator.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@

# This script is used to release the XDummyCache library.

OUT_ROOT="${OUT_ROOT:-output}"
OUT_DIR="${OUT_ROOT}/Cache"

# run cache codegen
rm -rf picker_out/Cache
./build/bin/picker export --autobuild true example/Cache/Cache.v --fs example/Cache/Test.v -w cache.vcd --sim verilator --tdir ./picker_out/ $@
rm -rf "$OUT_DIR"
./build/bin/picker export --autobuild true example/Cache/Cache.v --fs example/Cache/Test.v -w cache.vcd --sim verilator --tdir "${OUT_ROOT}/" "$@"

# --autobuild true: auto build and test
40 changes: 34 additions & 6 deletions example/CacheSignalCFG/release-vcs.sh
Original file line number Diff line number Diff line change
@@ -1,11 +1,39 @@
#!/bin/bash
set -e

rm -rf picker_out_Cache/
./build/bin/picker export example/Cache/Cache.v --autobuild true --sim vcs -w Cache.fsdb --sname Cache --tdir picker_out_Cache --sdir template $@
OUT_ROOT="${OUT_ROOT:-output}"
OUT_DIR="$(realpath -m "${OUT_ROOT}/CacheSignalCFG")"

cd picker_out_Cache && make EXAMPLE=ON
rm -rf "$OUT_DIR"
./build/bin/picker export example/Cache/Cache.v --autobuild true --sim vcs -w Cache.fsdb --sname Cache --tdir "$OUT_DIR" --sdir template "$@"

if [[ $@ == *"python"* ]]; then
echo "'cannot allocate memory in static TLS block'error for VCS is expected, please ignore it"
LD_PRELOAD=./libUTCache.so python3 example.py
if [[ $* == *"python"* ]]; then
cp example/CacheSignalCFG/example.py "$OUT_DIR"
elif [[ $* == *"java"* ]]; then
cp example/CacheSignalCFG/example.java "$OUT_DIR"
elif [[ $* == *"scala"* ]]; then
cp example/CacheSignalCFG/example.scala "$OUT_DIR"
elif [[ $* == *"golang"* ]]; then
cp example/CacheSignalCFG/example.go "$OUT_DIR"
elif [[ $* == *"lua"* ]]; then
cp example/CacheSignalCFG/example.lua "$OUT_DIR"
else
cp example/CacheSignalCFG/example.cpp "$OUT_DIR"
fi

cd "$OUT_DIR"

if [[ $* == *"python"* ]]; then
python3 example.py
elif [[ $* == *"java"* ]]; then
java -cp ./UT_Cache-java.jar:./xspcomm-java.jar -ea com.ut.example
elif [[ $* == *"scala"* ]]; then
scala -cp ./UT_Cache-scala.jar:./xspcomm-scala.jar -ea com.ut.example
elif [[ $* == *"golang"* ]]; then
GO111MODULE=off GOPATH="$(pwd)/golang" go build example.go
./example
elif [[ $* == *"lua"* ]]; then
LUA_PATH="./xspcomm/?.lua" lua example.lua
else
./UTCache_example
fi
33 changes: 18 additions & 15 deletions example/CacheSignalCFG/release-verilator.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,33 @@

# This script is used to release the XDummyCache library.

OUT_ROOT="${OUT_ROOT:-output}"
OUT_DIR="${OUT_ROOT}/CacheSignalCFG"

# run cache codegen
rm -rf picker_out/CacheCFG
rm -rf "$OUT_DIR"
# Use file list and explicit sname to locate top module in list
./build/bin/picker export --autobuild false --rw mem_direct \
--sname Cache \
--tname CacheCFG \
--tname CacheSignalCFG \
--fs example/CacheSignalCFG/Cache.txt \
-w cache.vcd --sim verilator --tdir ./picker_out/ $@
-w cache.vcd --sim verilator --tdir "${OUT_ROOT}/" "$@"

if [[ $@ == *"python"* ]]; then
cp example/CacheSignalCFG/example.py picker_out/CacheCFG/python/
elif [[ $@ == *"java"* ]]; then
cp example/CacheSignalCFG/example.java picker_out/CacheCFG/java/
elif [[ $@ == *"scala"* ]]; then
cp example/CacheSignalCFG/example.scala picker_out/CacheCFG/scala/
elif [[ $@ == *"golang"* ]]; then
cp example/CacheSignalCFG/example.go picker_out/CacheCFG/golang/
elif [[ $@ == *"lua"* ]]; then
cp example/CacheSignalCFG/example.lua picker_out/CacheCFG/lua/
if [[ $* == *"python"* ]]; then
cp example/CacheSignalCFG/example.py "$OUT_DIR/python/"
elif [[ $* == *"java"* ]]; then
cp example/CacheSignalCFG/example.java "$OUT_DIR/java/"
elif [[ $* == *"scala"* ]]; then
cp example/CacheSignalCFG/example.scala "$OUT_DIR/scala/"
elif [[ $* == *"golang"* ]]; then
cp example/CacheSignalCFG/example.go "$OUT_DIR/golang/"
elif [[ $* == *"lua"* ]]; then
cp example/CacheSignalCFG/example.lua "$OUT_DIR/lua/"
else
cp example/CacheSignalCFG/example.cpp picker_out/CacheCFG/cpp/
cp example/CacheSignalCFG/example.cpp "$OUT_DIR/cpp/"
fi

cd picker_out/CacheCFG && make EXAMPLE=ON
cd "$OUT_DIR" && make EXAMPLE=ON


# --autobuild true: auto build and test
Loading
Loading