if 语句导致 Verilog 中的锁存推断?

2024-01-30

我正在编写用于合成算法的 Verilog 代码,我对哪些情况可能导致推断锁存器有点困惑。下面是这样的一段代码,虽然它在模拟中工作得很好,但我担心它可能会导致硬件问题。

always@(b1 or b2)

.....
// b1_map,b2_map,m1_map & m2_map are derived from combinational functions using b1 & b2
.....

if(b1_map<=20 && m2_map<=20 && b1_map>=0 && m2_map>=0)



begin
accumulator1[b1_map][m2_map]= accumulator1[b1_map][m2_map] + 1;
end

if(b2_map<=20 && m2_map<=20 && b2_map>=0 && m2_map>=0)

begin
accumulator2[b2_map][m2_map]= accumulator2[b2_map][m2_map] + 1;
end

//accumulator1  & accumulator2 are 2d registers mapped like 2d arrays

因此,在这种情况下,我希望仅当数据在指定限制内​​时才映射数据。是否会因为没有定义“其他”场景而推断出闩锁?我没有添加 else 语句,因为如果数据不在限制范围内,我不想对它做任何事情。


如果你正确地编写了 if 语句,那就没问题了。当 if 语句中存在不更新一个或多个输出的路径时,就会生成锁存器。像下面这样的代码将生成一个锁存器:

always @* begin
    if (a) begin
        b <= c & d;
        e <= f;
    end else begin
        b <= c | d;
    end
end

请注意,仅当 a 为真时才对 e 进行赋值?这需要一个锁存器才能正确实现。

生成锁存器的另一种可能性是当敏感度列表不包含代码中使用的信号时。

always @(a) begin
    if (a) begin
        b <= c & d;
    end else begin
        b <= c | d;
    end
end

此代码将在 c 和 d 或 b 上生成锁存器,因为它只允许在 a 更改时更新 b。

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

if 语句导致 Verilog 中的锁存推断? 的相关文章

  • 使用数据流模型的T触发器

    我正在尝试模拟 t flipflop 的工作 timescale 1ns 1ps module t flipflop input t input clk input clear output q output qbar wire sbar
  • 为什么这个 verilog 关系语句返回 true?

    我有一条名为 sin hall2 的 9 位签名线 该语句返回 true sin hall2 8 0 gt 9 d1 当我查看模拟时 sin hall2 169 我假设这是 verilog 处理比较负数的方式 但我做错了什么 当我执行 si
  • 在 C 中操作 80 位数据类型

    我正在用 C 实现一些加密算法 其中涉及 80 位密钥 特定操作涉及将密钥旋转移位 x 个位数 我已经尝试过 long double 类型 如果我没记错的话 它是 80 位 但这不适用于位移运算符 我能想到的唯一替代方案是使用 10 个元素
  • Verilog 中总是后面跟着 #(...) pound 是什么意思?

    在一个简单的时钟生成器示例中 我看到以下代码 always cycle 2 clk clk 我以前总是见过 但没见过井号 我试图在文档中找到它 但我所能找到的只是一些对 实值端口 的引用 没有进一步的阐述 这是一个延迟操作 它本质上只是读取
  • 使用 VHDL 实例化 FPGA 中的 RAM

    我试图按照中的指导实现双端口 RAM这篇优秀的博文 http danstrother com 2010 09 11 inferring rams in fpgas 然而 ModelSim 在编译时给出以下警告 Warning fifo ra
  • 用于 Verilog 或 SystemVerilog 的 TAP(测试任何协议)模块

    是否有 TAP 测试任何协议 http testanything org Verilog 的实现 那就太好了 因为这样我就可以使用证明来自动检查我的结果 更新 10 9 09 有人问为什么不使用断言 部分 TAP 为我提供了一些很好的报告
  • 同时读取和写入寄存器

    我计划在 FPGA 上用 VHDL 设计一个类似 MIPS 的 CPU CPU 将具有经典的五级管道 没有转发和危险预防 在计算机体系结构课程中 我了解到第一个 MIPS CPU 用于在时钟上升沿读取寄存器文件并在时钟下降沿写入 我使用的F
  • 如何在RTL中使用时钟门控?

    我正在对一些时钟进行门控latch以及我设计中的逻辑 我在综合和布局布线方面没有太多经验 在 RTL 中实现时钟门控的正确方法是什么 示例1 always comb begin gated clk clk latch update en e
  • 使用 Verilator 和 VPI 读取寄存器数组

    所以我在我的verilog中定义了以下寄存器 reg 31 0 register mem 0 15 verilator public 我的目标是从我的 verilator c 代码中读取存储在其中的 16 个值中的每一个 我发现有关 VPI
  • Verilog:添加寄存器的各个位(组合逻辑,寄存器宽度可参数化)

    我正在尝试想出一种方法来添加寄存器的各个位 例如 if regA 111000 then regB 3 位的总和regA 1 Verilog或SystemVerilog中是否有可以直接使用的可综合函数 运算符来执行此操作 如果不是 那么问题
  • 将枚举转换为逻辑

    考虑以下模块声明 module DFF d q CLK RESET parameter W 2 input W 1 0 d input CLK input RESET output logic W 1 0 q endmodule 当 d 和
  • UIO 设备上的 mmap EINVAL 错误

    在尝试使用 UIO 而不是直接映射后 我在 Xilinx Zynq 上映射物理内存时遇到问题 dev mem 虽然计划是以普通用户身份运行应用程序 而不是root这仍在运行root 显然 第一个映射成功 其余映射到同一个文件描述符12 de
  • verilog 中的“<<”运算符

    我有一个verilog代码 其中有一行如下 parameter ADDR WIDTH 8 parameter RAM DEPTH 1 lt lt ADDR WIDTH 这里将存储什么RAM DEPTH以及什么是 lt lt 操作员在这里做
  • Verilog 中的“net”代表什么?

    我刚刚开始学习Verilog 据我了解 Verilog有net数据类型 什么是net代表 网络就是这样一种数据类型 您不使用它来存储值 它们代表物理连接 您可以将线路视为一种网络数据类型 你可以去网上看看更多here http www ee
  • FPGA 有哪些实际应用?

    我对我的程序为一个小型七段显示器提供动力感到非常兴奋 但是当我向不在现场的人展示它时 他们总是说 那么你能用它做什么 我永远无法给他们一个简洁的答案 谁能帮我吗 第一 它们不需要具有易失性存储器 事实上 大厂商 Xilinx Altera
  • 始终块中的 Veriloggenerate/genvar

    我试图让一个模块通过 ISE 12 4 中的语法检查 但它给了我一个我不明白的错误 首先是代码片段 parameter ROWBITS 4 reg ROWBITS 1 0 temp genvar c generate always pose
  • 如何从 Spartan 6 写入 Nexys 3 FPGA 板上的 Micron 外部蜂窝 RAM?

    我到处都查过了 数据表 Xilinx 网站 digilent 等等 但什么也没找到 我能够使用 Adept 工具来验证我的蜂窝 RAM 是否正常运行 但我找不到任何库存 VHDL 代码作为控制器来写入数据和从中读取数据 帮助 找到了此链接
  • verilog 中的案例陈述

    我遇到了优先级编码器设计 并找到了一种使用 case 语句来实现它的新方法 唯一令人困惑的是 case语句是否优先考虑case 例子 case 1 b1 A 3 Y lt 4 b1000 A 2 Y lt 4 b0100 A 1 Y lt
  • reg 声明中的位顺序

    如果我需要使用 4 个 8 位数字 我会声明以下 reg reg 7 0 numbers 3 0 我对第一个和第二个声明 7 0 和 3 0 之间的区别感到很困惑 他们应该按什么顺序来 第一个是保留数字的大小 而第二个是保留数字的数量 还是
  • 系统 verilog 中没有类型的输入

    我在一个系统 verilog 代码的输入和输出的示例中遇到过module没有说明它们的类型 例如logic wire module mat to stream input 2 0 2 0 2 0 a b input newdata inpu

随机推荐

  • 降落伞分段错误 - pygame 到 py2exe

    我正在使用 GUI2Exe 将我的 python pygame 游戏编译为 exe 我的字体模块有问题 使用 python 2 7 和 GUI2Exe 中的 py2exe 选项 我已经将 python pygame 和 py2exe 更新为
  • Chrome 的 colspan 和 border 错误?

    在下面的示例中 右侧单元格的顶部有一个边框 它只出现在 Chrome 中 是 Chrome 的 bug 吗 HTML CSS html body height 100 table border collapse collapse width
  • 在 Flutter 中重新发送 OTP 代码 Firebase 电话身份验证

    这可能是重复的 但任何其他线程都没有为我提供正确的答案 有关于 android 原生语言的答案 但没有关于 Flutter dart 的答案 我有以下有效方法 但如果我想将 OTP 重新发送到用户电话号码 我该怎么做 只需一个简单的示例代码
  • java jre 7u45 破坏了 classloader.getResources()?

    我有代码迭代 classLoader getResources META INF MANIFEST MF 的结果以返回类路径上的 jar 列表 从 1 6 0 18 一直到 1 7 0 40 这都工作得很好 现在 1 7 0 45 通过显示
  • EF Core Fluent API 配置防止 TPC 继承

    我有相互继承的模型 但我正在努力让流畅的 api 配置按照我想要的方式运行 假设我有一个基类 它定义了一些核心属性 public class Entity public int Id get set public string Title
  • 如何设置 Azure Devops 来构建 Devexpress XAF-XPO 项目?

    我想在 Azure Devops 中为 XAP 移动应用程序设置持续集成和部署 为了获得 CI CD 我需要设置 Azure Pipeline 来安装正确的包 文档中有一些信息托管您自己的 NuGet 源 https learn micro
  • 互换使用 std::string 和 QString

    我在我正在开发的图形和 GUI 组件软件系统中广泛使用 Qt 然而 对于大多数内部算法和数据处理来说 Qt 发挥的作用较小 我经常会遇到从 std string 转换为 QString 的需要 反之亦然 我的倾向是尽可能使用 std str
  • Git 元数据 - 有没有办法添加独立于每个分支的 git 元数据?

    最终目标 我想要由 Git 跟踪的文件 但让这些文件成为所有分支的版本相同 如果您 gitignore 文件 这些文件对于所有分支都是相同的 但不幸的是不会被跟踪 当我跑步时git push或类似的 我需要这些文件在存储库等之间传递 例如
  • RubyMine 按路径搜索文件项目

    在 SublimeText 2 中我可以这样做 cmd t 然后输入文件名或文件夹名称 然后显示结果 是与我正在搜索的术语匹配的文件与我正在搜索的术语的子文件夹中的文件相匹配的文件 例如 如果我的目录结构如下所示 models users
  • Python:如何不等待线程完成才能继续? [复制]

    这个问题在这里已经有答案了 所以我有一些代码等待 X 发生 然后创建一个线程并处理电子邮件 我正在寻找一种方法 让代码继续等待 X 即使 processEmail 正在另一个线程中发生 但目前代码只是等待线程完成 然后再等待 X 再次发生
  • Blazor Web Assembly 应用程序 .Net Core 托管:发布运行时错误

    我使用 NET 5 0 RC1 Framework 创建了一个托管在 NET Core 应用程序内的简单 Blazor Web Assembly 项目 并在 Visual Studio 2019 预览版中的向导过程中添加了授权 它在调试中完
  • 如何在 runAllManagedModulesForAllRequests 设置为 true 的情况下在 IIS 7 中禁用 flv 文件的 gzip 压缩?

    我有一个在 IIS 7 上运行的 ASP NET 3 5 网站 我希望将我的静态内容 如 css 文件 javascript 文件等 和动态内容 net 页面 进行 gzip 压缩 问题是我需要确保 flv 文件 Flash 视频文件 不是
  • 未安装指定平台工具集(v110)

    我有一个最初使用 VS2010 创建的解决方案 当我使用 VS 2012 打开它时 它要求我做一些转换 我同意了 现在我使用 VS 2010 再次打开解决方案 当我尝试构建它时出现错误 错误 MSB8008 指定的平台工具集 v110 未安
  • 与类相同类型的类变量

    在学习 Python 时 弄乱了典型的 Point 类示例 我注意到由于某种原因 我不能拥有与类相同类型的类级别 静态变量 例如 class Point ORIGIN Point doesn t work def init self x 0
  • 撤消“git Push”

    这是我在我的上所做的应该是稳定的分支 git rebase master First rewinding head to replay your work on top of it Fast forwarded alpha 0 3 0 to
  • unsigned long 和 unsigned long long 有什么区别?

    我预计尺寸会有所不同 但两者都显示 8 字节 include
  • 在类本身中分配变量还是在类的构造函数中分配变量更好? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 这是一种设计问题 我确信有人同时采用这两种方法 但您认为 在类中分配变量还是在构造函数中分配变量更好 例如 无论语法或语言如何 这只是为了解释
  • OpenCV GrabCut 算法示例不起作用

    我正在尝试使用 C 在 OpenCV 中实现抓取算法 我偶然发现这个网站 http www packtpub com article opencv segmenting images并找到了一种非常简单的方法 不幸的是 该代码似乎不适合我
  • Java GraphQL - 将字段值传递给对象的解析器

    我希望使用另一种对象类型将字段值传递给已解析的字段 另一种说法是 如果我有 客户 gt 用户 gt 配置文件 如何将客户中的 CustomerID 字段值作为参数或变量传递给配置文件 以便正确解析 有 5 种可能性 从 graphql ja
  • if 语句导致 Verilog 中的锁存推断?

    我正在编写用于合成算法的 Verilog 代码 我对哪些情况可能导致推断锁存器有点困惑 下面是这样的一段代码 虽然它在模拟中工作得很好 但我担心它可能会导致硬件问题 always b1 or b2 b1 map b2 map m1 map