私は文書にしたがってチゼルを学んでいます。Chisel3。機能モジュールMux4
これまでのところ、すべてがうまく機能しました。しかし、私は章13で立ち往生しています"Functional Module Creation"
I のコードを取得できません。私は全ての.scalaクラスをchisel-template-projectのコピーに作成しました。ここで私は可変ビット幅でMUX4を作成するためにコピー/書いたものです:
/チゼルテンプレート/ srcに/メイン/スカラ座/ Mux4.scala
import Chisel._
class Mux4(w: Int) extends Module {
val io = IO(new Bundle {
val sel = UInt(INPUT, 2)
val in0 = UInt(INPUT, w)
val in1 = UInt(INPUT, w)
val in2 = UInt(INPUT, w)
val in3 = UInt(INPUT, w)
val out = UInt(OUTPUT, w)
})
io.out := Mux2(io.sel(1),
Mux2(io.sel(0), io.in0, io.in1),
Mux2(io.sel(0), io.in2, io.in3))
}
class Mux2(w: Int) extends Module {
val io = IO(new Bundle {
val sel = Bool(INPUT)
val in0 = UInt(INPUT, w)
val in1 = UInt(INPUT, w)
val out = UInt(OUTPUT, w)
})
when(io.sel) {
io.out := io.in0
}.otherwise {
io.out := io.in1
}
}
object Mux2 {
def apply(sel: UInt, in0: UInt, in1: UInt): UInt = {
val m = new Mux2(in0.getWidth)
m.io.sel := sel.toBool()
m.io.in0 := in0
m.io.in1 := in1
m.io.out
}
}
テスターScalaのクラスIは、書いた:
/チゼルテンプレート/ SRC /テスト/スカラ座/ Mux4Test.scalaに
import Chisel.iotesters.{ChiselFlatSpec, Driver, PeekPokeTester}
class Mux4Test(c: Mux4) extends PeekPokeTester(c) {
val sel = 3
val (in0, in1, in2, in3) = (5, 7, 11, 15)
poke(c.io.sel, sel)
poke(c.io.in0, in0)
poke(c.io.in1, in1)
poke(c.io.in2, in2)
poke(c.io.in3, in3)
step(1)
System.out.println("Circuit: "+peek(c.io.out)
+" Expected: "+TestMux4.result(sel, in0, in1, in2, in3))
}
object TestMux4{
def result(sel: Int, in0: Int, in1: Int, in2: Int, in3: Int): Int = {
val out = sel match{
case 0 => in3
case 1 => in2
case 2 => in1
case 3 => in0
}
out
}
}
class Mux4Tester extends ChiselFlatSpec {
behavior of "Mux4"
backends foreach {backend =>
it should s"do Mux4 $backend" in {
Driver(() => new Mux4(4), backend)(c => new Mux4Test(c)) should be (true)
}
}
}
012それは5であるべきであるのに対し、次のように選択プロセスであるため出力 STEP 0 -> 1
Circuit: 0 Expected: 5
MUX4クラス(回路)から
重要な部分は、出力として0を返す:
00 - > IO .out = IN3 = 15
01 - > io.out = IN2 = 11
10 - > io.out = IN1 = 7
11 - > io.out = IN0 =私はヴァル・SEL = 3を書いたMux4Test.scalaクラスで5
。これのビット表示はです。したがって、私はin0 = 5と期待しています。
どこが間違っていますか?
また、実際のwikiの例にも同じバグがあることに気付きました。謝罪いたします!すぐに修正します。 – jkoenig
早速@jkoenigに感謝します。今それは動作します! – mtosch
私は、このエラーが今後発生することを確実にするために修正を加えました。これが原因で起こった不満について申し訳ありません。 – jkoenig