Chisel:编写简单的组合逻辑时无法生成verilog
Chisel: fail to generate verilog while writing a simple combinational logic
我想实现旋转左移操作
我的凿码:
// 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))
}
// src/test/scala/test.scala
package test
import cpu._
object testCPU extends App {
chisel3.Driver.execute(args, () => new ALU)
}
我用sbt构建了我的项目,在sbt中输入test:runMain test.testCPU -td generated
shell,输出如下:
[info] running test.testCPU -td generated
Elaborating design...
Done elaborating.
[error] at
[success] Total time: 3 s, completed Nov 19, 2021, 2:55:15 AM
生成firrtl成功,生成verilog失败
第一个代码如下:
;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]
您目前正在使用旧方法通过 execute 函数生成 Verilog。
将 test.scala 中的对象替换为:
import chisel3._
object testCPU extends App {
(new chisel3.stage.ChiselStage).emitVerilog(new ALU, args)
}
它不会解决您的错误,但打印的消息会提供更多信息。
那我们就可以帮你了。
我想实现旋转左移操作
我的凿码:
// 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))
}
// src/test/scala/test.scala
package test
import cpu._
object testCPU extends App {
chisel3.Driver.execute(args, () => new ALU)
}
我用sbt构建了我的项目,在sbt中输入test:runMain test.testCPU -td generated
shell,输出如下:
[info] running test.testCPU -td generated
Elaborating design...
Done elaborating.
[error] at
[success] Total time: 3 s, completed Nov 19, 2021, 2:55:15 AM
生成firrtl成功,生成verilog失败
第一个代码如下:
;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]
您目前正在使用旧方法通过 execute 函数生成 Verilog。 将 test.scala 中的对象替换为:
import chisel3._
object testCPU extends App {
(new chisel3.stage.ChiselStage).emitVerilog(new ALU, args)
}
它不会解决您的错误,但打印的消息会提供更多信息。 那我们就可以帮你了。