之前使用Cyclone5 SOC开发过一款产品,总结了很多经验,由于篇幅限制,下面就从个人总结文献中摘取一部分共享出来:
14、C5 SOC的地址映射重点—与ZYNQ不同l 着重参考官网文档CV_5V4第2章“Introduction to the Hard Processor System Address Map” l 该芯片给每一大类都分配了一个固定的基地址:
fpgaslave+peripheral总共960+64=1024MB, peripheral的64MB地址为0xFC000000到0xFFFFFFFF,也就是说 轻量级fpga slave的2MB正处于peripheral的64MB地址空间中,这点对于linux地址映射至关重要。下图也可以看出这点: 那么,映射方法是,先在FC000000上映射出虚拟地址,映射为大小为0400,即64MB,再利用ALTERASOC特别的方式得到linux操作设备的最终地址。代码如下: cfg = mmap(NULL,0x04000000, PROT_READ | PROT_WRITE, MAP_SHARED, mmapfd, 0xFC000000); h2p_lw_led_addr= cfg + ((unsigned long)(ALT_LWFPGASLVS_OFST + LED_PIO_BASE) & (unsignedlong)(HPS_Reg_Span - 1)); l 关于f2h_sdram接口寻址 在“SDRAM Address Space”节中说The SDRAM address space is up to 4 GB. The entire address space canbe accessed through theFPGA-to-HPS SDRAM interface from the FPGA fabric. l hps外设编址从FC000000开始,在文档有详细解说。 l 对于轻量级FPGA slave,正是我们需要使用的,寄存器、状态、led等通信要使用,与zynq不同的是: HPS访问的地址=上表中给定的基地址+QSYS中分配的偏移地址+虚拟地址而zynq中,PS访问的地址=VIVADO中分配的基地址+虚拟地址,没有什么给定的基地址。
27、C5 SOC调试总结(1)LINUX使用cat装载rbf文件不成功 原因之一:前次ARM死机后,rbf文件未同步到存储器中,文件系统中的文件不完整导致不能再装载。 解决办法:在将rbf传输到linux系统中后,使用sync同步一下。 (2)ARM先写内存,FPGA再写内存,ARM再读内存,读出来的数据不是FPGA写进去的数据 原因:虽然FPGA后写,但是由于FPGA写指令与ARM的写指令相隔时间很短,两者在内存控制器上获取的控制权是不确定的,故有可能ARM读出的数据是ARM写进去的数据。 (3)AXI3总线,输出的读操作地址RdAddr直接赋值常数,fpga程序能加载但不会工作,而采用这种寄存器的模式,就工作正常了。 (4)M_AXI_RLAST,这个是L3给出来,从下面波形可以看出这个信号,不是置高后马上置低。 而是,有可能等待下一个读触发的第一个有效数据出来时才置低。
|