2017-09-30 164 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)