1、在IP核内部,地址线指的是以字为单位的。

    如一个ram,数据线宽度为32bit,地址线宽度为14bit,该ram的容量为2^14=16384个字,每个字4字节,即64KB。在qsys互联空间内,该ram的地址空间是0~FFFF,因此qsys是以字节为单位互联的。

2、制作一个avalon-mm master标准的IP核向该ram写数据。avalon有如下要求:

    数据线宽度:必须和ram相同,为32bit;

    地址线宽度:至少为16bit,因为挂到互联空间中,是以字节为单位的。你看到的ram核的地址线为14bit(写ram的模块内部的地址也为14bit),是原始IP,还需要经过互联文件的转换,总之挂到互联总线的      地址一定是16bit;

 

    下面这张图是qsys内的write_ctrl核向ram写数据的一个过程,从ram内部抓到的地址来看,互联总线已经将write_ctrl的地址(字节地址)转换为了字地址,即0~3对应0,4~7对应1。

    我的意图是向ram写入0~1023这1024个数字,但实际只向ram的地址0写入了3,地址1写入了7,地址2写入了B等等。其他数据被覆盖了。

 

 解决办法:在自制的IP核里,做地址转换,将字地址转为字节地址,即左移2位输出。PrSv_WrAddr_s为14bit,和要写入的ram的ip核内部地址相同。

    amm_address_o     <= PrSv_WrAddr_s(13 downto 0) & "00"; -- 转换为字节地址

 

 

3、还可以将onchip-ram的数据端口导出到qsys外部,在顶层对其写入,此时写入数据的模块的特点如下:

    地址线宽度为14bit,数据线宽度32bit,写入时可以按字操作,因为此时没有经过avalon总线的互联。

 

posted on 2020-05-22 15:02  tubujia  阅读(420)  评论(0编辑  收藏  举报