【问题标题】:How can I make a blackbox in chisel 2.0?如何在凿子 2.0 中制作黑盒?
【发布时间】:2017-09-09 13:30:53
【问题描述】:

我写了这段代码: verilog 代码只是大门:

import Chisel._

class BB_tb extends Bundle {

    val a = Bits(INPUT,  1)
    val b = Bits(INPUT,  1)
    val c = Bits(OUTPUT, 1)
  }



class BlackBox_tb extends BlackBox { 
  val io = new BB_tb() 
}

但我在尝试运行它时遇到以下错误: 不知道是什么意思

运行 BlackBox_tb --backend c --targetDir ../emulator --compile [信息] 将 1 个 Scala 源代码编译到 /home/essam/intensivate-developer_resources-a25f02d3592d/chisel-tutorial/problems/target/scala-2.11/classes... [信息] 运行 TutorialProblems.TutorialProblems BlackBox_tb --backend c --targetDir ../emulator --compile [错误] (run-main-0) scala.MatchError: BlackBox_tb (of class java.lang.String) scala.MatchError: BlackBox_tb (of class java.lang.String) 在 TutorialProblems.TutorialProblems$.main(problems.scala:9) 在 TutorialProblems.TutorialProblems.main(problems.scala) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) [trace] 堆栈跟踪被抑制:运行最后一次编译:运行完整输出。 java.lang.RuntimeException:非零退出代码:1 在 scala.sys.package$.error(package.scala:27​​) [trace] 堆栈跟踪被抑制:运行最后一次编译:运行完整输出。 [错误](编译:运行)非零退出代码:1 [错误] 总时间:18 秒,2017 年 9 月 9 日下午 2:30:45 完成

【问题讨论】:

    标签: scala verilog chisel


    【解决方案1】:

    在 Chisel2 中完成这项工作有多重要? Chisel3 现在是标准版本,其中很多东西都更容易并且得到了更好的支持。 在 chisel3 中,以下对我有用。

    // See LICENSE for license details.
    
    package essan
    
    import chisel3._
    import chisel3.iotesters.PeekPokeTester
    import chisel3.util.HasBlackBoxResource
    
    class BBAnd extends BlackBox with HasBlackBoxResource {
      val io = IO(new Bundle {
        val a = Input(Bool())
        val b=  Input(Bool())
        val result = Output(Bool())
      })
      val blackBoxFloatVerilog = "/essan/BBAnd.v"
      setResource(blackBoxFloatVerilog)
    }
    
    class BBWrapper extends Module {
      val io = IO(new Bundle {
        val a = Input(Bool())
        val b=  Input(Bool())
        val result = Output(Bool())
      })
    
      val tb = Module(new BBAnd)
      tb.io.a := io.a
      tb.io.b := io.b
      io.result := tb.io.result
    }
    
    class BlackBox_tbTests(c: BBWrapper) extends PeekPokeTester(c) {
      // FILL THIS IN HERE
      poke(c.io.a, 1)
      poke(c.io.b, 1)
      // FILL THIS IN HERE
      step(1)
      expect(c.io.result, 1)
    }
    
    object BlackBox_tbTests {
      def main(args: Array[String]): Unit = {
        iotesters.Driver(() => new BBWrapper, "verilator") { c =>
          new BlackBox_tbTests(c)
        }
      }
    }
    

    我使用以下作为底层的verilog实现

    module BBAnd(
        input  [63:0] a,
        input  [63:0] b,
        output reg [63:0] result
    );
      always @* begin
      result = a & b;
      end
    endmodule
    

    唯一真正的诀窍是弄清楚在哪里放置 verilog 实现。 文件树的样子。

    src
    src/main
    src/main/resources
    src/main/resources/essan
    src/main/resources/essan/BBAnd.v
    src/main/scala
    src/main/scala/essan
    src/main/scala/essan/BlackBoxAnd.scala
    

    我从命令行运行了测试

    sbt 'runMain essan.BlackBox_tbTests'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      • 1970-01-01
      • 1970-01-01
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多