关于axi协议里面burst的4k问题

本文探讨了AXI总线Burst操作在不同边界条件下的行为规范,特别是关于4K边界的问题。解释了为何协议规定Burst操作不可跨越4K边界,并介绍了如何处理可能跨越边界的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AXI总线,burst操作,不能跨4K边界问题! 在Master_A设计中,假如Master_A只操作一块64M SDRAM(此Master_A不操作任何其他Slave),读写的数据量远远大于4K。因此其中某个Burst的操作可能 会出现在4K边界上。 请问: 在这样的情况下,Master_A设计的Burst操作是否需要遵守4k边界的约定?

       协议中之所以规定一个burst不能跨越4K边界是为了避免一笔burst交易访问两个slave(每个slave的地址空间是4K/1K对齐的)。假如一个burst交易访问了两个slave A 和B(A在前B在后),那么只有A收到了地址和控制信息,而B不会收到地址和控制信息,因此只有A响应B并无响应,这就会导致此笔burst交易无法完成(B无法返回最后一笔transfer)。因此如果你必须确定系统中所有slave中地址空间最小的那一个,假设是1M,这样你的burst边界可以大于4K至1M。但还是不建议这么做,毕竟一个burst跨越4K边界的概率还是较低的,如果真的跨越了就拆分。

 Q1:不是一个burst的最长是16(len)×128byte(size)=2Kbyte吗,所以一个burst怎么超过4K的边界?

 Q2:“4K/1K对齐的”是什么意思?

 Q3:“如果真的跨越了就拆分”是什么意思?

所谓的4K边界是指低12bit为0的地址,例如32'h00001000, 32'h00002000... 这些特殊的地址我们称之为4k边界;同理1k边界是指低10bit为0的地址,例如32'h00000400,32'h00000800...

4K对齐最大原因是系统中定义一个page大小是4K。所以,为了更好的设定每个slave的访问attribue,就给一个slave划分4K空间。 4K对齐,以32位地址为例,[31:12]相等的地址都是同一个page,没有跨4K边界。 即[11:0] 可以为0~0xFFF. 例如0x1000和0x2000就是在不同的page,跨了4K边界。0x1000和0x1FFF则是在同一个page,没有跨4K边界。同理,0x1FFF和0x2000则跨了4K边界,虽然他们是相邻的byte。 再说到一次burst没有4K大小,但是如果起始地址是0x1FFC, INCR模式,会跨边界吧? 1K对齐,就是说 [31:10]相等的地址都是在一个1K对齐的空间内。 至于真的跨越了,就拆分。例如处理器load多个数据,就是跨页访问,到了接口控制模块,也会把这一个访问拆分成两个访问。在interfere上的都是符合协议的transaction。例如,core要访问0x1FF0-0x200C共32byte的数据(每次beat 4B)。系统会自动给拆分成0x1FF0-0x1FFC和0x2000-0x200C两个transaction。

ARM对AHB burst这样设计的目的是在于,SLAVE的地址访问空间基本都是以1KB为单位的,当AHB以burst方式传输时,为了避免错误的访问到其他的Slave空间而造成系统致命错误,因此在burst传输时限制1KB,若需要跨1KB边界时,需要重新initial一个新的传输。

在AHB划分系统时,最小的地址空间为1KB,即slave至少地址空间是1k,或者2K,或者1M等。这样,当AHB访问地址空间时,因为地址空间对其的原因,就不会恶意的访问到其他的地址空间。

cpu发出这样的请求时,AHB会自动的将其转换为1KB,1KB的传输格式,可以根据其地址区间是否跨越对齐的000来判断。

 

                                                                                                                            ————欢迎关注我的公众号《处理器与AI芯片》

 

### AXI4协议中的Burst传输工作原理 AXI4协议通过引入突发(Burst)机制来优化数据传输效率,特别是在处理大量连续数据时表现出色。这种机制允许一次事务请求携带多个数据项的信息,在减少握手次数的同时提高了吞吐量。 #### Burst类型定义 AXI4规定了几种不同的突发类型以适应多样化的应用场景: - **FIXED (0b00)**:整个突发期间地址保持不变。 - **INCR (0b01)** :每次传输后地址自动增加固定步长。 - **WRAP (0b10)** :当达到预定范围末端时会循环回到起始位置继续传输[^3]。 #### 数据有效性和控制信号 为了确保接收方能够正确获取发送过来的数据序列,AXI4利用一组特定的控制信号来进行同步管理。对于读写操作而言,`ARVALID/ARREADY` 和 `AWVALID/AWREADY`分别负责启动相应的通道;而在实际传送过程中,则依赖于`RVALID/RREADY` 或者 `WLAST/WVALID/WREADY` 来完成每笔资料的成功交接确认。 ```verilog // Verilog示例代码展示了一个简单的AXI4 Master发起Read Burst的过程 module axi_read_master ( input wire aclk, output reg [3:0] araddr, // Address channel address signal output reg arvalid, // Address channel valid signal input wire arready, // Address channel ready signal from slave ... ); always @(posedge aclk) begin if (!arvalid && arready) begin // 发送新的读取命令给Slave设备 araddr <= start_address; arlen <= length_of_burst - 1; arsize <= byte_width_log2; arburst<= BURST_TYPE_INCR;// 设置为增量模式 arvalid<= 1'b1; end else if(arvalid && arready){ // 当前命令已被接受,准备下一条指令 arvalid<= 1'b0; } end ... endmodule ``` 此段Verilog代码片段展示了如何配置并触发一个基于递增型(`INCR`)的读取突发过程。其中涉及到了设置初始地址、长度以及大小等参数,并最终激活有效的标志位告知目标端可以开始执行该次批量读取动作了。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值