Chisel3 中的运算符 -&、-%、+&、+% 中的“&”和“%”是什么意思?
What does '&' and '%' mean in operators -&, -%, +&, +% in Chisel3?
我正在尝试使用 official web page 中给出的 GCD 示例来学习 Chisel3。此示例使用名为 -% 的运算符,这是什么意思?
Wiki 上没有解释 operator page. And Cheatsheet 说 "substraction" 作为正常的减法符号 '-'。
那么简单减法'-'和百分比减法'-%'有什么区别?
[编辑]
好的,我在chisel3 code下找到了这些函数的定义:
// TODO: refactor to share documentation with Num or add independent scaladoc
def unary_- : UInt = UInt(0) - this
def unary_-% : UInt = UInt(0) -% this
def +& (other: UInt): UInt = binop(UInt((this.width max other.width) + 1), AddOp, other)
def + (other: UInt): UInt = this +% other
def +% (other: UInt): UInt = (this +& other) tail 1
def -& (other: UInt): UInt = binop(UInt((this.width max other.width) + 1), SubOp, other)
def - (other: UInt): UInt = this -% other
def -% (other: UInt): UInt = (this -& other) tail 1
def * (other: UInt): UInt = binop(UInt(this.width + other.width), TimesOp, other)
def * (other: SInt): SInt = other * this
def / (other: UInt): UInt = binop(UInt(this.width), DivideOp, other)
def % (other: UInt): UInt = binop(UInt(this.width), RemOp, other)
def & (other: UInt): UInt = binop(UInt(this.width max other.width), BitAndOp, other)
def | (other: UInt): UInt = binop(UInt(this.width max other.width), BitOrOp, other)
def ^ (other: UInt): UInt = binop(UInt(this.width max other.width), BitXorOp, other)
使用 & 运算符,减法或加法的结果将是最大操作数的大小加上一位。
但是对于 % 运算符,运算结果将是最大操作数的大小……与正常的 + 或 - 一样。那么 - 和 -% 和 + an +% 之间有什么区别?
很抱歉没有将此信息包含在 Wiki 运营商页面上,我会尽快添加。
您的编辑一语中的:+&
和 -&
是扩展运算符,因为结果的宽度等于最宽操作数的大小加 1。 +%
和 -%
是非扩展运算符,因为结果的宽度等于最宽的操作数。
+
只是 +%
的别名,而 -
是 -%
.
的别名
我正在尝试使用 official web page 中给出的 GCD 示例来学习 Chisel3。此示例使用名为 -% 的运算符,这是什么意思? Wiki 上没有解释 operator page. And Cheatsheet 说 "substraction" 作为正常的减法符号 '-'。
那么简单减法'-'和百分比减法'-%'有什么区别?
[编辑]
好的,我在chisel3 code下找到了这些函数的定义:
// TODO: refactor to share documentation with Num or add independent scaladoc
def unary_- : UInt = UInt(0) - this
def unary_-% : UInt = UInt(0) -% this
def +& (other: UInt): UInt = binop(UInt((this.width max other.width) + 1), AddOp, other)
def + (other: UInt): UInt = this +% other
def +% (other: UInt): UInt = (this +& other) tail 1
def -& (other: UInt): UInt = binop(UInt((this.width max other.width) + 1), SubOp, other)
def - (other: UInt): UInt = this -% other
def -% (other: UInt): UInt = (this -& other) tail 1
def * (other: UInt): UInt = binop(UInt(this.width + other.width), TimesOp, other)
def * (other: SInt): SInt = other * this
def / (other: UInt): UInt = binop(UInt(this.width), DivideOp, other)
def % (other: UInt): UInt = binop(UInt(this.width), RemOp, other)
def & (other: UInt): UInt = binop(UInt(this.width max other.width), BitAndOp, other)
def | (other: UInt): UInt = binop(UInt(this.width max other.width), BitOrOp, other)
def ^ (other: UInt): UInt = binop(UInt(this.width max other.width), BitXorOp, other)
使用 & 运算符,减法或加法的结果将是最大操作数的大小加上一位。 但是对于 % 运算符,运算结果将是最大操作数的大小……与正常的 + 或 - 一样。那么 - 和 -% 和 + an +% 之间有什么区别?
很抱歉没有将此信息包含在 Wiki 运营商页面上,我会尽快添加。
您的编辑一语中的:+&
和 -&
是扩展运算符,因为结果的宽度等于最宽操作数的大小加 1。 +%
和 -%
是非扩展运算符,因为结果的宽度等于最宽的操作数。
+
只是 +%
的别名,而 -
是 -%
.