Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arm 旋风分离器V的已启用SDRAM桥接器被阻塞_Arm_Embedded Linux_Fpga_Intel Fpga_Amba - Fatal编程技术网

Arm 旋风分离器V的已启用SDRAM桥接器被阻塞

Arm 旋风分离器V的已启用SDRAM桥接器被阻塞,arm,embedded-linux,fpga,intel-fpga,amba,Arm,Embedded Linux,Fpga,Intel Fpga,Amba,我有一个DE10 NanoCyclone V开发板,带有Terasic提供的1 GB外部DDR3 RAM,我想实现一个驱动程序,它可以管理在ARM Cortex-A9处理器上运行的Linux与Cyclone V的FPGA结构之间的通信。 通过dma\u alloc\u coherent我分配一定量的内存,并将硬件地址写入我编程的FPGA模块。 然后,我继续通过SDRAM AXI接口将任意数字写入给定地址,但显然,SDRAM AXI从机从未断言过AWREADY,也没有断言过florady信号。 我

我有一个DE10 NanoCyclone V开发板,带有Terasic提供的1 GB外部DDR3 RAM,我想实现一个驱动程序,它可以管理在ARM Cortex-A9处理器上运行的Linux与Cyclone V的FPGA结构之间的通信。
通过
dma\u alloc\u coherent
我分配一定量的内存,并将硬件地址写入我编程的FPGA模块。
然后,我继续通过SDRAM AXI接口将任意数字写入给定地址,但显然,SDRAM AXI从机从未断言过AWREADY,也没有断言过florady信号。
我已将SDRAM AXI接口配置为在325 MHz下运行,宽256位(数据长度),寻址长度为32位,并且是AXI3从机。SDRAM接口配置为信任区感知设备(ARM信任区设置)
我还硬连线了一些其他配置线到AXI从机,现在我将列出这些配置线:

assign axm_m0_arburst = 'd0;
assign axm_m0_arcache = 'd0;
assign axm_m0_arid = 'd0;
assign axm_m0_arlen = 'd0;
assign axm_m0_arlock = 'd0;
assign axm_m0_arprot = 'd0;
assign axm_m0_arsize = 'b101;

assign axm_m0_awburst = 'd0;
assign axm_m0_awcache = 'd0;
assign axm_m0_awid = 'd0;
assign axm_m0_awlen = 'd0;
assign axm_m0_awlock = 'd0;
assign axm_m0_awprot = 'd0;
assign axm_m0_awsize = 'b101;
assign axm_m0_wid = 'd0;
assign axm_m0_wstrb = 'hFFFFFFFF;
在Linux(/sys/class/FPGA桥/br4)中查看FPGA桥驱动程序时,状态显示为“已启用”。
桥接器仍然阻止通信的原因是什么?
谢谢您的帮助。

问题已解决:
显然,尽管Linux说网桥是启用的,但事实并非如此。 必须将某些配置位写入HPS的配置结构,否则模块将无法工作。
1.使用Quartus组装步骤生成切换文件夹。这将生成所有网桥的配置描述以及其他内容。
2.使用bsp编辑器生成并编译第一阶段引导加载程序,该程序将包含一些全局变量,用于存储配置值并使其可用于引导脚本。
3.使用以下内容生成引导脚本:

echo -- Programming FPGA --
fatload mmc 0:1 $fpgadata soc_system.rbf;
fpga load 0 $fpgadata $filesize;

run bridge_enable_handoff;
mw $fpgaintf $fpgaintf_handoff;
mw $fpga2sdram $fpga2sdram_handoff;
go $fpga2sdram_apply;
mw $axibridge $axibridge_handoff;
mw $l3remap $l3remap_handoff;
#md $fpgaintf;
#md $fpga2sdram;
#md $axibridge;

setenv fdtimage soc_system.dtb;
setenv mmcroot /dev/mmcblk0p2;
setenv mmcload 'mmc rescan;${mmcloadcmd} mmc 0:${mmcloadpart} ${loadaddr} ${bootimage};${mmcloadcmd} mmc 0:${mmcloadpart} ${fdtaddr} ${fdtimage};';
setenv mmcboot 'setenv bootargs console=ttyS0,115200 root=${mmcroot} rw rootwait; bootz ${loadaddr} - ${fdtaddr}';

run mmcload;
run mmcboot;
注释的行会导致崩溃,因为数据显然未对齐,处理器不允许进行此类访问。我会对这个问题做进一步的调查。

对于这些主题的进一步阅读,我推荐以下页面: