Public release for VeloCT / H-Houdini. This project focuses on invariant learning for hardware verification. For a detailed overview, refer to our ASPLOS'25 publication.
Before cloning, ensure that you have Git LFS installed:
# Install Git LFS
# Ubuntu/Debian
sudo apt install git-lfs
# macOS
brew install git-lfs
git lfs installThen, clone the repository:
git clone https://github.com/FPSG-UIUC/veloct.git
cd veloct-
Install and run Redis:
Redis is required for distributed processing. Install and start it using:# Ubuntu/Debian sudo apt update && sudo apt install redis sudo systemctl enable redis-server --now # macOS brew install redis brew services start redis
-
Install and run MongoDB (optional, required for debugging):
# Ubuntu/Debian sudo apt install mongodb sudo systemctl enable mongod --now # macOS brew tap mongodb/brew brew install mongodb-community@6.0 brew services start mongodb-community@6.0
NOTE: Ensure MongoDB is running without errors:
sudo systemctl status mongod # Ubuntu brew services list # macOS
This project uses Poetry for dependency management. Ensure you have it installed:
# Ubuntu/Debian
curl -sSL https://install.python-poetry.org | python3 -
# macOS
brew install poetryThen, create a new virtual environment and install dependencies:
poetry installTo start invariant learning:
python3 -m learning.learn_inv_distributed learn-invariantCurrent targets: smallboom,mediumboom,largeboom,megaboom
- First, checkout the boom branch:
git checkout boom - Next, prepare target:
./prepare_target.sh <target>; The target has to be one of above target strings. - Run the same command as as before
By default, logging is verbose, which may slow down invariant learning. To reduce log verbosity, set the log level to INFO:
LOGURU_LEVEL="INFO" python3 -m learning.learn_inv_distributed learn-invariantTo print the learned invariant:
python3 -m learning.learn_inv_distributed get-invariantFor additional options:
python3 -m learning.learn_inv_distributed --help