博客首页 | 排行榜 |

utoo的博客

个人档案
博文分类
【FPGA博客大赛】使用chipscope来观察coreconnect总线时序之DCR时序  2010-02-22 18:02

使用chipscope来观察coreconnect总线时序的第二篇博文,那就来看看DCR总线的时序吧。

Device Control Register Bus 有两个作用:

1DCR总线是用于ppc general purpose registers和  DCR从设备的device control registers之间的数据传输。

2, DCR总线使configuration registers不在映射到内存地址空间上(它有自己的地址空间),从而减少了PLB总线的负荷,增加了PLB总线的带宽。

使用的软件是ISE9.1i,EDK9.1i,chipsocpe9.1.03.
ISEEDK是没有打SP的,但是chipsocpechipsocpe9.1.03的,如果用chipsocpe9.1.01的,EDK生成硬件时会报错。

本文举例的系统如下:

 

 

这个系统很简单,除了dcr_ram是自定义的IP外,其它IP都是EDK里提供的。

dcr_ram,是一个DCRslave,它里面也很简单,我例化了一个RAMB16_S36BLOCKRAM。这样的话,PPC405可以通过DCR总线来向dcr_ram读写数据。这样dcr_ram可以看成一个DCR的寄存器堆,总共有51232位的DCR寄存器。

 

下面是系统的address

 

 

可以看到dcr_ram的地址是可以和DDR的地址是有重叠的,这可以说明它们的地址空间是不同的。

为了访问不同的地址空间,EDK里提供了不同的访问函数。

DCR的空间:XIo_DcrOutXIo_DcrIn

PLB的空间:XIo_Out32XIo_In32

这个IP的实现,如果有时间,我再写一篇博文来介绍。

 

这个系统的功能很简单,ppc405通过DCR总线,不断地写入和读出dcr_ram.

代码如下:

 

 

chipscope_iconchipscope_ila的搭建方法,上一篇博文已经介绍,

http://xilinx.eefocus.com/utoo/blog/10-02/185008_93c8e.html 这里不再啰嗦。同样,把关心的信号引出。

 

 

chipscope_ila连接

 

 

打开chipsocpe,修改信号名,设置触发条件。

 


 

TriggerPort2对应于我们的DCR write 信号,一旦有上升沿到来,这个chipsocpe开始保存采样。

 

按下,会出现下图:

 

 

这是因为还没有运行软件,chipsocpe没有扫到DCR write 上升沿,所以一直处于等待状态。

我们运行软件,进入debug状态。设置如下断点。

 

 

运行至断点。Chipsocpe出现信号。

 

 

这样就完成了对dcr_ram的写入。

为了证明数据确实被写入Blockram中,我再从Blcokram将数据读出。

这需要重新设置触发条件和断点。

 

 

TriggerPort1对应于我们的DCR read 信号,一旦有上升沿到来,这个chipsocpe开始保存采样。

 


 

SDK也可以看到PPC也读到了正确的数据

 

 

总结:      DCR总线的读写时序十分简单,只要我们观察到其时序,chipscope可以帮助我们做到这一点。

            更重要的是,FPGA作为软硬件协同设计的平台,需要能做到软硬件的codebugChipscope+SDKdebug,将是最佳的选择。

 

类别:默认 |
上一篇:【FPGA博客大赛】使用chipscope来观察coreconnect总线时序之opb时序 | 下一篇:【FPGA博客大赛】使用chipscope来观察coreconnect总线时序之plb时序
以下网友评论只代表其个人观点,不代表本网站的观点或立场