string - 在 Chisel 中传递字符串
问题描述
有没有在 Chisel 中传递字符串的方法?例如,我想传递一个字符串ATGC并将输出作为A 的 0、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 对 Characters 有一些有限的支持,可以用来做类似字符串的工作。通过仔细处理编码,您可以编写如下内容:
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
}
}
}
或者,如果您感觉特别 Chisel-y,您可以将编码编写为:
// 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)
}
}
推荐阅读
- python - 在 Google Colab 中使用 JupyterDash 加载外部样式表
- javascript - 如何使用睡眠/延迟遍历 javascirpt 数组?
- jquery - Jquery Filer 图片上传问题
- mongodb - MongoDB Self Join 并从文档数组中仅选择子项
- c# - 如何实现 Google API 刷新令牌
- r - 无法在 AWS EC2 上运行的 R 服务器上安装 RDCOMClient
- r - 使用 scale_x_time 设置限制
- python - 如何对多个文本文件进行数据清理
- c++ - C++ __restrict 的用途是什么以及如何正确使用它?
- mongodb - Mongo获取多个集合查询