在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2685|回复: 6

[求助] axi wstrob问题

[复制链接]
发表于 2022-8-7 20:41:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
假定条件:
axi bus data位宽:32
问题如下
1. 4byte访问地址0~3,awaddr=0,awsize=2,wstrob=0xf,这个是正常对齐访问,没有问题。
2. 要访问地址0:awaddr=0, awsize=2, wstrob=0x1?还是awaddr=0,awsize=0,wstrob=0x1?
3. 要访问地址3:awaddr=0,awsize=2,wstrob=0x8?还是awaddr=0,awsize=0,wstrob=0x8?

看了axi spec,narrow访问那感觉没有硬性规定要怎么做。
我个人理解是awsize表示现在总线用到的数据位宽,而不是这次要传输的有效数据长度,不知理解是否正确?假如总线是256bit,我们可以发出awsize为0~5(1-32bytes),然后具体写哪个byte用wstrob来选通。按照我这种理解,上面第三种情况awaddr=0,awsize=0,wstrob=0x8是否非法,因为awsize说只有1个byte,但是wstrob却是高bit有效。

坐等哪个大神给我解解惑
 楼主| 发表于 2022-8-8 09:58:05 | 显示全部楼层
image.png
4567 good
 楼主| 发表于 2022-8-8 10:03:36 | 显示全部楼层
问了别人,strob只和数据位宽有关系,和awsize关系不大。awsize为0,地址访问1~4,strob分别为0010-0100-1000-0001。所以32位addr为0,awsize为0,strob为8是不对的,应该是addr为0,strob为0。addr为1,strob为2,addr为3,strob为8
发表于 2022-9-26 11:33:28 | 显示全部楼层
本帖最后由 Topiler 于 2022-9-27 09:05 编辑

我最近看AXI也是有这样的问题。发现AW和W通道分别有一个AWSIZE和WSTRB信号,参照我已经熟悉的AHB/APB协议,我一开始以为AWSIZE和WSTRB信号两者只需要一个就行了。后面我在ARM社区发现有AXI能够实现稀疏(sparse)写入,我才开始理解到AWSIE和WSTB信号各自的作用。

我目前认为:
  • WSTRB确实仅表示当前数据总线的有效字节通道,与AWSIZE没有什么关系。
  • AWSIZE是用来决定一个写操作burst后续的每拍(beat)的地址的信号。


我说的稀疏写入例子:
使用一个burst在0x0, 0x4, 0x8, 0xC地址分别写入1个字节:
  • AWBURST[1:0] = INCR
  • AWLAN[7:0] = 8'h3
  • AWSIZE[1:0] = 2'b10
  • WSTRB[3:0] 恒为 4'b0001
————————

*另外通过控制每拍的WSTRB[3:0]值可以实现更加奇怪的地址写入。
如SWTRB[3:0]依次为0001, 0010, 0100, 1000可以实现在0x0, 0x5, 0xA, 0xF地址的写入。

另外我有一个疑问,若AWSIZE和WSTRB的结合支持稀疏写入,那反过来是否支持密集/交叠写入?(名称随便取的)
就是AWSIZE较小而WSTRB较大(如4'b1111),那么这样前后每拍的写入地址会产生交叠。
(我知道这种burst写入应该没有应用需求,但协议是否允许?)

请有了解的大佬前来详细解释一下,谢谢啦
发表于 2022-9-27 00:39:26 | 显示全部楼层


Topiler 发表于 2022-9-26 11:33
我最近看AXI也是有这样的问题。发现AW和W通道分别有一个AWSIZE和WSTRB信号,参照我已经熟悉的AHB/APB协议, ...


例子里面写入地址是不对的,地址的增量取决于AxSIZE大小,所以burst transfer每拍的地址是0x0 0x1 0x2 0x3。窄传输最大的作用是在总线bridge位宽转换上,例如AXI64 bit位宽转换为32bit位宽,只需要设置STRB就可以

AxSIZE定义是the ARSIZE or AWSIZE signal specifies the maximum number of data bytes to transfer in each beat, or data transfer, within a burst. SPEC里面其实没有明确规定AWSIZE和WSTRB的关系,也就是说并没有严格要求说STRB被assert的个数一定要小于AWSIZE,AWSIZE的作用是确定了每一拍地址的增量,但个人认为从定义里面的理解AXSIZE表示这拍最大传输的byte个数,所以WSTRB被assert的个数最好不要超过AWSIZE,一般也都是这么理解的应该,也更符合窄传输的定义。更多你说这种“交叉写入”的情况,可能得要看具体设计的module能不能实现吧。


发表于 2022-9-27 09:00:49 | 显示全部楼层
本帖最后由 Topiler 于 2022-9-27 09:04 编辑


Pu1se 发表于 2022-9-27 00:39
例子里面写入地址是不对的,地址的增量取决于AxSIZE大小,所以burst transfer每拍的地址是0x0 0x1 0x2 0x ...


好的,感谢解答!我发现我AWSIZE写错了,应该是AWSIZE[1:0] = 2'b10,十分抱歉!
发表于 2022-9-27 11:23:43 | 显示全部楼层


Topiler 发表于 2022-9-26 11:33
我最近看AXI也是有这样的问题。发现AW和W通道分别有一个AWSIZE和WSTRB信号,参照我已经熟悉的AHB/APB协议, ...


对于最后提到的场景,其实可以拿商用的VIP试试,比如S家的,如果burst size设置为8bit, wstrb全部设置成0xF,会报错的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-9-23 13:28 , Processed in 0.018429 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表