Xilinx VDMA 24位流输出与32位AXI总线的内存 流数据关系

测试方法采用了VDMA仅有MM2S通道, 内存中的图像帧是用MicroBlaze核写入的一个colorbar.

VDMA的mhs部分如下,
因为我的输出用了Digilent的HDMI核,而这个HDMI核是32位的,我自己写了个axis_24_32的位宽转换的ip,这个暂且按下不表.


BEGIN axi_vdma
PARAMETER INSTANCE = axi_vdma_0
PARAMETER HW_VER = 5.04.a
PARAMETER C_USE_FSYNC = 0
PARAMETER C_M_AXIS_MM2S_TDATA_WIDTH = 24
PARAMETER C_MM2S_LINEBUFFER_DEPTH = 4096
PARAMETER C_MM2S_LINEBUFFER_THRESH = 2048
PARAMETER C_INCLUDE_S2MM = 0
PARAMETER C_BASEADDR = 0x7e220000
PARAMETER C_HIGHADDR = 0x7e22ffff
BUS_INTERFACE S_AXI_LITE = axi4lite_0
BUS_INTERFACE M_AXI_MM2S = axi4_0
BUS_INTERFACE M_AXIS_MM2S = axi_vdma_0_M_AXIS_MM2S
PORT s_axi_lite_aclk = clk_100_0000MHzPLL0
PORT m_axi_mm2s_aclk = clk_100_0000MHzPLL0
PORT m_axis_mm2s_aclk = axi_hdmi_0_S_AXIS_MM2S_ACLK
PORT mm2s_fsync_out = axi_vdma_0_mm2s_fsync_out
PORT mm2s_buffer_almost_empty = axi_vdma_0_mm2s_buffer_almost_empty
PORT mm2s_buffer_empty = axi_vdma_0_mm2s_buffer_empty_to_chipscope_ila_0
END

结论:

我也不知道手册上究竟有没有讲这个AXI宽度是32bit,而AXIS宽度是24bit的问题,我反正似乎是没看到.

不过最终实验得到的结论是RAM被充分利用了,也就是比如两个像素A(aabbcc)和像素B(112233)存在RAM中,

最终存储的是(aabbcc112233)而不是(00aabbcc00112233)或(aabbcc0011223300)等之类数据.

实验数据:

1.VDMA设置

2.CPU写RAM

    for(offset = VERT * HORI * 1/2; offset < VERT * HORI ; )
{
Xil_Out32LE(Addr+4*offset, 0xefcdab89);
offset++;
}

用的是Xil_Out32LE写RAM,那么实际RAM中存储的顺序是89abcdef 89abcdef ..............

3.Chipscope对AXIS mm2s的监测

(其实我对S_AXI也监测了,不过忘记截图了,也没仔细分析.印象是内存对齐读取,也就是一次读取32bit的有效数据然后分别放到AXIS流的不同字节里)

工程文件与源代码下载

Xilinx VDMA 24位流输出与32位AXI总线的内存 流数据关系,码迷,mamicode.com

时间: 2024-08-24 13:30:33

Xilinx VDMA 24位流输出与32位AXI总线的内存 流数据关系的相关文章

在64位linux上编译32位程序

ld指令有一个选项:--oformat output_format,用于指定输出文件的格式.输入文件./kernel/kernel.o等是elf32格式,当前系统是64位,而ld默认生成的文件格式是elf64-x86-64:因此会出现"ld: warning: i386 architecture of input file `./kernel/kernel.o' is incompatible with i386:x86-64 output"这样的提示.之前,将系统从三墩转移到我自己的

64位系统上运行32位程序能否申请到8G内存?

申请不到,因为64为系统在运行32位程序的时候只是为了向下兼容而已,对于32位程序来讲,申请8G的存储空间没有任何意义,因为32位的程序最大寻址空间只有4G,32位程序在编译之后的机器代码也只有32位的寻址数(指针占4个字节),因此申请8G的空间是没啥意义的,而且一般系统都会为每个进程设置一些资源限制,对于32位程序其能申请的内存量也远远小于4G可以看一下下面这个表操作系统内部数据结构限制对比 IT168评测中心 分组 限制 64位Windows限制 类别 单个进程虚拟空间 4GB 16TB 用

64位系统里注册32位软件

1.在64位系统里注册32位软件所需的一些dll会提示不兼容,大概因为32 位进程不能加载64位Dll,64位进程也不可以加载32的导致. 若要支持的32 位和64 位COM 注册和程序共存状态,需要WOW64 子系统. 故可以把这些32的dll.ax从C:\Windows\system32\复制到C:\Windows\sysWOW64\下注册即可. 如:regsvr32 C:\Windows\sysWOW64\netconn.dll 2.对于UAC.低权限用户应使用管理员帐户. 3.有时候注册

win764位系统上让32位程序能申请到4GB内存方法

win764位系统上让32位程序能申请到4GB内存方法. 2016年09月18日 18:36:26 阅读数:1550 最近测试一个32位程序总是在1.2G左右内存时崩溃,怀疑是内存申请失败,本身32位程序只能申请到2GB内存,经过在网上找的各种方法和测试,如下方法可行,能申请到4GB内存. 1.管理员模式下运行CMD,输入:BCDEdit /set PAE forceenable Windows 这里的BCDEdit是关于命令行的启动配置编辑器.使用上面的命令,你能启用物理地址扩展(PAE),让

64位系统下注册32位dll文件

64位系统下注册32位dll文件 在64位系统里注册32位软件所需的一些dll会提示不兼容,大概因为32 位进程不能加载64位Dll,64位进程也不可以加载32的导致. 若要支持的32 位和64 位COM 注册和程序共存状态,需要WOW64 子系统. 故可以把这些32的dll.ax从C:\Windows\system32\复制到C:\Windows\sysWOW64\下注册即可. 如:regsvr32 C:\Windows\sysWOW64\MakerCom.dll 原文地址:https://w

对所有CPU寄存器的简述(16位CPU14个,32位CPU16个)

32位CPU所含有的寄存器有:4个数据寄存器(EAX.EBX.ECX和EDX)2个变址和指针寄存器(ESI和EDI)2个指针寄存器(ESP和EBP)6个段寄存器(ES.CS.SS.DS.FS和GS)1个指令指针寄存器(EIP)1个标志寄存器(EFlags) --------------------------------------------------1.数据寄存器 寄存器AX和AL通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间.累加器可用于乘.除.输入/输出等

在64位linux下安装32位oracle软件

在某些情况下,有时我们需要在64位的系统下来安装32的oracle软件(如,客户的变态要求).虽然在理论上,这种方式是可行的,但在实际的安装过程中确往往是错误百出,为了避免不必要的错误,也为了方便以后的工作查找,记录安装过程. 本示例以redhat4--64位操作系统,oracle 10g为数据库,安装过程中,仅仅使用了最小的安装包,以便尽可能多的发现问题.由于问题主要出现在软件包的安装和兼容性上,安装过程的其他方面不过多涉及. 首先,配置yum使用本地光盘作为源,并配置同时安装32位和64位的

django部署到apache上(非常重要的,3者版本要一致,是32位就都要是32位的)

网上把django部署到apache的文章挺多的,但是按照大家的操作,并没有一次就成功,还是遇到了一些问题,这里主要有以下几个情况. 1.网上找到的mod_wsgi的版本问题,导致动态库加载不上. 2.配置问题,因为涉及到apache.Python和mod_wsgi的版本,所以配置上可能也不太一样. 这里我把我遇到的问题和解决方案比较详细的写下来.失败经历可跳过. 失败经历 我的环境是python2.7.11 64位版本,apache我选择的是2.4.20x 64位版本,这里有一点必须要保证的是

&lt;摘录&gt;如何在64位linux强制编译32位应用程序

GDC注:因为需要解决在linux64机上编译32位的mongodb(没办法,因为编译的php是32位,然后我想将mongdb扩展添加到php中),在网上搜了很多文章,感觉这篇好懂,而且好用.我使用的是方法一,具体为: > linux32 ./configure --with-php-config=/usr/local/php/bin/php-config > export CFLAGS="-m32 -04 -march=i386 -mtune=i386" > mak