将我的 pyverilog AST 转换为 Z3 求解器的输入
Convert my pyverilog AST to input for Z3 solver
我已将我的 verilog 文件转换为 AST(抽象语法树),但还有外部约束,例如电路的输出和 AST 将提供给 Z3/SMT 求解器,它应该为我们提供输入电路,但我不知道如何将 AST 作为 Z3/SMT 求解器的输入。
提前致谢。
这样的任务通常相当于遍历您的 AST 并象征性地执行它,并为 SMT 求解器生成跟踪。 说起来容易做起来难,不幸的是:进行这种翻译有很多方面,即使完全完成,求解器验证相应的属性也远非易事。对于完整的 Verilog,您基本上必须实现一个可以处理符号值的 Verilog 模拟器。虽然这可能是一项非常大的任务,但如果您的输入 "simple" 足够,也许您可以使用更小的功能集。在不了解 Verilog 的结构的情况下,很难说什么。
这篇由 Z3 的两位主要作者(Nikolaj 和 Leonardo)撰写的 paper 提供了对该方法的很好的概述。这是一本非常棒的读物,包含许多有用的参考资料。从那开始至少可以让您了解所涉及的内容。
我应该补充一点,Verilog 设计的验证是一个具有工业应用的主题,并且有供应商支持的工具(不便宜!)在 Verilog 级别进行验证。 Jasper Gold tool from Cadence is one such example. Synopsys也有类似的工具。
看来您对测试用例生成很感兴趣。这对应于编写一个典型的 "cover" 属性,并读取导致在这种设置中出现掩护场景的主要输入的值。此类属性通常以此类工具可以理解的 SVA 格式编写。
我已将我的 verilog 文件转换为 AST(抽象语法树),但还有外部约束,例如电路的输出和 AST 将提供给 Z3/SMT 求解器,它应该为我们提供输入电路,但我不知道如何将 AST 作为 Z3/SMT 求解器的输入。
提前致谢。
这样的任务通常相当于遍历您的 AST 并象征性地执行它,并为 SMT 求解器生成跟踪。 说起来容易做起来难,不幸的是:进行这种翻译有很多方面,即使完全完成,求解器验证相应的属性也远非易事。对于完整的 Verilog,您基本上必须实现一个可以处理符号值的 Verilog 模拟器。虽然这可能是一项非常大的任务,但如果您的输入 "simple" 足够,也许您可以使用更小的功能集。在不了解 Verilog 的结构的情况下,很难说什么。
这篇由 Z3 的两位主要作者(Nikolaj 和 Leonardo)撰写的 paper 提供了对该方法的很好的概述。这是一本非常棒的读物,包含许多有用的参考资料。从那开始至少可以让您了解所涉及的内容。
我应该补充一点,Verilog 设计的验证是一个具有工业应用的主题,并且有供应商支持的工具(不便宜!)在 Verilog 级别进行验证。 Jasper Gold tool from Cadence is one such example. Synopsys也有类似的工具。
看来您对测试用例生成很感兴趣。这对应于编写一个典型的 "cover" 属性,并读取导致在这种设置中出现掩护场景的主要输入的值。此类属性通常以此类工具可以理解的 SVA 格式编写。