是否有理由在 VHDL 和 Verilog 中初始化(而不是重置)信号?

2023-11-25

我从未初始化过信号。这样,任何缺少重置或分配的信号都将是未知的或已初始化。在一些参考代码中它们有初始化。这违背了我的愿望。此外,由于初始化不可综合,因此可能会出现模拟/综合不匹配的情况。

在这种情况下有什么理由初始化信号吗?

编辑 2011 年 6 月 17 日:正如 @Adam12 所问,这适用于存储(Verilog reg)和组合(线)元素。


(以下建议很大程度上取决于器件架构和综合工具,我的发言来自 Xilinx FPGA(例如 Virtex-5 部件)的经验)。

您关于初始化不可综合的假设是不正确的。初始化信号绝对是可合成的!

例如,可以对其进行综合,以便使用初始值对设备进行编程:

signal arb_onebit : std_logic := '0';
signal arb_priority : std_logic_vector(3 downto 0) := "1011"

此外,您可以使用信号初始化并放弃传统的异步或同步全局重置方案来实现更好的结果质量 (QoR)。这是因为这些工具不再需要将复位信号路由到零件周围的所有 FF。虽然一些老一代 FPGA 可能具有用于复位的专用资源,但较新部件的情况并非如此。这意味着重置的路由就像设计​​中的所有其他信号一样,从而减慢构建过程并降低性能。

你可以做什么呢?使用信号初始化。

  1. 使用专用的“GSR”(我相信是全局设置/重置)。这可以通过专用的 Xilinx 原语访问。请注意,使用 GSR 时,并非器件的所有存储元件都会重置。例如,我认为 BRAM 会保留值,但 FF 会重置为初始化值。
  2. PROGL 您的设备。这将导致整个器件从原始比特流(位于 PROM 中)重新编程。每次从 PROM 加载器件时,所有存储元件(FF、BRAM 等)都会进入由初始化决定的已知状态。如果不初始化,我相信它默认为“0”状态。您可以使用 FPGA 编辑器(作为 Xilinx 工具集的一部分提供)等工具查看结果来验证存储器元件初始化的状态

如果您确实需要重置设计的一小部分(“本地”重置),那么您应该像通常处理重置一样处理此问题。

以下是 Xilinx 工具的一些参考:

  • 白皮书描述了重置的高级注意事项
  • XST 13.1 用户指南参见第 50 页和 128 页
  • Xilinx Virtex 5 YouTube 培训系列。第 4 部分看起来就是你想要的。

EDIT

经过进一步的研究,我发现指定初始值虽然在某些情况下有助于提高 QoR,但在其他情况下可能会产生损害。这实际上取决于您的综合工具供应商将如何兑现初始值。从本质上讲,初始值是对工具的约束。当您的设计被综合然后映射到零件时,您的设计中会添加一条注释,即“当您实现此内存元素时,请为其指定此初始值”。在许多情况下,添加此约束会阻止元素被优化(删除、组合等)。

建议:对于重置和初始化,没有硬性/快速/一刀切的规则。为了获得最佳优化和资源利用,您must了解您的综合工具,并且您must了解您的目标技术。

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

是否有理由在 VHDL 和 Verilog 中初始化(而不是重置)信号? 的相关文章

  • verilog 中的案例陈述

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

    这是 Apple Swift 文档的副本 一旦超类的所有属性都有初始值 它的内存被认为已完全初始化 并且阶段 1 已完成 超类的指定初始化器现在有机会 进一步自定义实例 尽管不是必须的 一旦超类的指定初始化器完成 子类的指定初始化器可以执行
  • reg 声明中的位顺序

    如果我需要使用 4 个 8 位数字 我会声明以下 reg reg 7 0 numbers 3 0 我对第一个和第二个声明 7 0 和 3 0 之间的区别感到很困惑 他们应该按什么顺序来 第一个是保留数字的大小 而第二个是保留数字的数量 还是
  • 初始化字符串时额外的花括号

    根据问题string array 是什么意思 是什么意思以及为什么它有效 https stackoverflow com questions 21481462 what does this code mean and why does it
  • 在不同的翻译单元中启动全局变量(涉及链接器)

    最近在复习C 这是我的问题 请参阅中的代码file1 cpp and file2 cpp 文件1 cpp int x1 1 int y1 x1 2 文件2 cpp include necessary headers extern int y
  • 如何在 C# 库中创建全局对象[重复]

    这个问题在这里已经有答案了 可能的重复 使整个应用程序可以访问数据 可能在运行时发生变化 的最佳方法是什么 https stackoverflow com questions 11781131 best way to make data t
  • 为什么 Box2D 不应该使用像素作为单位?

    手册中说我应该使用小单位 0 1 10米 不鼓励使用像素作为测量单位 但是为什么 Box2D 比我使用小单位时工作得更好 并且具有更好的模拟效果呢 Box2D 是一个模拟框架 内部使用MKS 单位制 http en wikipedia or
  • 在 R 中生成具有不同样本大小的多项式随机变量

    我需要生成具有不同样本大小的多项随机变量 假设我已经生成了样本大小 如下所示 samplesize c 50 45 40 48 然后我需要根据这个不同的样本大小生成多项随机变量 我尝试使用 for 循环并使用 apply 函数 sapply
  • 直接列表初始化和复制列表初始化之间的差异

    我想知道以下两种类型是否有任何区别std vectorC 11 及更高版本中的初始化 std vector
  • 如何使“new[]”默认初始化原始类型数组?

    我时不时需要打电话new 对于内置类型 通常char 结果是一个具有未初始化值的数组 我必须使用memset or std fill 来初始化元素 我该如何制作new 默认初始化元素 int p new int 10 应该做 然而 作为迈克
  • 即使我确实为变量设置了初始值,数据段也没有被初始化

    我已经编写了一个代码 该代码应该生成某种数字列表 但是即使我为它们分配了初始值 我的数据段变量也没有被初始化 This is how DS 0000 looks when I run it 这是我的代码 但数据段只保留垃圾值 MODEL s
  • 如何将焦点设置到 Windows 窗体应用程序中的控件?

    在 Windows 窗体应用程序中 when我是否编写代码以在应用程序启动时以及随后调用函数后将焦点设置到控件 例如 如果我有一个 DropDownList 一个 TextBox 和四个按钮 并且我希望将 Focus 设置为 DropDow
  • C++:初始化结构体并设置函数指针

    我正在尝试使用函数指针初始化结构 但是除非使用全局函数完成 否则我很难这样做 以下代码有效 float tester float v return 2 0f v struct MyClass Example typedef float My
  • 反对“initialize()”方法而不是构造函数的争论

    我目前负责查找代码库中的所有不良做法 并说服我的同事修复有问题的代码 在我的探索过程中 我注意到这里很多人都使用以下模式 class Foo public Foo Do nothing here bool initialize Do all
  • CPP中原始数据类型的构造函数初始化

    在cpp中 我们可以将原始数据类型初始化为 int a 32 这个构造函数初始化是如何工作的 C 是否将其视为对象 这在以下内容中得到了最好的描述 C 03 8 5 初始化器 第 12 和 13 段 new 表达式 5 3 4 static
  • 非静态字段、方法或属性需要对象引用

    我知道人们以前问过这个问题 但场景太具体 我对基本原理感到困惑 我有两个基本版本的 C 程序 一种有效 一种无效 如果有人能解释为什么我收到错误 我会很高兴非静态字段 方法或属性需要对象引用在第二个程序中 Works namespace E
  • 如何在Python中计算输出的均值、众数、方差、标准差等?

    我有一个基于概率的简单游戏 每天我们抛一枚硬币 如果正面朝上 我们就赢了 我们会得到 20 美元 如果我们抛硬币 反面朝上 那么我们会在月底损失 19 美元 28 天 我们可以看到我们失去或赚了多少 def coin tossing gam
  • 如何初始化一个最初大小未知的数组?

    假设我有这个 int x int x State Determined By Program const char pArray const int x 在使用 pArray 之前如何初始化它 因为Array的初始大小是由用户输入决定的 T
  • 无符号和 std_logic_vector 之间的区别

    谁能告诉我以下书面陈述之间的区别 signal A unsigned 3 downto 0 signal B std logic vector 3 downto 0 Both std logic vector and unsigned ar
  • 如何初始化静态地图?

    你会如何初始化静态Map在Java中 方法一 静态初始化方法二 实例初始化 匿名子类 或者 还有其他方法吗 各自的优点和缺点是什么 这是说明这两种方法的示例 import java util HashMap import java util

随机推荐

  • 为什么说Java中的静态方法不是虚方法?

    在面向对象范式中 virtual函数或虚方法是一个函数或方法 其行为可以在继承类中被具有相同签名的函数覆盖 以提供多态行为 根据定义 Java中的每一个非静态方法默认都是虚拟方法 except 最终方法和私有方法 不能继承的方法多态性行为是
  • 为什么在 Firebase 中使用 UID?我应该使用它吗

    I know UID被使用是因为它是唯一的 但在我的应用程序中 它们都是用Google ID注册的 Google ID也是唯一的 我应该使用UID 是的 最好使用uid 来自文档 通过将 Google 登录集成到您的应用中 您可以让用户使用
  • Magento,如何以编程方式禁用模块?

    我的目标是以编程方式禁用该模块 例如在某些观察者事件期间 我发现的最早的观察者是控制器前端初始化之前 所以我的模块正在监听它 然后执行下一步 Mage getConfig gt getModuleConfig IG LightBox gt
  • 如何通过跨域ajax获取响应头?

    我正在尝试阅读文档 但我必须承认这不是一件容易阅读的事情 我没有问题 添加 Access Control Allow Origin 标头后 读取responseText 但无法在除 Firefox 之外的任何地方获取响应标头 所以 我的问题
  • 在 R 中读取 CSV 文件并格式化日期和时间,同时读取并避免标记为的缺失值?

    我正在尝试在 R 中读取 CSV 文件 如何在读取时读取日期和时间并对其进行格式化 并避免丢失标记为 的值 我读取后加载的数据应该是干净的 我尝试过类似的东西data lt read csv Data txt 它有效 但日期和时间保持原样
  • 使用 mitmproxy 将 URL 更改为另一个 URL

    我正在尝试使用 mitmproxy 和 Python 将一个页面重定向到另一个页面 我可以毫无问题地与 mitmproxy 一起运行内联脚本 但在将 URL 更改为另一个 URL 时我遇到了困难 就像如果我访问 google com 它会重
  • 有没有办法将 Expo 应用程序与 firebase 动态链接集成而不分离?

    有没有办法将 Expo 应用程序与 firebase 动态链接集成而不分离 如果你需要create您可以使用新的即时动态链接REST API去做吧 在更可能的情况下 您只需要您的应用程序openFirebase 动态链接 除了配置 Expo
  • 如何使用 javascript 打开 url 并为请求设置自定义 HTTP 标头?

    我想在用户单击链接后通过 javascript 将用户重定向到某个网址 现在有什么方法可以随此请求一起发送自定义 http 标头 我想通过请求标头发送特定的 cookie 值 有问题的网址不属于我的域 有可能做到吗 如果是 怎么办 No 如
  • 检查给定的键是否已存在于字典中并递增它

    如何查明字典中的键是否已设置为非 None 值 如果已有该值 我想增加该值 否则将其设置为 1 my dict if my dict key is not None my dict key 1 else my dict key 1 您正在寻
  • 如何更改App Store中iPhone应用程序的设备兼容性?

    Our company has two app One s device target is iOS 9 let say first app and the other one s is iOS 8 1 let say second app
  • 在 C# 中将字符串转换为浮点型

    我正在转换像 41 00027357629127 这样的字符串 并且我正在使用 Convert ToSingle 41 00027357629127 or float Parse 41 00027357629127 这些方法返回4 1000
  • 将子类别的 Microsoft 图表控件 X 轴标签格式化为类似于 Excel 中生成的图表

    我在尝试复制使用 Microsoft Chart Control for Net 在 Microsoft Excel 2007 中生成的图表时遇到问题 该图表显示了一年中每个月的前 5 个条目 每个月可能有不同的 5 个条目 然后显示了一些
  • 如何在Android导航组件中管理BottomNavigationView backstack

    我在用navigation component and BottomNavigationView 我面临一个问题 那就是当我从fragment1 gt 2 gt 5 gt 4 gt 3 当我按下后退按钮时我得到fragment1 我知道这是
  • 为远程网页保存cookie

    我有一个 PHP 应用程序 需要从另一个网页获取内容 而我正在阅读的网页需要 cookie 我找到了有关如何在拥有 cookie 后进行此调用的信息 http groups google com group comp lang php ms
  • Android:AdMob 无法正常工作

    AdMob 不会显示在我的应用中 每次我调用loadAd 我收到以下错误 请求资源 0x7f0b000e 失败 因为它很复杂 谷歌 找不到播放服务资源 检查您的项目配置以确保包含资源 获取广告响应时出现问题 错误代码 1 我花了几个小时寻找
  • 两个同名的类型参数

    我想知道为什么按照下面的示例允许两个具有相同名称 A 的类型参数 名为 A 我知道这是类型参数的糟糕命名 不要这样做 我的猜测是它们位于不同的范围级别 例如类级别和函数级别 并且编译器正在使用某种名称修改 class MyTest A ty
  • Facebook 会缓存共享缩略图多长时间?

    Facebook 会缓存共享缩略图多长时间 我使用以下方法为我的页面添加了自定义缩略图 但在页面上显示了我以前的图像 gt 它缓存在 FB 服务器上的某个位置 有什么想法如何刷新缓存或者 FB 加载新图像需要多长时间 使用 Facebook
  • Future 与 void [重复]

    这个问题在这里已经有答案了 假设我想创建一个异步方法 我可以将其返回类型设置为 Future void 或简单地 void 如下面的示例所示 两种方法似乎都能奏效 那么两者有什么区别呢 什么时候应该使用 Future void 而不是 vo
  • 使用 Google Play Developer API 进行服务器端授权?

    需要授权才能从Google Play 开发者 API 我知道如何使用 Postman 来做到这一点 但是实现授权要麻烦得多 重定向 url 处理重定向等等 当您已经在内部设置了身份验证数据时 将执行这些步骤谷歌开发者API控制台 1 GET
  • 是否有理由在 VHDL 和 Verilog 中初始化(而不是重置)信号?

    我从未初始化过信号 这样 任何缺少重置或分配的信号都将是未知的或已初始化 在一些参考代码中它们有初始化 这违背了我的愿望 此外 由于初始化不可综合 因此可能会出现模拟 综合不匹配的情况 在这种情况下有什么理由初始化信号吗 编辑 2011 年