2017-09-09 3 views
1

j'ai écrit ce code: Le code verilog est juste la porte:Comment puis-je faire une blackbox dans Chisel 2.0?

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() 
} 

mais je reçois ces erreurs lorsque vous essayez de l'exécuter: Je ne sais pas ce que cela signifie

run BlackBox_tb --backend c --targetDir ../emulator --compile [info] Compiling 1 Scala source to /home/essam/intensivate-developer_resources-a25f02d3592d/chisel-tutorial/problems/target/scala-2.11/classes... [info] Running TutorialProblems.TutorialProblems BlackBox_tb --backend c --targetDir ../emulator --compile [error] (run-main-0) scala.MatchError: BlackBox_tb (of class java.lang.String) scala.MatchError: BlackBox_tb (of class java.lang.String) at TutorialProblems.TutorialProblems$.main(problems.scala:9) at TutorialProblems.TutorialProblems.main(problems.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) [trace] Stack trace suppressed: run last compile:run for the full output. java.lang.RuntimeException: Nonzero exit code: 1 at scala.sys.package$.error(package.scala:27) [trace] Stack trace suppressed: run last compile:run for the full output. [error] (compile:run) Nonzero exit code: 1 [error] Total time: 18 s, completed Sep 9, 2017 2:30:45 PM

Répondre

0

Quelle est l'importance de faire cela dans Chisel2? Chisel3 est maintenant la version standard, et beaucoup de ces choses sont plus faciles et mieux prises en charge. Dans Chisel3 le travail suivant pour moi.

// 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) 
    } 
    } 
} 

J'ai utilisé ce qui suit comme la mise en œuvre sous-jacente Verilog

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

Le seul vrai truc a été de déterminer où mettre la mise en œuvre Verilog. L'arborescence de fichiers ressemble.

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 

j'ai couru le test de la ligne de commande avec

sbt 'runMain essan.BlackBox_tbTests'