syntax - 如何忽略模块实例化的一个或多个输出总线引脚
问题描述
我想忽略 SystemVerilog 中模块的数组参数中的一个或多个位。
module x(in a, out [0:3] z);
...
endmodule
module tb;
logic my_a;
logic [1:3] my_z;
// I want to stop having to do this next line:
logic ignore_this_bit;
x myx(.a(my_a), .z({ignore_this_bit, my_z}));
endmodule
执行此操作的正确语法是什么?如上所示,我一直在做它,并声明ignore_this_bit
并且根本从未连接到该网络。但似乎应该有一个更简单的方法。就像在模块实例化的参数中只使用逗号而没有变量名,或者可能使用类似的东西1'bX
而不是输出参数位,或者类似的东西。
这是否受到我在这里对向量使用大端位排序这一事实的影响?(我讨厌它,但我正在为使用该排序的旧 CPU 构建代码,并且将我的代码与现有代码匹配比修复它更容易。)
这是一个很难搜索的概念,我已经尝试过了。有没有人有专业知识可以帮助我知道如何“以正确的方式”做到这一点?谢谢。
解决方案
verilog 中没有特殊的方法可以忽略输出的位。因此,您将 concat 与不需要的变量一起使用是一种很好的方法({ignore_this_bit, my_z}
)。出于可读性原因,此变量的命名很重要。
它不受范围描述顺序的影响。看起来你忽略了最左边的位。无论您如何描述范围,位总是以相同的方式排序:
bits: 0011
[3:0]: 3 0
[0:3]: 0 3
concat: {ign, 0, 1, 1};
另一种方法是使用一个足够大的变量来连接到输出,然后使用它的位:
logic [1:3] my_z;
logic [0:3] their_z;
x myx(.a(my_a), .z(their_z));
assign my_z = their_z[1:3];
推荐阅读
- python - 如何将 JSON/XML/YAML 数据读入 Sphinx RST 文件以编程方式生成文档页面?
- android - Flutter 项目中的任务“:app:processDebugResources”执行失败
- leaflet.markercluster - 如何将markercluster与已经聚集的数据一起使用?
- python - for循环中的os.system taskkill
- python - 我在为 Django 中的特定页面设置默认 URL 时遇到了一些问题
- text - 使用 sed 删除文本文件最后一行中的新行
- flutter - 运行我的颤振应用程序时终端中的消息
- python - 使用shutil和pandas df生成文件
- python - 找不到模块“libmultinest.dll”(或其依赖项之一)。尝试使用带有构造函数语法的完整路径
- macos - 将 zsh 提示更改为仅两个文件夹