AXI总线之寄存器配置实现

在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做过的功能都整理上传,以作学习备份。
 

猜你喜欢

转载自blog.csdn.net/kemi450/article/details/89950073
今日推荐