如何在 Verilog 中比较两个数字(网络、变量、常量)

电器工程 验证日志
2022-01-26 05:17:13

我是 Verilog 的新手,想学习如何比较两个数字。例如,让我们将参数或 reg(比如 a)与数字 2 (2'b10) 进行比较。这将如何用 Verilog 编写?

2个回答

等式和关系运算符(如果操作数有 X 或 Z,则返回 X)

m == n  // is m equal to n? (1-bit True/False result)

m != n  // is m not equal to n? (1-bit True/False result)

m < n   // is m less than n? (1-bit True/False result)

m > n   // is m greater than n? (1-bit True/False result)

m <= n  // is m less than or equal to n? (1-bit True/False result)

m >= n  // is m greater than or equal to n? (1-bit True/False result)

身份运算符(比较逻辑值 0、1、X 和 Z)

m === n // is m identical to n? (1-bit True/False results)

m !== n // is m not identical to n? (1-bit True/False result)

例子

如果 reg a 小于 2'b10,则将 2'b11 存储在 a 中。

if (a < 2'b10) begin
   a = 2'b11;
end

注意事项

  1. 对于大多数操作,操作数可能是网络、变量、常量或函数调用。某些操作在实数(浮点)值上是不合法的。
  2. 返回真/假结果的运算符将返回一个 1 位值,其中 1 代表真,0 代表假,X 代表不确定
  3. 综合不支持 === 和 !== 运算符,因为 Z 和 X 在仿真和硬件中的含义不同。
  4. 如果比较两个宽度不等的数字,较小的会被扩大。无符号操作数通过用零向左扩展来扩展。有符号操作数通过使用最高有效位(符号位)的值左扩展来扩展。

资料来源:Stuart Sutherland 的“基于 Verilog-2001 标准 (IEEE Std 1364-2001) 的 Verilog HDL 快速参考指南”

Verilog 数值比较运算符与 C 中的类似:==、!=、<、>、<=、>=。