Axi_Lite接口的IP核与地址与缓冲与AxiGP0

        AXI Interconnect互连内核将一个或多个 AXI 内存映射主设备连接到一个或多个内存映射从设备。

AXI_GP 接口
       

        AXI_GP 接口是直接连接主机互联和从机互联的端口的。

        AXI_HP 接口具有一个 1kB 的数据 FIFO 来做缓冲 [4],但是 AXI_GP 接口与它不同,没有额外的缓冲。因此 性能就受到主机端口和从机互联的制约,突发长度为1。

        这些接口仅用于通用的目的,而且不应该 被用于高性能的任务。

        AXI_GP 接口的特性包括 [4]:

        • 32 位数据总线宽度。

        • 12 位总线端口 ID 宽度。

        • 6 位从机端口 ID 宽度。

        • 主机和从机端口接受一次 8 个读取和 8 个写入。

        AXI_GP 接口的每个端口能支持多个外设。

通过已经给好的例子建立函数:

	void AXI_REG_LIST_mWriteReg(u32 BaseAddress, unsigned RegOffset, u32 Data)
void Axi_Write(u8 *Data_addr_point,u32 Write_ByteLong){
    int i;
    for ( i = 0; i < Write_ByteLong; i++)
    {
        AXI_REG_LIST_mWriteReg(Axi_RamA_BaseAddr,i * 4,*(Data_addr_point  + i));
    }
}

实验结果:
Axi_Lite

一个地址存储一个字节数据,

        操作的最低精度是一个字节,但AXI_GP或者说Lite支持的最低数据宽度为32位,所以一次要操作四个地址,地址的每次偏移量需要为i * 4,i为第i次操作,每次操作写入数组的第i个元素,实验中每个元素只有一个字节的长度,所以每次是将一个字节写入了四个字节长度的空间里。

官方代码:写Axi缓冲区

/**************************** 类型定义 ****************** **********/ 
/** * * 将值写入 AXI_REG_LIST 寄存器。执行 32 位写入。
* 如果组件以较小的宽度实现,则仅写入最不重要的数据。
* * @param BaseAddress 是 AXI_REG_LIST 设备的基地址。
* @param RegOffset 是要写入的寄存器距基址的偏移量。
* @param Data 是写入寄存器的数据。
* * @返回无。
* * @note 
* C 风格签名: 
* void AXI_REG_LIST_mWriteReg(u32 BaseAddress, unsigned RegOffset, u32 Data) * */
/**************************** Type Definitions *****************************/
/**
 *
 * Write a value to a AXI_REG_LIST register. A 32 bit write is performed.
 * If the component is implemented in a smaller width, only the least
 * significant data is written.
 *
 * @param   BaseAddress is the base address of the AXI_REG_LISTdevice.
 * @param   RegOffset is the register offset from the base to write to.
 * @param   Data is the data written to the register.
 *
 * @return  None.
 *
 * @note
 * C-style signature:
 * 	void AXI_REG_LIST_mWriteReg(u32 BaseAddress, unsigned RegOffset, u32 Data)
 *
 */
#define AXI_REG_LIST_mWriteReg(BaseAddress, RegOffset, Data) \
  	Xil_Out32((BaseAddress) + (RegOffset), (u32)(Data))

读Axi缓冲区
      

/** * * 从 AXI_REG_LIST 寄存器读取值。执行 32 位读取。
* 如果组件以较小的宽度实现,则仅从寄存器中读取最低有效数据。最重要的数据 
* 将被读取为 0。
* 
* @param BaseAddress 是 AXI_REG_LIST 设备的基地址。
* @param RegOffset 是要写入的寄存器距基址的偏移量。
* * @return Data 是来自寄存器的数据。
* * @note * C 风格签名: 
* u32 AXI_REG_LIST_mReadReg(u32 BaseAddress, unsigned RegOffset) * 
*/
/**
 *
 * Read a value from a AXI_REG_LIST register. A 32 bit read is performed.
 * If the component is implemented in a smaller width, only the least
 * significant data is read from the register. The most significant data
 * will be read as 0.
 *
 * @param   BaseAddress is the base address of the AXI_REG_LIST device.
 * @param   RegOffset is the register offset from the base to write to.
 *
 * @return  Data is the data from the register.
 *
 * @note
 * C-style signature:
 * 	u32 AXI_REG_LIST_mReadReg(u32 BaseAddress, unsigned RegOffset)
 *
 */
#define AXI_REG_LIST_mReadReg(BaseAddress, RegOffset) \
    Xil_In32((BaseAddress) + (RegOffset))

你可能感兴趣的:(ZYNQ裸机开发,FPGA学习,嵌入式硬件,fpga开发)