zoukankan      html  css  js  c++  java
  • 关于AVALON总线动态地址对齐

           在NIOS的使用中,我们往往要用到自定义外设,然后通过AVALON交换架构和NIOSII进行通信。   

            AVALON总线,其实是一种交换架构的协议,在自定义外设挂在AVALON总线上时,一定要注意地址对齐。   

            AVALON总线要求自定义外设数据位宽必须为8、16、32,这样如果使用位宽为32,那么就不需要考虑对齐了。 如果使用数据位宽为8,也就是外设数据总线位宽是8,而NIOS

    数据总线位宽是32,这样就要考虑地址对齐了。这个地址对齐就是内存地址对齐。在NIOS写数据到从外设时,由于位宽不对等,NIOS会执行4次写操作,将一个32位数分成4个8位

    数据写到从外设。NIOS读取从外设数据时同样道理,在读使能有效后的下一个时钟从外设必须将数据放到总线上,而且应该是4个数据,如果只有一个字节有效,其他3个字节补零

    即可。       

            举个例子,在QSYS下挂外设时,通常系统分配好了内存映射地址,比如0x3322,那么外设的地址就从这里开始,对于8位数据位宽,那么连续4个数据在内存中存储的地址分

    别是0x3322,0x3323,0x3320,0x3321,这个是由内存决定的。调试过SDRAM的朋友应该知道。特别是NIOS读取外设数据的时候,很容易出错。比如当NIOS读数据时,外设的连续4个

    数据是0xaa,0x00,0x00,0x00,也就是说只有0xaa是有效的,那么根据上述地址,根据小端存储方式,地址对应的数据为0x3322->0xaa,0x3323->0x00,0x3320->0x00,0x3321-

    >0x00,这样我们在NIOS中操作的时候,由于NIOS是32位的,地址对齐的是0x3320,所以就出现了读取数据的错误。 如果使用位宽是16位的,那么NIOS读写外设的时候会产生两

    次读写过程。同样和上面一样,也要注意地址对齐问题。

    转载请注明出处:alifpga

    原文地址:bbs.alifpga.com

    版权:卿萃科技

  • 相关阅读:
    Python3 -- 多线程(threading模块、queue模块)
    MySQL -- 常用汇总
    MySQL -- 常用函数汇总
    MySQL -- 数据表添加字段(三种方式)
    MySQL -- 查看表结构命令
    MySQL -- 修改/删除字段
    MySQL -- ALTER TABLE:修改数据表
    MySQL -- 单行注释和多行注释
    GCC 提供的原子操作
    内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C++][内存管理][转载]
  • 原文地址:https://www.cnblogs.com/alifpga/p/7478714.html
Copyright © 2011-2022 走看看