棋子 · 2020年01月14日

AXI 4 UPsizer Downsizer模块的协议检查器WSTRB出错?

我有一个AXI模块。来自上位主机的正在执行事务W / R。主数据总线的宽度为256位。事务进入模块,模块分成2。> bcoz下侧是两个128位数据总线宽度的从站。数据总线WDATA [255:128]的高位传送到从站1,数据总线WDATA [127:0]的低位传送到从站2。与连接到从站1的WSTRB [32:16]和连接到WSTRB [15:0]的情况相同到从站2。

但是在我的单元级测试中,有3个协议检查器。1用于主机,2用于从机1&2。当主机启动事务时,它不会引发任何错误。但是对于从设备,它会引发错误: 必须仅根据正确的字节通道(由起始地址,传输大小和拍数确定),对写选通信号进行声明。

问题:wstrb&awaddr&awsize&awlen&awburst如何为从站1和从站2工作,因为它们是数据总线宽度的一半。

1 个回答 得票排序 · 时间排序
极术小姐姐 · 2020年01月14日

只是进一步考虑,我认为您不能轻易做到这一点。

256位的AWADDR值给出了256位的起始地址,对于事务中的每次传输,此值都将按AWSIZE值递增。

如果尝试将这256位传输拆分为2个128位从站,每个从站占用数据总线的一半,则每个128位从站将看不到合法的AXI事务。

例如,对于看到WDATA [127:0]的128位从设备,通常256位起始地址是正确的,但是需要看到WDATA [255:128]的128位从设备提供修改后的AWADDR值。 ,修改方式是将起始地址增加16个字节,以便寻址256位路径的上半部分。(我之所以这样说,通常是因为起始地址可能未对齐,这只会造成更多的复杂性)。

然后,对于256位事务中的每个后续传输,下游128位从属不能仅通过其本地AWSIZE值(大概显示128位传输)来递增其自身的起始地址,因为128位递增的数据就是256位从位主机在256位数据总线的另一半上写了出来。

我猜您可以驱动128位总线的AWLEN值来表示原始突发长度的两倍,然后在128位总线上的每个第二次传输都必须具有WSTRB = 16'b0来表示没有数据被写入寻址数据实际上到达了另一个128位从站。

但是我在这里猜测很多。我只是看不到如何轻松地工作。

例如,如果256位主机进行4节拍突发以开始地址0x0,则data列中的数字表示128位数据值...

地址数据

0x00 2 1

0x20 4 3

0x40 6 5

0x60 8 7

...您想在128位从站中存储什么?

wdata [127:0]上的奴隶wdata [255:128]上的奴隶

地址数据地址数据

0x00 1 0x00

0x10 0x10 2

0x20 3 0x20

0x30 0x30 4

0x40 5 0x40

0x50 0x50 6

0x60 7 0x60

0x70 0x70 8

还是要将1 3 5 7数据存储在另一个从站中相同地址的0x00 0x10、0x20和0x30以及2 4 6 8数据中?

无论您需要什么,都需要确保提供给每个从站的AWADDR,AWLEN和AWSIZE值为您提供所需的起始地址和地址增量。

你的回答