x2p设计与验证

发布时间 2023-12-27 10:13:02作者: allonicdzn

最近点了一下额外的技能点,简单学习了一下UVM环境和vip的使用,想写个dut验一下,设计想要简单了解验证的规则很合理吧

因为想要用到dw axi/apb vip,所以打算直接写个x2p(笑)

列一下x2p的feature

支持outstanding

支持多个apb口

仅支持burst type为incr的传输

仅支持len<16的传输

axi dw 32 aw 32

apb dw 32 aw 32 

 

axi interface logic :
aw:
awready在fifo没full时候拉高
aw有效之后把事务的属性push进awfifo,fifo不空则表示当前有待处理的outstanding事务,
压入的有效数据有{awid,awlen,awaddr}
awfifo确定支持outstanding事务的个数
w:
wready在fifo 不full时候拉高
w有效后把wdata和wstrb写入wfifo,当这个fifo非空时候开始比较fifo的写指针,
当写指针走到足够len+1的位置表示已经满足了当前事务的整个传输,
没有使用w用wlast进行匹配,反正就是表示当前axi上游写事务结束
wfifo确定支持burst len的个数
 <apb_wr_start>
这里的地址需要计算(if burst type=incr)
假设axi写入地址为0x0000_0000,busrtsize是32,len是8,apb data width 32
则需要执行多次(8次)apb的写操作,数据共有32x8=256bit
地址依次为0 4 8 c 10 14 18 1c
同样地,也就需要读wfifo八次, (执行这个事务的时候有地方需要被反压吗?)
(需要有计数器记这个数吗,或者反正有一个计数器,直接用那个得出的最高地址匹配得了)
(last信号可以一起保留在fifo中用来反馈bresp?)
b:
这里fifo里存放的数据主要是
bresp(OK则00)
bid(来源自awid)
bvalid(握手信号)
实际上是直接连出去等上游的bready信号
每次bvalid&&bready==1了则表示当前的b事务可以从fifo中pop出去,
那么什么时候push进fifo呢,就是执行写操作<apb_wr_end>的时候,把awid push进bfifo

ar:
和上面aw类似,push进arfifo的是{arid,araddr,arlen},
fifo非空表示当前至少有一个待处理的axi读事务
r:
len!=0时,表示apb侧需要做多次读事务,需要有计数器来设定地址,执行完再返回id
fifo里的数据是{rid,rresp,rstrb,rdata},
pop:就非空并且rvalid&&rready的时候就可以,empty取反直接拿来当作rvalid,
push:就从下游从对应地址拿到对应的数了,id的匹配需要做吗?直接依次返回?


输出的多个psel直接靠地址片选即可
因为是个x2p,所以resp DECRERR的情况可能是
1. 地址不存在
2. last信号错误,last信号表示的不是当前传输的最后一个,也许可以通过传输数据大小来判断
3. apb 超时 enable开了好久也没等到preadyid匹配(AXI4),
这里也可以使