sk2400

XUPVIIP SlideShow

0
阅读(1701)
SlideShow是xilinx网站上提供的针对XUPVIIP用于显示CF中BMP的EDK例子。这个例子中提供一个IP Core plb_tft_cntlr_ref_v1_00_d,用于将缓存于DDR中的BMP显示在CRT或LCD上。这个core和系统的连接如下:

     PPC   
     ||
     \/
DDR<=PLB=>PLB2OPB=>OPB=>OPB=>OPB2DCR=>DCR=>plb_tft_cntlr_ref
      /\                                      ||
      ||                                      \/
       <=======================================
plb_tft_cntlr_ref通过DCR控制,然后以PLB master的方式访问DDR。
DCR的地址线是10bit,OPB的地址线是32bit,在OPB2DCR中OPB地址线的20 to 29(OPB地址线是0 to 31)映射到DCR的10bit地址线上。
MHS文件中plb2opb_bridge要如下写:
BEGIN plb2opb_bridge
 PARAMETER INSTANCE = plb2opb
 PARAMETER HW_VER = 1.01.a
 PARAMETER C_DCR_INTFCE = 1 #DCR的地址范围在C_RNG1_BASEADDR 
 PARAMETER C_NUM_ADDR_RNG = #该核有两个地址范围RNG0 RNG1
 PARAMETER C_RNG0_BASEADDR = 0x40000000
 PARAMETER C_RNG0_HIGHADDR = 0x7fffffff
 PARAMETER C_RNG1_BASEADDR = 0xD0000000
 PARAMETER C_RNG1_HIGHADDR = 0xD0000FFF
 BUS_INTERFACE SPLB = plb
 BUS_INTERFACE MOPB = opb
END
 连接到DCR总线上的IP Core地址如下:
BEGIN plb_tft_cntlr_ref
 ......
 PARAMETER C_DCR_BASEADDR = 0b0000010000
 PARAMETER C_DCR_HIGHADDR = 0b0000010001
 ......
END
当向挂到DCR的plb_tft_cntlr_ref的两个寄存器发数据时可以这样写XIo_Out32(0xD0000040,data),XIo_Out32(0xD0000044,data)(DCR的数据线是32bit).C_RNG1_BASEADDR 和C_RNG1_HIGHADDR 间的地址范围被映射到DCR上,又因为OPB到DCR的地址映射关系,既DCR_ABUS<=OPB_ABUS(20 to 29),所以通过ppc访问plb_tft_cntlr_ref的地址是C_RNG1_BASEADDR  or (C_DCR_BASEADDR << 2)=0xD0000040。由于DCR的地址为10bit,寻址空间是1K,但数据线是32bit,所以分配给plb2opb_bridge的RNG1的空间是4KB。这个空间不能再大了。
这是第一次看到使用DCR总线、有plb master的自定义IP core。