NIOS II 自定义IP核的静态地址对齐和动态地址对齐

余生颓废 提交于 2021-02-03 07:56:33

如果使用静态地址对齐(每个寄存器在Avalon总线上占4个字节的地址)
设置IP使用静态地址对齐的方式为,在hw.tcl脚本里加上一局话:set_interface_property as addressAlignment {NATIVE}
在软件编程时
可以使用IOWR(基地址,寄存器编号(n),数据)对自定义IP的第n个寄存器进行写入操作
可以使用IORD(基地址,寄存器编号(n)) 对自定义IP的第n个寄存器进行读出操作



如果使用动态地址对齐,(每个寄存器在Avalon总线上占 数据位宽/8个字节的地址)(默认)
在软件编程时,使用IOWR_32DIRECT(数据位宽为32位)、IOWR_16DIRECT(数据位宽为16位)、IOWR_8DIRECT(数据位宽为8位)进行写操作
在软件编程时,使用IORD_32DIRECT(数据位宽为32位)、IORD_16DIRECT(数据位宽为16位)、IOWR_RDIRECT(数据位宽为8位)进行写操作

IOWR_8DIRECT(基地址、地址偏移量、数据),地址偏移量 = 寄存器编号*1
IOWR_16DIRECT(基地址、地址偏移量、数据),地址偏移量 = 寄存器编号*2
IOWR_32DIRECT(基地址、地址偏移量、数据),地址偏移量 = 寄存器编号*4

IORD_8DIRECT(基地址、地址偏移量),地址偏移量 = 寄存器编号*1
IORD_16DIRECT(基地址、地址偏移量),地址偏移量 = 寄存器编号*2
IORD_32DIRECT(基地址、地址偏移量),地址偏移量 = 寄存器编号*4

 

在SOPC Builder 8.0版本以前,地址对齐中有动态对齐(dynamic)和静态对齐(Native)的两个选项,但是现在它不推荐使用静态对齐的方式。

因为静态对齐可能会有副作用(this coding could have negative side-effects)。

 

但是11.0等等新的版本中仍然有这个选项,只是放在deprecated(不推荐)中,而且默认为dynamic的。

 

所以,总结是:

如果,自定义外设需要的数据位宽不是32bit,如8bit,那么推荐两种方式搞定

  1.writedata,readdata为8bit,自定义外设中,配置为Native方式。

  2.writedata,readdata为32bit,只是高24bit无用,自定义外设中,配置为dynamic(优选)或者Native方式。

  在写软件时,IOWR均可正常使用。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!