val path = System.getProperty("user.dir") + "/source/load-ivy.sc" interp.load.module(ammonite.ops.Path(java.nio.file.FileSystems.getDefault().getPath(path))) import chisel3._ import chisel3.util._ import chisel3.tester._ import chisel3.tester.RawTester.test import dotvisualizer._ class Mux4to1 extends Module { val io = IO(new Bundle { val in = Input(UInt(4.W)) val out = Output(UInt(1.W)) val sel = Input(UInt(2.W)) }) val p0 = io.in(0) & ~io.sel(0) & ~io.sel(1) val p1 = io.in(1) & io.sel(0) & ~io.sel(1) val p2 = io.in(2) & ~io.sel(0) & io.sel(1) val p3 = io.in(3) & io.sel(0) & io.sel(1) io.out := p0 | p1 | p2 | p3 } test(new Mux4to1()) { c => for (s <- 0 to 3) { val mask = 1 << s c.io.sel.poke(s.U) for (i <- 0 to 15) { c.io.in.poke(i.U) c.io.out.expect(if ((i&mask)!=0) 1.U else 0.U) } } } println("SUCCESS!!") class Mux4to1 extends Module { val io = IO(new Bundle { val in = Input(UInt(4.W)) val out = Output(UInt(1.W)) val sel = Input(UInt(2.W)) }) when(io.sel===0.U) { io.out := io.in(0) }.elsewhen (io.sel===1.U) { io.out := io.in(1) }.elsewhen (io.sel===2.U) { io.out := io.in(2) }.otherwise { io.out := io.in(3) } } class Mux4to1 extends Module { val io = IO(new Bundle { val in = Input(UInt(4.W)) val out = Output(UInt(1.W)) val sel = Input(UInt(2.W)) }) io.out := 0.U // safeguard switch(io.sel) { is(0.U) { io.out := io.in(0) } is(1.U) { io.out := io.in(1) } is(2.U) { io.out := io.in(2) } is(3.U) { io.out := io.in(3) } } } class Alu extends Module { val io = IO(new Bundle { val a = // ..συμπληρώστε.. val b = // ..συμπληρώστε.. val out = // ..συμπληρώστε.. val s = // ..συμπληρώστε.. }) when // ..συμπληρώστε.. } test(new Alu()) { c => for (aval <- 0 to 1) { // για τις 2 πιθανές τιμές του io.a c.io.a.poke(aval.U) for (bval <- 0 to 1) { // για τις 2 πιθανές τιμές του io.b c.io.b.poke(bval.U) // έλεγχος εξόδων κάνοντας τις αντίστοιχες πράξεις με τη Scala c.io.s.poke(0.U) // AND c.io.out.expect((aval & bval).U) c.io.s.poke(1.U) // OR c.io.out.expect((aval | bval).U) c.io.s.poke(2.U) // XOR c.io.out.expect((aval ^ bval).U) c.io.s.poke(3.U) // + val result = (aval+bval) & 0x1 // αφαίρεση πιθανού κρατουμένου από το αποτέλεσμα της Scala c.io.out.expect(result.U) } } } println("SUCCESS!!") class Alu extends Module { val io = IO(new Bundle { val a = // ..συμπληρώστε.. val b = // ..συμπληρώστε.. val out = // ..συμπληρώστε.. val s = // ..συμπληρώστε.. }) io.out := 0.U // safeguard switch // ..συμπληρώστε.. }