aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/Emitter.scala
blob: 09302fb36c0c145b3901cbfaaa76a4ada9e6a32f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package firrtl

import com.typesafe.scalalogging.LazyLogging
import java.nio.file.{Paths, Files}
import java.io.Writer
import java.io.Reader

import scala.sys.process._
import scala.io.Source

import Utils._
import firrtl.passes._

trait Emitter extends LazyLogging {
  def run(c: Circuit, w: Writer)
}

object FIRRTLEmitter extends Emitter {
  def run(c: Circuit, w: Writer) = w.write(c.serialize)
}

object VerilogEmitter extends Emitter {
  // Currently just trap into Stanza
  def run(c: Circuit, w: Writer) 
  {
    logger.debug(s"Verilog Emitter is not yet implemented in Scala")
    val toStanza = Files.createTempFile(Paths.get(""), "verilog", ".fir")
    val fromStanza = Files.createTempFile(Paths.get(""), "verilog", ".fir")
    Files.write(toStanza, c.serialize.getBytes)

    val cmd = Seq("firrtl-stanza", "-i", toStanza.toString, "-o", fromStanza.toString, "-b", "verilog")
    logger.debug(cmd.mkString(" "))
    val ret = cmd.!
    // Copy from Stanza output to user requested outputFile (we can't get filename from Writer)
    Source.fromFile(fromStanza.toString) foreach { w.write(_) }

    Files.delete(toStanza)
    Files.delete(fromStanza)
  }
}