es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cincel: fallo al generar Verilog al escribir una lógica combinacional simple.

Quiero implementar la operación de rotación de desplazamiento a la izquierda.

Mi código Chisel es:

// src/main/scala/ALU.scala

package cpu

import chisel3._

class ALU extends RawModule {
  val io = IO(new Bundle {
    val a = Input(UInt(32.W))
    val b = Input(UInt(32.W))
    val out = Output(UInt(32.W))
  })
  io.out := (io.a << io.b) | (io.a >> (32.U(32.W) - io.b))
}

scala
// src/test/scala/test.scala

package test
import cpu._

object testCPU extends App {
  chisel3.Driver.execute(args, () => new ALU)
}

Construí mi proyecto con sbt, escribiendo `test:runMain test.testCPU -td generated` en la consola de sbt, y la salida es la siguiente:

running test.testCPU -td generated Elaborating design... Done elaborating.

at

Total time: 3 s, completed Nov 19, 2021, 2:55:15 AM

Generó firrtl con éxito, pero no pudo generar verilog.

El código de firrtl es el siguiente:

;buildInfoPackage: chisel3, version: 3.4.3, scalaVersion: 2.12.12, sbtVersion: 1.3.10
circuit ALU : 
  module ALU : 
    output io : {flip a : UInt<32>, flip b : UInt<32>, out : UInt<32>}

node _io_out_T = dshl(io.a, io.b) @[ALU.scala 15:19]
node _io_out_T_1 = sub(UInt<32>("h020"), io.b) @[ALU.scala 15:51]
node _io_out_T_2 = tail(_io_out_T_1, 1) @[ALU.scala 15:51]
node _io_out_T_3 = dshr(io.a, _io_out_T_2) @[ALU.scala 15:36]
node _io_out_T_4 = or(_io_out_T, _io_out_T_3) @[ALU.scala 15:28]
io.out <= _io_out_T_4 @[ALU.scala 15:10]


Tags:  , , ,

Answer

Comments are closed.