verilog - Verilog 对 1 位信号按位异或
问题描述
如果在 Verilog 中对1 位信号进行按位异或运算会发生什么。
例如:
input A;
wire B;
B = ^A;
如果A
是1,会B
是1吗?或者会是X还是什么?
解决方案
您显示的代码称为归约 XOR。请参阅 IEEE Std 1800-2017,第 11.4.9 节归约运算符。这些运算符旨在用于超过 1 位的信号,例如,如果A
是 4 位宽。在您的情况下(1 位),行为没有明确定义。您试图用该代码描述什么样的硬件?XOR 用于比较 2 个信号。
module tb;
reg A;
wire B = ^A;
initial begin
$monitor($time, " A=%b B=%b", A, B);
#5 A = 0;
#5 A = 1;
#5 A = 0;
#5 $finish;
end
endmodule
这是我在 2 个不同的模拟器上得到的输出:
0 A=x B=x
5 A=0 B=0
10 A=1 B=1
15 A=0 B=0
但是,由于此行为没有明确定义,因此您不应依赖这些结果。您应该避免以这种方式编写代码。
推荐阅读
- python - 通过使用替换/正则表达式,用忽略的单词列表替换文本
- python - 熊猫 to_xml() 设置 xsi 值
- flutter - 通过 .of(context) 方法而不是静态访问文本主题有什么区别?
- lua - Lua 脚本:将多个“if”转换为更简单的形式
- ios - 如何处理 Raygun 中断 - 启动后应用程序崩溃
- c# - 如何统一这两种方法
- jmeter - 在 RHEL 8 机器上使用 JMeter 中的 OS 采样器执行文件
- android - 如何在 xamarin 中连接 sqlite
- openssl - 如何针对静态 OpenSSL 库编译应用程序?
- javascript - 在哪里添加用于更新字段的 mongodb 代码