//| mvnDeps: //| - com.typesafe:config:1.4.3 import mill._ import mill.scalalib._ trait SpinalModule extends ScalaModule { def scalaVersion = "2.13.14" override def mvnDeps = Seq( mvn"com.github.spinalhdl::spinalhdl-core:1.12.3", mvn"com.github.spinalhdl::spinalhdl-lib:1.12.3" ) override def scalacPluginMvnDeps = Seq(mvn"com.github.spinalhdl::spinalhdl-idsl-plugin:1.12.3") def generateVhdl: T[PathRef] = Task { val name = moduleDir.last val cp = runClasspath().map(_.path).mkString(java.io.File.pathSeparator) os.proc("java", s"-DspinalTargetDir=${Task.dest}", "-cp", cp, s"$name.genvhdl") .call(cwd = moduleDir / os.up, stdout = os.Inherit, stderr = os.Inherit) PathRef(Task.dest / s"$name.vhd") } def pinsFile: T[PathRef] = Task.Source(moduleDir / "pnr" / s"${moduleDir.last}_pins.tcl") def sdcFile: T[PathRef] = Task.Source(moduleDir / "pnr" / s"${moduleDir.last}.sdc") def qprojectScript: T[PathRef] = Task.Source(moduleDir / os.up / "scripts" / "create_quartus_project_settings.tcl") def qproject: T[PathRef] = Task { val name = moduleDir.last val vhdl = generateVhdl() val pins = pinsFile() val sdc = sdcFile() val script = qprojectScript() assert(os.exists(sdc.path), s"SDC file not found: ${sdc.path}") os.proc("quartus_sh", "--64bit", "-t", script.path, "-projectname", name, "-vhdlfile", vhdl.path, "-pinfile", pins.path, "-sdcfile", sdc.path) .call(cwd = Task.dest, stdout = os.Inherit, stderr = os.Inherit) PathRef(Task.dest) } def quartusgui() = Task.Command { val name = moduleDir.last val projectDir = qproject().path os.proc("quartus", "--64bit", projectDir / s"$name.qpf") .call(cwd = projectDir, stdout = os.Inherit, stderr = os.Inherit) } def prog() = Task.Command { val sof = synthesis().path os.proc("quartus_pgm", "--64bit", "-c", "USB-Blaster", "--mode", "jtag", s"--operation=p;$sof") .call(stdout = os.Inherit, stderr = os.Inherit) } def synthesis: T[PathRef] = Task { val name = moduleDir.last val projectDir = qproject().path os.proc("quartus_sh", "--64bit", "--flow", "compile", projectDir / s"$name.qpf") .call(cwd = projectDir, stdout = os.Inherit, stderr = os.Inherit) PathRef(projectDir / s"$name.sof") } } object top_simple extends SpinalModule object top_count extends SpinalModule