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


    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协议来得到自定义外设。

  • 相关阅读:
    LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别
    Linq扩展方法之All 、Any
    Linq扩展方法之Aggregate 对序列应用累加器函数
    C#开发的进化史
    C#选择文件、选择文件夹、打开文件(或者文件夹)
    XPath操作XML文档
    文档对象模型操作xml文档
    XML简介
    php获取某经纬度附近地点位置
    Yii中实例化类的四种方式
  • 原文地址:https://www.cnblogs.com/electricdream/p/13193396.html
Copyright © 2020-2023  润新知