2017-09-30 89 views
0

我有一个DE10-Nano Cyclone V开发板带有Terasic的1 GB外部DDR3 RAM,我想实现一个驱动程序,它可以管理Linux在ARM Cortex-A9处理器和Cyclone V的FPGA架构上。
使用dma_alloc_coherent我分配了一定数量的内存并将硬件地址写入到我编程的FPGA模块中。
然后我开始通过SDRAM AXI接口写入一个任意数字到给定的地址,但显然SDRAM AXI从机并没有信号置位信号。
我已经配置了SDRAM AXI接口在325兆赫运行,是256位宽(数据长度),具有32位寻址长度和是一个AXI3从属。 SDRAM接口被配置为的TrustZone感知设备(ARM的TrustZone设置)
我还硬一些其他配置线路与AXI从属,其中我将现在列出:
已启用Cyclone V的SDRAM桥接被阻止

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中查看FPGA桥接驱动程序(/ sys/class/fpga-bridge/br4)时,状态显示为“已启用”。
什么可能是桥梁仍然阻止沟通的原因?
感谢您的帮助。

回答

0

问题解决:
显然,尽管Linux表示这些网桥已启用,但它们不是。 必须将某些配置位写入HPS的配置结构,否则模块将无法工作。
1.使用Quartus组装步骤生成切换文件夹。这将生成所有网桥的配置说明以及其他内容。
2.使用bsp-editor生成并编译第一阶段引导加载程序,该引导加载程序将具有一些全局变量,用于存储配置值并使其可用于启动脚本。
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; 

的线,被评论的,导致崩溃,因为很明显的数据是未对齐的,并且这些种类的访问不允许与处理器。我会在这个问题上做进一步的调查。

有关这些主题的进一步阅读,我建议这些页面:
Cyclone V HPS Memory Map (Altera)
Tutorial on FPGA soft programming (Rocketboards)
How to enable HPS bridges (Altera)