码迷,mamicode.com
首页 > 其他好文 > 详细

PS-AXI-PL流水灯设计(2)

时间:2020-06-26 01:45:47      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:gen   als   one   sign   寄存器变量   基本使用   宽度   注意   ready   

PS-AXI-PL流水灯设计(2)

1、实验原理

承接上一次的实验,这里对AXI的总线结构做出分析,将AXI的理论具体对应到设计上去。为后面自己设计AXI的发送和接受器做好准备。

2、实验操作

(1)AXI中的寄存器变量

在不了解具体的AXI协议的条件下,如果想完成基本的AXI4总线的IP核,就必须明白AXI4总线存储数据的位置。AXI总线的数据在寄存器中,所有的操作也是基于寄存器的。一个简单的AXI总线必须能够接受数据并且储存在对应的寄存器中。vivado中提供的的寄存器操作是已经做好了的。这里只需要对对应的寄存器构建相应的联系就可以挂在AXI总线上。前面选择了四个寄存器。这里实际上只需要2个。一个用于接受数据,一个用于发送数据。能不能改名字呢?理论上可以,但是这会使该寄存器没有从地址。换言之,改了名字的寄存器不能在通过AXI总线访问。已经知道每个寄存器32位宽,所以只要不超过该宽度,一律取一个寄存器。

(2)连接PL时对应的逻辑。

对于PL中需要挂在PS上的信号,都要使用寄存器变量(可以为同名的wire变量)。如果后面可以自己定义AXI协议,则可以自定义寄存器的名字。这里暂时使用系统命名。理论上AXI上的寄存器除了访问地址其他的功能都是一样的,所以输入还是输出都是自己定义的。如果是做接受AXI的数据的寄存器,就可以作为PL的输入。

(3)构建IP的原理图

这里出现了一个小问题,文件丢失。注意IP核创建完成后要综合一下再打包。然后就可以调用自己的IP核来挂在AXI上了。下一步就是利用PS测试AXI打包的IP核可不可以实现PS通信。这个在下一步实验中会设计,现在暂时只是完成AXI总线的基本使用类型。

(4)初步理解AXI总线

第一个模块是axi_awready,第二个模块是axi_awaddr,第三个模块是axi_wready,第四个是寄存器的写入和读出,第五个是写响应,第六个是axi_arread,第七个是axi_arvalid,第八个是读地址。一共八个模块构成了一个简单的lite AXI4协议的收发。

这里把注释截取下来方便后面的分析:

//--------------1----------------------------------------------------
    // Implement axi_awready generation
    // axi_awready is asserted for one S_AXI_ACLK clock cycle when both
    // S_AXI_AWVALID and S_AXI_WVALID are asserted. axi_awready is
    // de-asserted when reset is low.

//------------------2---------------------------------------------------------
    // Implement axi_awaddr latching
    // This process is used to latch the address when both 
    // S_AXI_AWVALID and S_AXI_WVALID are valid. 

//------------------3----------------------------------------------------------
    // Implement axi_wready generation
    // axi_wready is asserted for one S_AXI_ACLK clock cycle when both
    // S_AXI_AWVALID and S_AXI_WVALID are asserted. axi_wready is 
    // de-asserted when reset is low. 
//------------------------4------------------------------------------------------------
    // Implement memory mapped register select and write logic generation
    // The write data is accepted and written to memory mapped registers when
    // axi_awready, S_AXI_WVALID, axi_wready and S_AXI_WVALID are asserted. Write strobes are used to
    // select byte enables of slave registers while writing.
    // These registers are cleared when reset (active low) is applied.
    // Slave register write enable is asserted when valid address and data are available
    // and the slave is ready to accept the write address and write data.

//---------------5------------------------------------------------------------------

    // Implement write response logic generation
    // The write response and response valid signals are asserted by the slave 
    // when axi_wready, S_AXI_WVALID, axi_wready and S_AXI_WVALID are asserted.  
    // This marks the acceptance of address and indicates the status of 
    // write transaction.
//-------------------6-------------------------------------------------------------------
    // Implement axi_arready generation
    // axi_arready is asserted for one S_AXI_ACLK clock cycle when
    // S_AXI_ARVALID is asserted. axi_awready is 
    // de-asserted when reset (active low) is asserted. 
    // The read address is also latched when S_AXI_ARVALID is 
    // asserted. axi_araddr is reset to zero on reset assertion.

//------------------7----------------------------------------------------------------
    // Implement axi_arvalid generation
    // axi_rvalid is asserted for one S_AXI_ACLK clock cycle when both 
    // S_AXI_ARVALID and axi_arready are asserted. The slave registers 
    // data are available on the axi_rdata bus at this instance. The 
    // assertion of axi_rvalid marks the validity of read data on the 
    // bus and axi_rresp indicates the status of read transaction.axi_rvalid 
    // is deasserted on reset (active low). axi_rresp and axi_rdata are 
    // cleared to zero on reset (active low).  
//--------------------------------8-------------------------------------------------
    // Implement memory mapped register select and read logic generation
    // Slave register read enable is asserted when valid address is available
    // and the slave is ready to accept the read address.

这里大致了解一下一个基本的AXI工作模块如何工作,后面会对这几个模块具体分析。为后面自定义AXI收发模块打下基础。

3、实验结果

这次实验简单地打包了一下自定义的PL的AXI的IP核,并且初步看了一下AXI的组成构件。后面的实验也将以这两条主线来展开。一方面连接AXI总线,一方面推进实验验证设计的合理性。最后,在测试平台完成后,就可以利用解构的AXI协议来得到自定义外设。

PS-AXI-PL流水灯设计(2)

标签:gen   als   one   sign   寄存器变量   基本使用   宽度   注意   ready   

原文地址:https://www.cnblogs.com/electricdream/p/13193396.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!