用于测试硬件的python包(magma生态系统的一部分)
fault的Python项目详细描述
故障
用于测试硬件的python包(magma生态系统的一部分)。
安装
pip install fault
文档
示例
这里有一个简单的alu定义在岩浆中。
importmagmaasmimportmantleclassConfigReg(m.Circuit):IO=["D",m.In(m.Bits(2)),"Q",m.Out(m.Bits(2))]+ \ m.ClockInterface(has_ce=True)@classmethoddefdefinition(io):reg=mantle.Register(2,has_ce=True,name="conf_reg")io.Q<=reg(io.D,CE=io.CE)classSimpleALU(m.Circuit):IO=["a",m.In(m.UInt(16)),"b",m.In(m.UInt(16)),"c",m.Out(m.UInt(16)),"config_data",m.In(m.Bits(2)),"config_en",m.In(m.Enable),]+m.ClockInterface()@classmethoddefdefinition(io):opcode=ConfigReg(name="config_reg")(io.config_data,CE=io.config_en)io.c<=mantle.mux([io.a+io.b,io.a-io.b,io.a*io.b,io.a/io.b],opcode)
下面是一个使用配置接口的故障测试示例 内部寄存器上的值,并检查执行 预期操作。
importoperatorimportfaultops=[operator.add,operator.sub,operator.mul,operator.floordiv]tester=fault.Tester(SimpleALU,SimpleALU.CLK)tester.circuit.CLK=0tester.circuit.config_en=1foriinrange(0,4):tester.circuit.config_data=itester.step(2)tester.circuit.a=3tester.circuit.b=2tester.eval()tester.circuit.c.expect(ops[i](3,2))
我们可以用三个不同的模拟器运行此程序
tester.compile_and_run("verilator",flags=["-Wno-fatal"],directory="build")tester.compile_and_run("system-verilog",simulator="ncsim",directory="build")tester.compile_and_run("system-verilog",simulator="vcs",directory="build")
使用内部信号
故障支持窥视、预期和打印内部信号。对于
verilator
target,您应该使用关键字参数magma_opts
和
"verilator_debug"
设置为true。这将导致coreir编译verilog
带有必需的调试注释。示例:
tester.compile_and_run("verilator",flags=["-Wno-fatal"],magma_opts={"verilator_debug":True},directory="build")
如果使用mantle.Register
实现中的coreir
,则可以
还可以使用value
字段直接插入内部寄存器值。通知
conf_reg
在ConfigReg
中定义为
mantle.Register
并且测试台通过设置confg_reg.value
来戳它。
等于1
。
tester=fault.Tester(SimpleALU,SimpleALU.CLK)tester.circuit.CLK=0# Initializetester.step(2)foriinreversed(range(4)):tester.circuit.config_reg.conf_reg.value=itester.step(2)tester.circuit.config_reg.conf_reg.O.expect(i)
常见问题解答
如何生成有故障的波形?
当使用verilator
和时,fault支持生成.vcd
转储
system-verilog/ncsim
目标。
对于verilator
目标,使用flags
关键字参数传递
--trace
标志。例如,
tester.compile_and_run("verilator", flags=["-Wno-fatal", "--trace"])
必须将--trace
标志传递给verilator,以便它生成代码
支持波形转储。故障产生的测试线束将
包括为每个调用tracer->dump(main_time)
所需的逻辑
调用eval
和step
。main_time
对于每个步骤的调用都递增。
输出.vcd
文件将保存在文件logs/{circuit_name}
中,其中
circuit_name
是传递给Tester
的电路的名称。这个logs
目录将与生成的线束放在同一目录中,其中
由directory
关键字参数控制(默认情况下,这是
"build/"
)。
对于system-verilog/ncsim
目标,默认情况下启用跟踪。为了
ncsim
,跟踪将放在名为verilog.vcd
的文件中
目录作为生成的线束。