我有一个DE10-Nano Cyclone V 开发板,带有1 GB来自Terasic的外部DDR3内存,我想实现一个驱动程序,它可以管理在ARM上运行的Linux之间的通信Cortex-A9处理器和Cyclone V的FPGA架构
使用dma_alloc_coherent
i分配一定量的内存并将硬件地址写入我编程的FPGA模块
然后我继续通过SDRAM AXI接口写一个给定地址的任意数字,但显然SDRAM AXI都没有断言 AWREADY 和 WREADY 信号 - 奴隶。
我已将SDRAM AXI接口配置为 325 MHz , 256位宽(数据长度),具有 32位寻址长度和成为 AXI3奴隶。 SDRAM接口配置为 TrustZone-aware 设备(ARM TrustZone设置)
我还将一些其他配置线硬连接到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-bridge / br4)中查看FPGA桥接驱动程序时,状态显示为“已启用”。
这座桥仍然阻碍沟通的原因是什么?
谢谢你的帮助。
答案 0 :(得分:0)
问题解决了:
显然即使Linux说网桥已启用,它们也不是。
必须将某些配置位写入HPS的配置结构中,否则该模块将无法工作
1.使用Quartus汇编步骤生成一个切换文件夹。这会生成所有桥的配置描述,以及其他内容
2.使用bsp-editor生成并编译第一阶段引导加载程序,它将具有一些全局变量,用于存储配置值并使它们可用于启动脚本。
3.使用以下内容生成bootscript:
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;
被注释的行导致崩溃,因为显然数据是未对齐的,并且处理器不允许这种访问。我将就此问题进一步调查。
有关这些主题的进一步阅读,我建议这些页面:
Cyclone V HPS Memory Map (Altera)
Tutorial on FPGA soft programming (Rocketboards)
How to enable HPS bridges (Altera)