Обратный ввод в Chisel3

Я хочу перевернуть входной сигнал в Chisel3. Например, если на входе 12345678, я хочу, чтобы на выходе было 87654321. Может ли кто-нибудь помочь мне с этим?

Код:

import chisel3._
import chisel3.util._
import chisel3.iotesters.{ChiselFlatSpec, Driver, PeekPokeTester}
import chisel3.util.Reverse

class Length extends Module {

val in     = Input(UInt(64.W))

val out    = Output(UInt(8.W))  

out := Reverse(in.x)

}


person Rahul    schedule 05.07.2018    source источник
comment
Как насчет того, чтобы преобразовать его в String и вызвать reverse, а затем преобразовать обратно в число? Например, 12345.toString.reverse.toInt вернет 54321   -  person Duelist    schedule 05.07.2018
comment
Выдает следующую ошибку: type mismatch; [error] found : Int [error] required: chisel3.core.UInt [error] out = in.toString.reverse.toInt [error] ^   -  person Rahul    schedule 05.07.2018
comment
Не могли бы вы поделиться своим фрагментом кода?   -  person Duelist    schedule 05.07.2018
comment
Надеюсь, это поможет: out = Output(UInt(in.getWidth.toString.reverse.toInt.W))   -  person Duelist    schedule 05.07.2018
comment
class Rev needs to be abstract, since method io in class LegacyModule of type => chisel3.core.Record is not defined. Если я изменю класс на abstract или trait, это вызовет много проблем при создании экземпляра   -  person Rahul    schedule 05.07.2018
comment
Извините, я подозреваю, что мой предыдущий ответ был неверным. Попробуйте использовать служебный объект chisel3.util.Reverse. Может быть, это поможет: out := Reverse(in.x)   -  person Duelist    schedule 05.07.2018
comment
Он по-прежнему показывает ту же ошибку, сэр.   -  person Rahul    schedule 05.07.2018
comment
Вам необходимо реализовать io метод iside Length class, например: override def io: Record = IO( new Bundle { val in = Input(UInt(64.W)) val out = Output(UInt(8.W)) out := Reverse(in.x) } )   -  person Duelist    schedule 05.07.2018
comment
Большое спасибо, сэр. Не могли бы вы также помочь мне написать тестовый стенд и драйвер для него? Это было бы большим подспорьем   -  person Rahul    schedule 05.07.2018
comment
Извините, но, согласно этой странице, было бы лучше, если бы вы попытались сделать это самостоятельно, но если вы столкнетесь с некоторыми трудными проблемы, которые вы задаете здесь.   -  person Duelist    schedule 05.07.2018
comment
Ладно попробую спасибо   -  person Rahul    schedule 05.07.2018


Ответы (1)


Решение, о котором шла речь в комментариях:

import chisel3._
import chisel3.util.Reverse

class Length extends Module {
  val io = IO(
    new Bundle {
      val in  = Input(UInt(64.W))
      val out = Output(UInt(8.W))
    }
  )
  io.out := Reverse(io.in)
}
person Duelist    schedule 05.07.2018
comment
Это почти правильно, но назначение out не должно быть в Bundle, переместите его за пределы определения io. - person Chick Markley; 05.07.2018
comment
Я отредактировал сообщение @ duelist, которое правильно показывает использование Reversed, но переместил назначение за пределы объявления io. - person Chick Markley; 05.07.2018
comment
Не знал этого. Спасибо, изменения одобрены! - person Duelist; 05.07.2018
comment
out и in должны быть io.out и io.in в соединении, также io.in не имеет поля x - person Jack Koenig; 05.07.2018
comment
Код работает, но вместо цифр меняют местами биты. Предположим, я ввожу свой ввод как 19 = 00010011, я получаю 200 = 11001000. Можно ли это решить? - person Rahul; 06.07.2018