张sir的总结_day2_apb driver和monitor相关

apb协议要求发送数据时,看到第一个时钟上升沿就要将pwrite、paddr、psel以及数据准备好,也就是说uvm环境中的driver要满足:

第一个周期做以下动作:

 @(posedge clk)begin

        vif.psel    <= 1;

        vif.pwrite <= 1;

        vif.paddr <= tr.addr;

        vif.pwdata   <= tr.data;

        vif.penable <= 0;

end

写数据个第一个阶段完成。在看到第二个时钟上升沿后,将penable使能信号拉高。

第二个周期做如下动作:

@(posedge clk)begin

        vif.penable <= 1;

end

第三个时钟上升沿看到从机的pready拉高,表明一笔传输完成:

@(posedge clk iff vif.pready)begin

        vif.penable <= 0;

end

同时下一笔数据的传输也就开始。

时序图如下:

apb读数据时,看到第一个时钟上升沿时,将paddr、pwrite、psel等信号准备好,driver要满足

第一个周期做如下动作:

@(posedge clk)begin

        vif.sel <= 1;

        vif.pwrite <= 0;

        vif.addr <=tr.addr;

end

第二个周期将选通信号penable拉高。

@(posedge clk)begin

        vif,penable <= 1;

        tr.data <= vif.prdata

end

第三个时钟上升沿看到pready证明这笔读操作完成

@(posedge clk iff  vif.pready)begin

        vif.penable <= 0;

end

以上是driver驱动读写transaction。同样的,monitor进行采样的时候同样要满足apb时序。

@(posedge clk iff psel)begin

        tr.addr = vif.paddr;

        tr.direction = (vif.pwrite == 1) ? APB_WRITE:APB_READ;

        if(tr.direction == APB_WRITE)begin

                tr.data = vif.pwdata;

        end

end

@(posedge clk)begin

        if(tr.direction == APB_READ)begin

                tr.data = vif.prdata;

        end

end

欢迎大佬批评指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值