如何在 SystemVerilog 中将变量值传递给宏?

2023-11-24

我认为这个问题很好地概括了我想要的:将变量的值传递给 SystemVerilog 中的宏。

例如我想要的: 比如说,有 4 个名为 abc_X_def 的信号,我想将它们全部初始化为 0。 所以,没有宏:

abc_0_def = 4'b0000;
abc_1_def = 4'b0000;
abc_2_def = 4'b0000;
abc_3_def = 4'b0000;

现在,我编写的代码有问题:

`define set_value(bit) abc_``bit``_def = 4'b0000

for (int i = 0; i < 4; i++) begin
  `set_value(i);
end

错误在于它试图找到信号 abc_i_def ,这显然是错误的。只是想知道是否可以将变量“i”的实际值传递给宏。


预处理器指令由预处理器评估并修改呈现给编译器的代码。

for 循环是由编译器评估的 verilog 结构。

所以你的预处理器没有评估 for 循环。它看到:

`define `set_value(bit) abc_``bit``_def = 4'b0000

[some verilog]
   `set_value(i);
[some verilog]

所以“我”只是我。在编译之前它不会变成一个数字。

为什么不将本地参数与生成一起使用,以便在展开 for 循环时在详细说明的循环中创建本地参数?

这是宏存在问题的众多地方之一。生成在其他地方是一个问题(例如当您想要控制端口列表时)。


我对此进行了更多研究。生成中的参数和本地参数在生成范围内创建为 localparams。看这里:生成块中的系统 Verilog 参数。在测试之前我必须回去工作。

我只会使用代码并填充一个数组。这在 VCS 中编译:

module veritest  
    #(  
    parameter   MAX_X = 5,  
                MAX_Y = 3,  
                MAX_Z = 2  
    )  
    (); // empty port list  

logic [4:0] abc_def[1:MAX_X][1:MAX_Y][1:MAX_Z];  

always @*  
begin  
for (integer z=1; z<(MAX_X+1);z=z+1)  
   for (integer y=1; y<(MAX_Y+1);y=y+1)  
       for (integer x=1; x<(MAX_X+1);x=x+1)  
       begin  
            abc_def[x][y][z] = 4'b0000;  
       end  
end  
endmodule  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 SystemVerilog 中将变量值传递给宏? 的相关文章

  • 无与伦比的括号宏怪异

    根据 C99 规则预处理以下 3 行的正确输出是什么 define y x x define x a y a x 1 x 2 顺便说一句 linux 下的 cpp 会产生错误消息 但我不明白为什么答案不简单 1 2 假设 cpp 是正确的而
  • 宏扩展忽略了 MSVC 中的一些标记

    我在 msvc 编译器中遇到宏扩展问题 我希望将以下代码扩展为F x 它在 gcc 和 clang 上执行 但 msvc 将其扩展为F忽略x令牌 这里发生了什么 define S s s define F define M S S F x
  • 宏、Clojure 与 Common Lisp

    我和我的一些朋友正在开发一个新平台 我们想用 lisp 构建它 主要吸引力是宏 我们都使用 Common Lisp 但我想探索 Clojure 的选择 当我提出这一点时 其中一位说宏观体系 较弱 我想知道这是否属实 以及在哪些领域 就您可以
  • 用宏包装函数(无需重命名)C

    我有兴趣通过包装现有函数调用来添加一些额外的逻辑without重命名它们 仅供测试 我发现的现有解决方案依赖于将函数包装在不同名称的宏中 这可能意味着更改大量代码 有什么建议么 请注意 我知道LD PRELOAD 但我有兴趣使用宏来检查传递
  • 如何匹配和删除队列中的元素?

    根据1800 2012 规格 http standards ieee org getieee 1800 download 1800 2012 pdf Queue delete input int index 删除 SystemVerilog
  • F# 类型提供程序与 Lisp 宏

    我一直在阅读有关 F 3 0 类型提供程序的内容 例如here http msdn microsoft com en us library hh156509 aspx 并且它们似乎基于一种编译时代码生成 在这方面我想知道它们与 Lisp 宏
  • 使用另一个宏(c 预处理器)生成宏的名称[重复]

    这个问题在这里已经有答案了 我可以使用宏生成函数的名称 该宏取自生成函数名称的 C 预处理器定义 https stackoverflow com questions 1253934 c pre processor defining for
  • 是否可以从外部文件运行 openoffice 宏?

    我想从外部文件运行 OpenOffice 宏 喜欢 vlad leo soffice macro home vlad q vbs 并不是真正的答案 只是一个评论 以便提出这个问题 并希望得到答案 这可能与必须显式设置宏的权限有关 例如 编辑
  • C 预处理器宏不解析逗号分隔的标记?

    我想根据参数的数量选择两个函数之一 nargs 0 gt f1 nargs gt 0 gt f2 宏执行以下操作 获取第一个参数 如果没有提供参数 则会添加两个逗号 NULL NULL 然后它会从返回的参数列表中选择第二个参数 例如 f H
  • 如何编写 Clojure 宏来从字符串创建正则表达式?

    我正在创建一个方便的宏 部分便利在于可以仅使用字符串来指定正则表达式 而不是使用 re 表示法 我无法弄清楚的一部分是如何让宏获取字符串并将其重写为 Clojure 正则表达式 例如 生成 re 符号 我认为这是一个语法 转义问题 我的第一
  • 为什么 SBCL eval 函数会丢失它运行的宏?

    print x 打印出我想要评估的内容 但是 eval x 失败了 但如果我运行 x 它就可以了 我缺少什么 请告诉我为什么这不起作用 或者我是否在做一些愚蠢的事情 我正在尝试打印动态大小的表并设置 lambda 变量以最终计算表中每个单元
  • 是否可以在 C 中自动生成的变量名中使用 __LINE__ ?

    为了避免重复 我想使用 LINE 在自动生成的变量名称中 define ROUTE path impl char k impl LINE route path impl 但它始终被视为普通字符串 LINE 即使我将其定义如下 我也无法得到我
  • 内联函数与预处理器宏

    内联函数与预处理器宏有何不同 预处理器宏只是应用于代码的替换模式 它们几乎可以在代码中的任何地方使用 因为在任何编译开始之前它们都会被替换为扩展 内联函数是实际函数 其主体直接注入到其调用站点中 它们只能在适合函数调用的地方使用 现在 就在
  • Google Test 宏似乎不适用于 Lambda 函数

    所以 我有以下代码 无论 Interpolator 类的细节是什么 在这种情况下它都不应该抛出异常 这就是我想要测试的 TEST errorhandlingInterpolator toolargeInput const size t nu
  • PHP 内部:TSRMLS_FETCH 如何工作?

    PHP 内部结构是怎样的TSRMLS FETCH宏发挥作用吗 Per the PHP手册 http php net manual en internals2 memory tsrm php 在开发扩展时 包含 tsrm ls is unde
  • 另一个宏中的 Q_PROPERTY 宏

    如何放置Q PROPERTY另一个宏里面 辅助宏 define SimpleAllinOne member type public void Set member type arg member m member arg member ty
  • 如何检查类中是否存在成员名称(变量或函数),无论是否指定类型? [复制]

    这个问题在这里已经有答案了 这个Q是以下内容的延伸 模板化检查类成员函数是否存在 https stackoverflow com q 257288 514235 是否有任何实用程序可以帮助找到 类中是否存在成员名称 该成员可以是 变量或方法
  • C 相当于 C++ decltype

    在我的 C 项目中 有一个由另一位同事创建的结构体 其中包含一些函数指针 struct tools int tool a int int int 我无权更改此结构和相关文件 现在我正在使用该结构进行编码 我必须定义一个函数 其返回类型和参数
  • 如何创建一个扩展为“(x+y*240)*2”这样的表达式的 GNU GAS 宏?

    我正在使用 GAS 为 ARM Linux 构建一个程序 但我想做一些宏以使我的开发更加智能 然后我想知道 我怎样才能为此做一个宏 x y 240 2 were x and y are int 将像这样使用 mov r0 MACRO SHO
  • C 中的 malloc 可以有多大?

    我在 C 中有一个 malloc 它是 26901 2 sizeof double 这让我思考这里的最大价值是多少 另外 定义宏来访问这个二维数组时会遇到任何问题吗 define DN i j int i ny int j 因为这似乎对我不

随机推荐

  • 在 LibreOffice 中更改单元格背景颜色

    我使用的是 LibreOffice 3 5 4 2 我想根据各种条件更改单元格的背景颜色 作为一个最小的例子 我定义了以下宏 函数 function bgcolor Dim Doc As Object Dim Sheet As Object
  • 无法在 Razor 组件中渲染原始 html

    我在 ASP Core 3 0 razor 页面 普通 项目中有以下 Razor 组件 Blazor 服务器端 using WEKA Models using Microsoft AspNetCore Html div class jobs
  • :hover 在 IE9 中无法正常工作

    我有一个简单的 CSS 下拉菜单 里面有一个 iframe 当我将鼠标悬停在下拉菜单上时 菜单会下拉 但是当我的鼠标悬停在菜单内的 iframe 上时 菜单会返回 这是我的代码的简化版本 div a href class btn View
  • 什么时候应该使用 Theme.AppCompat 和 ThemeOverlay.AppCompat?

    有以下 Theme AppCompat 类 Theme AppCompat Theme AppCompat Light Theme AppCompat Light DarkActionBar Theme AppCompat NoAction
  • 为什么 AssetManger.list() 这么慢?

    我正在尝试使用存储在 SD 卡上并作为资产存储在 APK 中的文件混合来填充 ListView 使用TraceView 我可以看到性能AssetManager list 相比之下较差File listFiles 即使我使用 SD 卡的文件名
  • QString 波斯语

    我给出了一个需要支持波斯语的 Qt 项目 数据从服务器发送并使用第一行 我得到一个 QByteArray 并使用第二行将其转换为 QString QByteArray readData socket gt readAll QString D
  • 为什么 Docker 中会出现“none”镜像以及我们如何避免它

    当我运行docker compose build命令在 Docker 中重建映像 因为我更改了 Dockerfile 中的某些内容 有时我得到 无 映像标签 我们怎样才能避免这个事实呢 我想重建图像 但是none图像不应出现 REPOSIT
  • 如何在C#中动态更改对象的类?

    假设我有一个名为 Visitor 的基类 它有 2 个子类 Subscriber 和 NonSubscriber 首先 访问者从非订阅者开始 即 NonSubscriber mary new NonSubscriber 然后后来这个 mar
  • 将 jquery ui 对话框与 knockoutjs 集成

    我正在尝试为 jquery ui 对话框创建 knockoutjs 绑定 但无法打开对话框 对话框元素已正确创建 但似乎有display none那个呼唤dialog open 不删除 另外 调用dialog isOpen 返回对话框对象而
  • Javascript 比较字符串中的两个日期,开始 <= 结束

    我得到两个格式类似于 巴西格式 的字符串 DD MM YYYY 我需要比较两者 由于第一个字段是开始 最后一个字段是结束 我的验证是开始 即使在 ISO 上 Date new begin 也会生成 无效日期 不要使用Date new Use
  • Django、Python 和类变量

    我一边学习 Python 一边学习 Django 我熟悉许多其他语言 在下面的代码片段中 x是类的类变量Foo class Foo object x 9000 鉴于之前的声明 以下内容可以正常工作 print Foo x Django 框架
  • 如何使用python从视频文件中提取音频?

    我想编写一个Python程序 可以从视频文件中提取音频 例如video avi 有什么好的库吗 而我应该从哪里开始呢 我尝试使用 PyMedia 但无法在我的 MacOSX Mountain Lion 上安装它 EDIT 问题是video
  • 使用注释的 Hibernate Enum 映射

    我有一个现有的数据库 现在正在使用 hibernate 连接到该数据库 我目前无法更改其中的数据 并且无法让所有内容都脱离单个列而工作 我有一个状态列 其中包含以下值 new mailed in out 该列映射如下 Column name
  • Windows:如何更改显示器的背光亮度

    自从我在笔记本电脑上使用外接显示器以来 当我需要更改背光亮度时 我必须按显示器的按钮来浏览其菜单并调整亮度 那确实是一种痛苦 按太多按钮了 当我使用笔记本电脑的集成显示器时 只需按一下Fn键加组合 也许你们中的一些人可能认为不可能以编程方式
  • 提升日志severity_logger init_from_stream

    我使用的是boost 1 54 0 下面您可以找到一个说明我的问题的最小示例 我使用boost日志的severity logger 我想从流配置我的接收器 在下面的示例中 我使用字符串流 在我的实际应用程序中 流来自文件 我想将 Sever
  • 包含外部 php 文件

    我正在使用一些 php 代码 例如所有页面都通用的数据库连接 因此我创建了一个包含 php 代码的 php 文件 然后我将此文件包含在我的 HTML 代码中 所以我想知道包含 php 文件的更好方法 包含函数的更好替代方案 我的示例代码在这
  • 以全屏模式运行网站

    我正在寻找一种技巧 可以将我的网站置于全屏模式而无需人工交互 我发现了一些使用 HTML5 技术的示例 但所有这些都需要由人类交互触发 该网站将在电视上显示 我已经考虑在全屏模式下使用 SWF 文件加载网站 但我不想朝这个方向发展 而是想强
  • 如何调用另一个项目中的活动?

    你好 我是 android 新手 我创建了 2 个项目 现在 我想在单击按钮时从第一个项目调用第二个项目中的活动 第一个项目仅处理登录屏幕 当我单击登录按钮时 我需要调用第二个项目中存在的活动 我在网上搜索但没有找到任何我能正确理解的教程
  • UIStatusBarStyle Light Content 未将电池设置为白色?

    我正在以编程方式将状态栏设置为白色 UIApplication sharedApplication setStatusBarStyle UIStatusBarStyleLightContent 但是电池图标仍然是绿色的 苹果的例子显示应用这
  • 如何在 SystemVerilog 中将变量值传递给宏?

    我认为这个问题很好地概括了我想要的 将变量的值传递给 SystemVerilog 中的宏 例如我想要的 比如说 有 4 个名为 abc X def 的信号 我想将它们全部初始化为 0 所以 没有宏 abc 0 def 4 b0000 abc