Что означают '&' и '%' в операторах - &, -%, + &, +% в Chisel3?

Я пытаюсь изучить Chisel3 с помощью примера GCD, приведенного на официальной веб-странице. В этом примере используется оператор с именем -%, что это означает? Это не объясняется на странице оператора в вики. И в Cheatsheet написано "вычитание" как обычный символ вычитания '-' .

Тогда в чем разница между простым вычитанием '-' и процентным вычитанием '-%'?

[редактировать]

Хорошо, я нашел определения этих функций в разделе код chisel3:

 // 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 +%?


person FabienM    schedule 08.11.2016    source источник


Ответы (1)


Приношу свои извинения за то, что не включил эту информацию на страницу оператора Wiki, я добавлю ее в ближайшее время.

Вы попали в точку с вашим редактированием: +& и -& являются операторами расширения, поскольку ширина результата равна размеру самого широкого операнда плюс 1. +% и -% не расширяют операторы в том смысле, что ширина результат равен самому широкому операнду.

+ просто псевдоним +%, а - псевдоним -%.

person Jack Koenig    schedule 09.11.2016