对于Verilog中定义的模块,我有以下测试工具:
class TestMCQDiv extends FlatSpec with ChiselScalatestTester with Matchers {
behavior of "MCQDiv"
// Dependent Variables for Testing
val integerWidth = 50
val rationalWidth = 10
val bitWidth = integerWidth + rationalWidth
// Module and Test Dependencies
val fepar = new UFSMulticycleConstraints(integerWidth, rationalWidth)
//val scale = 124.0
val scale = 1.0
val i = 36.0
val n = 2.0
it should "Test the MCQDiv Module" in {
test(new mc_qdiv(fepar)) { dut =>
// iterate through each test value
for (t <- -7 to -7) {
// Initialize each value
dut.io.i_dividend.poke(1.S(15.W))
dut.io.i_divisor.poke(1.S(15.W))
dut.io.i_start.poke(1.B)
while(dut.io.o_complete.peek().litValue().toDouble == 0) {
dut.io.i_clk.step(1)
}
println("Test( " + t + " / " + 1 + " ) = " + dut.io.o_quotient_out.peek())
}
}
}
}在这里定义了MCQDiv的实现:
class qdiv(fepar: UFSMulticycleConstraints) extends BlackBox with HasBlackBoxResource {
val io = IO(new Bundle{
val i_dividend: SInt = Input(SInt(fepar.bit_width.W))
val i_divisor: SInt = Input(SInt(fepar.bit_width.W))
val i_start: Bool = Input(Bool())
val i_clk: Clock = Input(Clock())
val o_quotient_out: SInt = Output(SInt(fepar.bit_width.W))
val o_complete: Bool = Output(Bool())
val o_overflow: Bool = Output(Bool())
})
addResource("/mc_qdiv.v")
}
class mc_qdiv(fepar: UFSMulticycleConstraints) extends Module {
val io = IO(new Bundle {
val i_dividend: SInt = Input(SInt(fepar.bit_width.W))
val i_divisor: SInt = Input(SInt(fepar.bit_width.W))
val i_start: Bool = Input(Bool())
val i_clk: Clock = Input(Clock())
val o_quotient_out: SInt = Output(SInt(fepar.bit_width.W))
val o_complete: Bool = Output(Bool())
val o_overflow: Bool = Output(Bool())
})
val bb_qdiv: qdiv = Module(new qdiv(fepar))
bb_qdiv.io.i_dividend := io.i_dividend
bb_qdiv.io.i_divisor := io.i_divisor
bb_qdiv.io.i_start := io.i_start
bb_qdiv.io.i_clk := io.i_clk
io.o_quotient_out := bb_qdiv.io.o_quotient_out
io.o_complete := bb_qdiv.io.o_complete
io.o_overflow := bb_qdiv.io.o_overflow
}最初,我面临一个无法找到Verilog模块的问题:
WARNING: external module "qdiv"(:qdiv)was not matched with an implementation。
下面的站点使我意识到后端编译器需要更改为Verilator。按照在那里发布的说明,我可以通过在编译器命令中添加以下标志来消除先前的警告:-z verilator。完整的命令如下所示:sbt 'testOnly Exp.TestMCQDiv -- -z verilator'现在编译(不正确)在没有执行任何测试的情况下完成。我确实尝试过在Github上查看一个示例Github实现,但是没有使用peek-poke测试的例子,我非常想使用它。吉塞尔有什么基本的东西,我可能会忘记(我对吉塞来说是新手)?还是有人知道我做错了什么?
附加信息:我确实安装了Verilator : Verilator 4.106 2020-12-02 rev 4.104-91-gb350b6a0f。我也在使用Chisel3。
发布于 2022-02-14 17:40:18
-z是筛选要运行的测试的最有规模的开关。如果您没有任何匹配该名称的测试,则不会运行任何测试。(您可以查看scalatest docs:跑步者中最可缩放的命令行参数的完整列表),您可以使用VerilatorBackendAnnotation选择chiseltest Verilator后端。参见这里的一个示例:https://github.com/ucb-bar/chiseltest/blob/master/src/test/scala/chiseltest/iotesters/examples/GCDSpec.scala
https://stackoverflow.com/questions/71111063
复制相似问题