You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

形式验证求解器对子模块的激励方式及dblpipe工程相关问题咨询

形式验证求解器的激励逻辑

形式验证求解器不会独立给子模块生成激励,所有子模块的输入完全由你指定的顶层模块的内部连接关系驱动,求解器仅会对顶层模块的输入端口做约束/随机化,子模块的输入跟随顶层连接自动赋值。

相关问题1 子模块时钟与顶层时钟不同步

你遇到的现象是VHDL代码在SymbiYosys工具链中的层次路径兼容性问题导致的:

  • 你设计里one和two的i_clk已经和顶层i_clk硬连,理论上不可能出现跳变不一致的情况,trace里的偏差是波形查看器的路径解析错误,不是真实的电路激励行为
  • 你写的assume约束不生效,是因为SymbiYosys的VHDL前端对跨层次的信号路径引用支持不好,约束没有实际作用
  • i_ce信号显示同步是因为它是顶层输入端口,路径解析逻辑更简单,没有匹配错误
    如果要解决这个问题,可以换用该练习的Verilog版本做验证,Verilog的层次路径引用在SymbiYosys中支持更完善。

相关问题2 选择assert而非assume的原因

assume和assert的作用有本质区别:

  • assume是给求解器指定输入约束,告诉求解器“这个条件我已经保证一定会满足,你不需要验证,直接把它当成前提条件生成输入即可”,如果这里用assume(one.sreg == two.sreg),相当于你直接人为排除了所有两个寄存器不等的情况,哪怕设计本身有bug,求解器也不会发现,完全失去验证意义
  • assert是要求求解器证明的特性:你的设计里两个LFSR的所有输入、初始值、配置参数完全一致,理论上所有时刻sreg都应该相等,这是设计本身要实现的特性,所以要用assert来验证它成立,只有这个断言成立,才能推导出最终的o_data == 1'b0断言成立。

相关问题3 wrapper模块的i_data信号问题

你遇到的问题是端口定义的笔误导致的:

  • 你写的dblpipe_vhd模块首先漏了i_data的端口声明,还错误的把o_data声明为input类型,导致bind的时候无法正确匹配顶层的i_data信号
  • 你即使后续添加了i_data端口,如果没有修正端口方向、也没有对应更新bind的连接逻辑,求解器会默认把未连接的输入设为恒值,所以trace里显示恒0
    修正端口定义为下述格式即可正常查看i_data波形:
module dblpipe_vhd(i_clk, i_ce, i_data, o_data);
    input   wire    i_clk;
    input   wire    i_ce;
    input   wire    i_data;
    output  wire    o_data;

后续如果需要让i_data生成跳变的激励,可以额外增加i_ce的约束,让求解器生成更丰富的输入场景。


内容的提问来源于stack exchange,提问作者Stone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:00:05