用于测试硬件的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窗口。位置和窗口。公开问题   java如何从存储在ArrayList<Node>中的动态生成的文本字段中获取文本?   java如何立即关闭InputStream?   如何重新启动Java程序以激活环境变量   java搜索字符串是否相差一个字符   java CFB模式输出与CTR输出相同;我做错什么了吗?   java如何在javaFX中将实例化对象添加到Stage   java如何在jtextarea上打印来自不同类的文本消息   java以编程方式确定IOException的原因?   限制Java NIO通道(文件或socket)中的可用内容   javajaxb与JDOM:是否可以使用JAXB更新xml文件   批处理文件到java测试   JavaFX:stage的作用是什么。可设置大小(false)是否会导致额外的页边距?   java有没有办法告诉IntelliJ按需堆叠参数?   java Seam会话范围的组件在下一个请求中消失   java Google Web Toolkit对开发复杂的java脚本有用吗?   安卓 studio java ArrayList正在检索最高值   java为什么递归地用随机数填充LinkedList时会出现StackOverflowException?