准备走秋招了,感觉除了数字ic设计和验证的理论知识外,项目好像还真没有能拿的出手的Orz,于是弄了个这个,希望设计与验证的两边都能练到。
项目代码在github
先看功能:能将AXI Master的transaction转换为AHB协议发送到AHB slave端口。能正确返回AHB slave的response。AXI部分只支持INCR/WRAP读写操作,(Fixed操作由于没考虑到就没写,其实也不难,但是写完过后我懒得加了);支持outstanding;不支持out of order,retry,split等高级feature。AHB部分则为single传输,支持b2b的single传输。
模块结构如下图:

axi2ahb_bridge_top.v:顶层文件,连接各个模块。
axi_controller.v:axi控制器的顶层,连接下面两个模块。
axi2fifo.v:将axi主机发送的数据拆分成一个一个的小块,地址、数据、读写状态、id、size,last一一对应。这个地方主要有两个难点:arlen和awlen如何与ahb协议对应、卷绕突发地址该怎么算。
如果arlen、awlen不为0的话,axi会只发送一个首地址,然后发送一连串的数据。这时我们用两个寄存器a与b,寄存器a在主机第一笔数据来的时候保存当前的len,寄存器b从0开始,遇见一次wvalid自加1,直到加到数据等于len为止。地址的计算就为:首地址+b*(1<<size)。size就是突发的大小

本文作者分享了一项秋招准备中的项目,实现了AXI Master到AHB Slave的数据转换,包括INCR/WRAP操作处理、突发地址计算及AHB协议适配。通过模块化设计解决了arlen/awlen映射、地址卷绕突发等问题。验证阶段通过多种读写测试确保准确性。寻求读者反馈和可能的bug修复。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



