簡體   English   中英

在Chisel中傳遞字符串

[英]Pass strings in Chisel

有沒有在Chisel中傳遞字符串的方法? 例如,我想傳遞一個字符串ATGC ,輸出為A0,T為1,G為2,C為3 這可能嗎? 如果是的話,有人可以解釋一下嗎? 謝謝。

使用答案中的代碼會產生以下錯誤:

[error] java.lang.NoSuchMethodException:  problems.ATGCHandler.main([Ljava.lang.String;)
[error]     at java.lang.Class.getMethod(Class.java:1786)
[error]     at sbt.Run.getMainMethod(Run.scala:99)
[error]     at sbt.Run.run0(Run.scala:86)
[error]     at sbt.Run.execute$1(Run.scala:65)
[error]     at sbt.Run.$anonfun$run$3(Run.scala:69)
[error]     at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
[error]     at scala.util.Try$.apply(Try.scala:209)
[error]     at sbt.Run.directExecute$1(Run.scala:69)
[error]     at sbt.Run.run(Run.scala:78)
[error]     at sbt.Defaults$.$anonfun$bgRunMainTask$6(Defaults.scala:1147)
[error]     at sbt.Defaults$.$anonfun$bgRunMainTask$6$adapted(Defaults.scala:1142)
[error]     at sbt.internal.BackgroundThreadPool.$anonfun$run$1(DefaultBackgroundJobService.scala:366)
[error]     at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
[error]     at scala.util.Try$.apply(Try.scala:209)
[error]     at sbt.internal.BackgroundThreadPool$BackgroundRunnable.run(DefaultBackgroundJobService.scala:289)
[error]     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error]     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error]     at java.lang.Thread.run(Thread.java:748)
[error] (Test / runMain) java.lang.NoSuchMethodException: problems.ATGCHandler.main([Ljava.lang.String;)

Chisel對Character的支持有限,可以用來做類似String的工作。 仔細處理編碼后,您可以編寫如下內容:

import chisel3._
import chisel3.util._
class ATGCHandler extends Module {
  val io = IO(new Bundle {
    val char = Input(UInt(8.W))
    val encoding = Output(Valid(UInt(2.W)))
  })
  // Defaults
  io.encoding.valid := false.B
  io.encoding.bits := DontCare
  // Encode Valid Inputs
  switch (io.char) {
    is ('A'.U) {
      io.encoding.valid := true.B
      io.encoding.bits := 0.U
    }
    is ('T'.U) {
      io.encoding.valid := true.B
      io.encoding.bits := 1.U
    }
    is ('G'.U) {
      io.encoding.valid := true.B
      io.encoding.bits := 2.U
    }
    is ('C'.U) {
      io.encoding.valid := true.B
      io.encoding.bits := 3.U
    }
  }
}

或者如果你感覺特別鑿子,你可以編寫如下的代碼:

  // Encode Valid Inputs
  val mapping = Map('A' -> 0, 'T' -> 1, 'G' -> 2, 'C' -> 3)
  mapping.foreach { case (key, value) =>
    when (io.char === key.U) {
      io.encoding.valid := true.B
      io.encoding.bits := value.U
    }
  }

編輯:要構建它,您可以使用以下主要功能:

object ATGCDecoderMain {
  def main(args: Array[String]): Unit = {
    chisel3.Driver.execute(args, () => new ATGCDecoder)
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM