// build.sbt def scalacOptionsVersion(scalaVersion: String): Seq[String] = { Seq() ++ { // If we're building with Scala > 2.11, enable the compile option // switch to support our anonymous Bundle definitions: // https://github.com/scala/bug/issues/10047 CrossVersion.partialVersion(scalaVersion) match { case Some((2, scalaMajor: Long)) if scalaMajor < 12 => Seq() case _ => Seq("-Xsource:2.11") } } }
def javacOptionsVersion(scalaVersion: String): Seq[String] = { Seq() ++ { // Scala 2.12 requires Java 8. We continue to generate // Java 7 compatible code for Scala 2.11 // for compatibility with old clients. CrossVersion.partialVersion(scalaVersion) match { case Some((2, scalaMajor: Long)) if scalaMajor < 12 => Seq("-source", "1.7", "-target", "1.7") case _ => Seq("-source", "1.8", "-target", "1.8") } } }
name := "MyChisel" version := "3.2-SNAPSHOT" scalaVersion := "2.12.6" crossScalaVersions := Seq("2.11.12", "2.12.4")
resolvers += "My Maven" at "https://raw.githubusercontent.com/sequencer/m2_repository/master" // bug fix from https://github.com/freechipsproject/chisel3/wiki/release-notes-17-09-14 scalacOptions ++= Seq("-Xsource:2.11")
* * * AnALU is a minimal start for a processor. * */
package simple
import chisel3._ import chisel3.util._
/** * This is a very basic ALU example. */ classAluextendsModule{ val io = IO(newBundle { val fn = Input(UInt(2.W)) val a = Input(UInt(4.W)) val b = Input(UInt(4.W)) val result = Output(UInt(4.W)) })
// Use shorter variable names val fn = io.fn val a = io.a val b = io.b
val result = Wire(UInt(4.W)) // some default value is needed result := 0.U
// The ALU selection switch(fn) { is(0.U) { result := a + b } is(1.U) { result := a - b } is(2.U) { result := a | b } is(3.U) { result := a & b } }
// Output on the LEDs io.result := result }
/** * A top level to wire FPGA buttons and LEDs * to the ALU input and output. */ classAluTopextendsModule{ val io = IO(newBundle { val sw = Input(UInt(10.W)) val led = Output(UInt(10.W)) })
val alu = Module(newAlu())
// Map switches to the ALU input ports alu.io.fn := io.sw(1, 0) alu.io.a := io.sw(5, 2) alu.io.b := io.sw(9, 6)
// And the result to the LEDs (with 0 extension) io.led := alu.io.result }
// Generate the Verilog code objectAluMainextendsApp{ println("Generating the ALU hardware") (new chisel3.stage.ChiselStage).emitVerilog(newAluTop(), Array("--target-dir", "generated"))
classAdder(n: Int) extendsModule{ val io = IO(newBundle { val a = Input(UInt(n.W)) val b = Input(UInt(n.W)) val s = Output(UInt(n.W)) val cout = Output(UInt(1.W)) })