AXI总线之寄存器配置实现

2 篇文章 2 订阅

在zynq系列中,PS与PL的数据交互主要通过AXI总线进行,对于少量数据的传输(如寄存器配置、状态信息获取等)常常采AXI4-LITE。对于大量的、高速的数据传输,常采用AXI4-FULL。虽然官方也有不少模板,但是本着“自给自足”的原则,结合“适合自己的才是最好的”的方针,决定自己设计一个Slave AXI4 Lite接口。

设计目标:

CPU通过AXI4-Lite接口与FPGA进行数据交互。主要是寄存器配置和读取。

设计过程:

由于寄存器是由地址进行确定,因此,需要将AXI4协议转换成RAM接口的形式,即有写使能、写地址、写数据、读使能、读地址、读数据等6个端口。由于不具有突发能力,因此,每个读(写)请求将只有一个读(写)数据产生。

方法一:

用Vivado自定义模板,在生成时选择AXI4-Lite,Slave的模式,其他参数任意。模板生成后,加入wren,wraddr,wrdata,rden,rdaddr,rddata等6个端口,同时,将接口接入模板中的axi总线上即可,为了改善读的时序,可以将读有效信号做1~N个周期的延迟。该设计中,我将wren,wraddr,wrdata均进行了寄存处理,同时也将rden,rdaddr进行了寄存处理,最后,又将rddata设置为rden后2个时钟周期有效。如此,即使在后端的扇出很大,时序紧张的情况下,也不会造成时序问题。将rdata延迟2个时钟周期,是因为axi-lite除了读取大量的寄存器,也会读取多个RAM或者FIFO等,2拍的延迟还可以通过寄存器再平衡(综合工具或人为设计实现)的方式优化结构时序。

方法二:

用HLS进行设计,将输入指定为s_axilite。综合后,将内部ram去除,同时将RAM接口引出即可,为了改善读的时序,可以将读有效信号做1~N个周期的延迟。HLS在接口处理方面非常灵活,尤其在定义IP方面,但在该设计中我还没找到直接生成目标功能的办法,都需要对生成后的代码做一定裁剪。

后记:

在该设计中,两种设计方法复杂度基本相当,虽然已经能用HLS做很多的设计了,但是对HLS综合的理解还有许多的不足,后续在做详细的研究。有时间也会将HLS做过的功能都整理上传,以作学习备份。
 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值