cocotb中的插入idle(空闲)和backpressure(背压)讲解

官网的文档说明

Library Reference — cocotb 1.1 documentation,主要是说明了输入的数据,会和背压函数,idle,形成多个测试例。测试例的数量是上述三者的排列组合。

前提

我的测试代码中,rst会拉高2个时钟周期,然后代码还会阻塞执行一个时钟周期(await),才会进行别的逻辑

总的测试函数调用如下

波形

单讲idle_inserter

例子1

首先是idle_inserter,举例下面的代码

        factory.add_option("idle_inserter_spkt", [None])

表示,以axis形式输入的数据,会在rst之后的一个时钟周期,一直拉高,直到数据全部给到DUT(Device Under Test)为止。然后就会拉低。

例子2

再举一个例子,这个函数,意思是,rst

def cycle_pause():
    return itertools.cycle([1, 1, 1, 0])   
     
factory.add_option("idle_inserter_spkt", [cycle_pause])

如下图,会插入3拍的idle,也就是s_tvalid不拉高。然后最后一个0意思是不插入idle,所以tvalid会拉高一个时钟周期。然后进行一个循环。第二个“3个clk”之后,时钟周期拉高一个时钟周期之后,为什么没有拉低呢?这就是AXIS总线,下一级没有把数据接收走之前,tvalid和数据必须做保持,直到DUT的ready拉高,数据被接收。

当发送的数据都被接收之后,tvalid也就不会再拉高了。

单讲backpressure_inserter

例子1

表明不插入背压,rst+一个时钟周期之后,测试环境给DUT的一直会是ready为1。

        factory.add_option("backpressure_inserter", [None])

对应的波形图如下

例子2

这个函数表明,rst+一个周期之后,会先插入3个背压,然后给一个ready。

def cycle_pause():
    return itertools.cycle([1, 1, 1, 0])       

factory.add_option("backpressure_inserter", [cycle_pause])

波形如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值