Verilated model didn‘t converge报错原因及解决

2023-05-16

还留着你的回忆,分不清南北东西
我真的不想从此迷失在这幻境
----《迷失幻境》

想必你急于知道原因,不想听笔者解决问题的过程,所以我先放结论,再说我发现的过程。

1.错误原因

一句话概括,根本原因是:
有一个量在极快的变化

verilog官网原图:
在这里插入图片描述

verilog官网上的原文是:

This is because the signals keep toggling even with out time passing. Thus to prevent an infinite loop, the Verilated executable gives the DIDNOTCONVERGE error.

翻译:这是因为信号在不停的变换即使时间没有流逝。所以,为了防止无限循环,verilog可执行文件给出了DIDNOTCONVERGE 错误。

To debug this, first review any UNOPT or UNOPTFLAT warnings that were ignored. Though typically it is safe to ignore UNOPTFLAT (at a performance cost), at the time of issuing a UNOPTFLAT Verilator did not know if the logic would eventually converge and assumed it would.

翻译:若要对此进行调试,请首先查看忽略的任何UNOPT或UNOPTFLAT警告。尽管通常忽略UNOPTFLAT(以性能为代价)是安全的,但在发布UNOPTFLAT时,验证器不知道逻辑是否最终会收敛,并假设它会收敛。

2. 解决方案

官网方案:
在这里插入图片描述
run Verilator with --prof-cfuncs -CFLAGS -DVL_DEBUG. Rerun the test. Now just before the convergence error you should see additional output similar to this

翻译:使用–prof-cfuncs-CFLAGS-DVL_DEBUG运行Verilator。重新运行测试。现在,就在收敛错误之前,您应该会看到类似的输出

分析:例如你编译.v的命令是

verilator -Wno-fatal top.v main.cpp --top-module top --cc --trace --exe

则添上 --prof-cfuncs -CFLAGS -DVL_DEBUG即可,即

verilator -Wno-fatal top.v main.cpp --top-module top --cc --trace --exe --prof-cfuncs -CFLAGS -DVL_DEBUG

再次运行,会发现有类似于这样的出错:
错误
注意看,其指明了是top模块的变量b出的问题,并且是在第16行
根据这个修改就可以了。

3.笔者的解决过程

3.1 笔者的问题背景

我需要写一个ALU,ALU当然需要有减法,而且我的ALU输入是补码。
众所周知,补码的减法是

A - B = A + ((~B) + 1)

所以我verilog是这么写的

b = ~b + 1;
ans = a + b;

这样写看起来没什么问题(实际上就是没有问题)
问题出在我的仿真上

3.2 问题发现与解决

我测试代码的方法是,给a、b赋初值,所以每次测试只需要运行一次,也没什么敏感变量,所以always的括号里面是空的,代码如下

reg [2:0] command = 3'b001;
reg [3:0] a = 3'b1001;
reg [3:0] b = 3'b0001;

    always @() begin
        case (command)
            3'b000:begin
                 {temp_overflow_flag, temp_ans} = a + b;
            end
            3'b001:begin
                b = ~b + 1;
                 {temp_overflow_flag, temp_ans} = a + b;
            end
·············下略

这样会导致always无间隙的无限执行,所以b被无限执行取反操作,导致verilog以为出问题了,报了这个错

然后我加了个clk,敏感变量设置成posedge clk就可以了

因为笔者是新手,并不知道always括号里面空着会这样,所以犯了这样愚蠢的错误,尤其是不读入时钟,确实很蠢。

4.后记

出现这个问题的直接原因就是变量的值极其快速的改变
但是根本原因必然各不相同,我是因为时钟没设置,你的必须对症下药,这个变量是在哪里改变的,为什么会被快速改变,就可以解决问题了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Verilated model didn‘t converge报错原因及解决 的相关文章

  • 如何使用 Django 创建三重联接表

    使用 Django 的内置模型 如何在三个模型之间创建三重连接 例如 用户 角色和事件是模型 用户有很多角色 角色有很多用户 多对多 事件有许多用户 用户也有许多事件 多对多 但对于任何给定的事件 任何用户可能只有一个角色 如何在模型中表示
  • 如何在 UML 中将属性显示为“只读”?

    我想用图表描述 API 的一些模型 是否有标准如何将属性标记为readonly 这些属性由系统设置 API 使用者无法修改 目前我滥用类图符号private and public属性 但我对此并不满意 谢谢你的想法 通常 当您进行接口编码时
  • 递归包含所有模型子目录

    如何递归加载 models 和 lib 目录中的所有目录 在 application rb 中 我有以下几行 config autoload paths Dir Rails root join app models config autol
  • 模型与服务解耦:如果我的模型需要服务怎么办?

    服务层应该位于模型层之上 因此 模型不应该调用服务 然而 我面临着我需要的情况 例如 interface Component getResult class Number implements Component private value
  • Rails 验证虚拟属性

    我这个型号 class Bunny lt ActiveRecord Base attr accessor number validates presence of number validates numericality of numbe
  • 使用其他自变量的所有可能组合获取许多模型中特定变量的 p 值

    我正在尝试使用一组自变量的所有可能组合来运行许多回归模型 在此示例中 我对以下系数感兴趣cyl与列出的其他变量的所有可能组合xlist df lt mtcars md lt mpg cyl xlist lt c disp hp am n l
  • Laravel 模型:模型属性在哪里?

    我来自 Visual Studio Entity Framework 背景 并尝试在 Laravel Eloquent 中找到等效功能 在 EF 和 Visual Studio 中 我们向应用程序添加一个新模型 并只告诉它我们现有的数据库
  • 如何将 tf.metrics.__ 与估计器模型预测输出一起使用

    我尝试遵循tensorflow API 1 4文档来实现我在学习过程中所需要的 我现在在这个阶段 可以生成一个预测对象 例如 classifier tf estimator DNNClassifier feature columns fea
  • 如何在 Ruby on Rails 中实现 Active Record 继承?

    如何实现活动记录的继承 例如 我想要一个动物类 狗类和猫类 模型和数据库表映射如何 Rails 支持单表继承 来自AR docs http api rubyonrails org classes ActiveRecord Base html
  • Rails 使用缩写对模型进行非正统命名

    在我正在构建的应用程序中 我使用以下命令在数据库中存储 XML 文件acts as tree协会 我想给班级起个名字XMLElement但这会偏离轨道 因为大写是非标准的 它正在寻找XMLElement从文件名xml element rb
  • 为什么有两个类:视图模型和域模型?

    我知道使用域模型作为视图模型可能很糟糕 如果我的域模型有一个名为 IsAdmin 的属性 并且我有一个创建控制器操作来创建用户 那么有人可以更改我的表单并使其 POST IsAdmin true 表单值 即使我没有在视图中公开这样的文本字段
  • 模型中的 Ruby on Rails 增量计数器

    我正在尝试从另一个模型增加我的用户表中的计数器 class Count lt ActiveRecord Base belongs to user after create update count def update count user
  • 如何在 django 中指定索引类型? (btree 和 hash 对比等)

    就像标题所说 如何在 django 模型中的字段上指定我想要的索引类型 class Person age models IntegerField db index True 现在怎么办 我如何确保它是一个btree index而不是一个ha
  • 反转博客条目和评论的显示顺序,Ruby on Rails

    我是 Rails 新手 所以可以在这里使用一些帮助 我已经按照几个教程创建了一个博客 其中包含评论 甚至还有一些 AJAX 花哨的内容 但我仍然坚持一些我希望很简单的事情 博客和评论的默认显示是首先列出最旧的 我如何反转它以在顶部显示最新条
  • Rails 4 模型子文件夹

    我在 app models request book 文件夹中创建了模型 但 Book Request Status table name 返回表名称 statuses book request statuses 是正确的表名称 如何获得正
  • Java 的 C++ 解析器/模型

    我想知道是否有人知道可以在 Java 中以编程方式使用的现有 C 解析器 代码模型 我正在寻找类似于 Eclipse CDT 的东西 它可以用作 Java 的库 并且不依赖于 Eclipse 提前致谢 您不想构建自己的 C 解析器 它会杀了
  • Rails:是否可以向 has_and_belongs_to_many 关联添加额外的属性?

    我的意思是 如果我有两个模型 通过 has and belongs to many 关联连接 我可以在每个关联的连接表中存储其他数据吗 也就是说 额外的数据不会成为任一表中单个记录的一部分 而是它们之间的连接 我的实际模型如下 class
  • 如何使用SqlAlchemy通过id查询数据库?

    我需要通过其查询 SQLAlchemy 数据库id类似的东西 User query filter by username peter 但对于身份证 我该怎么做呢 通过 Google 和 SO 搜索没有帮助 查询有一个获取函数 https d
  • 使用ActiveRecord,有没有办法在after_update期间获取记录的旧值

    使用一个简单的示例进行设置 我有 1 张桌子 Totals 保存了总和amount第二个表中每条记录的列 Things When a thing amount更新后 我想简单地将旧值和新值之间的差异添加到total sum 现在我正在减去s
  • Keras 中的 model.fit() 和 model.evaluate() 有什么区别?

    我使用 Keras 和 TensorFlow 后端来训练 CNN 模型 之间是什么model fit and model evaluate 我应该最好使用哪一种 我在用model fit 截至目前 我知道的用处model fit and m

随机推荐

  • LaTex 排版相关记录--1 参考文献排版

    找到latex代码中的 bibligraphystyle xff0c 然后根据下面的各种需求进行替换 bibliographystyle unsrt 样式同plain xff0c 只是按照引用的先后排序 xff0c 参考文献会根据在正文中引
  • 使用rke构建企业生产k8s,安装kubectl客户端

    一 使用rke构建企业生产k8s xff0c 安装kubectl客户端 1 安装kubectl客户端工具 span class token comment wget https storage googleapis com kubernet
  • 保持pppoe不掉线

    对于无极网络的VPS 修改 etc ppp pppoe server options 这个文件里面的两个参数 默认 xff1a lcp echo interval 1 发送间隔秒 lcp echo failure 5 5次未响应断开 因为o
  • Linux环境编程06

    目录 Linux环境编程之进程管理一 进程的基本概念二 创建进程三 进程的正常退出 Linux环境编程之进程管理 一 进程的基本概念 进程与程序 程序是存储在磁盘上的可执行文件 xff0c 程序被加载到内存中开始运行时叫做进程 一个程序可以
  • 区间最大平均值

    题目链接 xff1a https www luogu com cn problem P1404 题目描述 xff1a 给一个长度为 n 的数列 xff0c 我们需要找出该数列的一个子串 xff0c 使得子串平均数最大化 xff0c 并且子串
  • 输出 0~N 内的素数 ( C++ )

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • 快读模板 ( C++ )

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • Java正整数分解质因数

    leetcode 2 Java正整数分解质因数 1 题目 xff1a 将一个正整数分解质因数 例如 xff1a 输入 90 打印出 90 61 233 5 2 题目解析 xff1a 先将数m从2开始整除 xff0c 如果能被2整除 xff0
  • you-get使用教程

    you get爬虫 xff0c 依赖于Python3 10 xff0c 可以爬取网页无法下载的视频文件 xff0c 具体步骤如下 xff1a 1 xff0c 下载Python3 10无脑下一步安装 2 xff0c 新建一个空白文件夹 xff
  • Windows如何自定义右键新建菜单栏

    目录 右键新建菜单的实现原理在右键新建菜单中新增项方法一可能出现的问题 方法二编辑右键新建菜单的图标 修改右键新建菜单栏的顺序 右键新建菜单的实现原理 参考文章 修改 win10 右键 新建 菜单 xff08 原理 两种方法及注意事项 xf
  • Centos 8升级至Centos 8 Stream

    文章目录 一 背景 xff1a 二 分析 xff1a 三 升级步骤 xff1a 四 成功安装 openstack 软件仓库参考链接 xff1a 一 背景 xff1a 因使用华为云ecs部署 openstack yoga 版本过程中 xff0
  • Ceph OSD为DOWN时修复

    本文所使用Ceph版本为luminous 不同版本删除OSD基本操作相同 xff09 xff0c 当出现Ceph OSD为down的情况时 xff0c 可以通过以下方法解决 xff08 假设ceph admin节点OSD 1 Down xf
  • 【Anaconda创建虚拟环境】报错及解决办法

    Q1 CondaHTTPError HTTP 000 CONNECTION FAILED for url 错误原因 xff1a 下载网速过慢 xff0c 时间过长 xff0c 自动断开 解决方法 xff1a 在下载命令前加入 conda c
  • 二叉树的绘制

    目录 一 知乎方法 二 动手实践 DOT 语言 无向图 有向图 绘制二叉树 设置属性 如何绘制优美的二叉树 一 知乎方法 知乎上的大佬提供了一系列画图的方法 xff0c 感兴趣的朋友可以自行去看看 用 Graphviz 绘制一棵漂亮的二叉树
  • 修改CPU的调频策略

    cat proc cpuinfo 查看CPU信息 CPU的调频策略修改 xff0c scaling governor xff1a governor 调频 策略 xff0c Linux 内核一共有 5 中调频策略 Performance xf
  • 一文看懂map、odom、base_link、laser之间的tf关系

    这三者之间的关系到底是怎样的 xff1f 尤其是map坐标系到odom坐标系之间的变换 xff0c 到底是有什么意义呢 xff1f 我当时被这个问题也是困扰了很久 现在经过实践终于有机会记录一下拙见 xff0c 如有错误 xff0c 还请指
  • VTK库cmake编译时找不到Qt5UiPlugin_DIR和QT5Sql_DIR

    ubuntu使用cmake gui编译VTK时 xff0c Qt5UiPlugin DIR和QT5Sql DIR是红的 xff0c 怎么办 xff1f 答 xff1a 安装libqt5x11extras5 dev和qt5 default两个
  • 超前进位加法器原理与递推式超详细推导+verilog实现与测试

    当记忆的线缠绕过往支离破碎 xff0c 是慌乱占据了心扉 寂寞沙洲冷 超前进位加法器原理 1 一位二进制的加法 首先考虑两个1位二进制相加 a 43 b xff0c 不考虑上一级的进位 xff0c 0和1简单相加 xff0c 即使是三岁小孩
  • 一生一芯 算术逻辑部件 ALU verilog浅析与实现

    仙歌音 xff0c 玉笛灵 xff0c 酒盏玉露清 剑舞轻 xff0c 潇洒过白袍影 谪仙 一生一芯项目 xff0c 预学习部分 xff0c 数电实验学习记录 xff0c 笔者电子寄术挂科 xff0c 基础知识甚是不熟 xff0c 故文中可
  • Verilated model didn‘t converge报错原因及解决

    还留着你的回忆 xff0c 分不清南北东西 我真的不想从此迷失在这幻境 迷失幻境 想必你急于知道原因 xff0c 不想听笔者解决问题的过程 xff0c 所以我先放结论 xff0c 再说我发现的过程 1 错误原因 一句话概括 xff0c 根本