[英]How can I make a blackbox in chisel 2.0?
我寫了這段代碼: 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-后端c --targetDir ../emulator --compile [info]將1個Scala源代碼編譯到/home/essam/intensivate-developer_resources-a25f02d3592d/chisel-tutorial/problems/target/scala-2.11/classes。 。[info]正在運行TutorialProblems.TutorialProblems BlackBox_tb-后端c --targetDir ../emulator --compile [錯誤](run-main-0)scala.MatchError:BlackBox_tb(類java.lang.String)scala.MatchError :位於TutorialProblems.TutorialProblems $ .main(problems.scala:9)處的BlackBox_tb(屬於java.lang.String類),位於sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)處,位於sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)處.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)位於java.lang.reflect.Method.invoke(Method.java:498)上的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[trace]堆棧跟蹤抑制:運行最后一次compile:run以獲取完整輸出。 java.lang.RuntimeException:非零退出代碼:scala.sys.package $ .error(package.scala:27)處為1 [trace]禁止堆棧跟蹤:運行最后一次compile:run以獲取完整輸出。 [錯誤](編譯:運行)非零退出代碼:1 [錯誤]總時間:18秒,已完成2017年9月9日2:30:45 PM
在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'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.