用于测试硬件的python包(magma生态系统的一部分)

fault的Python项目详细描述


故障

Build StatusCoverage Status

用于测试硬件的python包(magma生态系统的一部分)。

API Documentation

CHANGELOG

安装

pip install fault

文档

查看fault tutorial

示例

这里有一个简单的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")

使用内部信号

故障支持窥视、预期和打印内部信号。对于 verilatortarget,您应该使用关键字参数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_regConfigReg中定义为 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)所需的逻辑 调用evalstepmain_time对于每个步骤的调用都递增。 输出.vcd文件将保存在文件logs/{circuit_name}中,其中 circuit_name是传递给Tester的电路的名称。这个logs 目录将与生成的线束放在同一目录中,其中 由directory关键字参数控制(默认情况下,这是 "build/")。

对于system-verilog/ncsim目标,默认情况下启用跟踪。为了 ncsim,跟踪将放在名为verilog.vcd的文件中 目录作为生成的线束。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Admob不使用webview   Java Wicket表单:序列化对象类“myClassName”时出错   java googledriveapi更新文件与我的帐户管理员   java简单框架未知xml标记解析   java如何使用主类和用户获取Spark应用程序ID   java如何更改自定义属性的值?   java有没有办法在jMock中找到未使用的期望值?   gradle运行任务的java文档?   java通过使用数组来存储文本文件的行,通过覆盖来删除文本文件中的行   用于表达式语言注入的java利用负载   java IDEStyle程序运行   java在运行时启用/禁用Springws   爪哇芦苇。formatNumber NullPointException   java为什么我的代码无法检测两个动态实体之间的碰撞?