DSP

C64x+ DSP 的带宽管理系统(BWM) & 图解

2019-07-13 18:05发布

        BWM的目的:确保某些请求(requestors)不会长时间的霸占总线,而阻止了来自c64x+ megamodule内源(resources)的请求。与c64x+的内存保护类似,BWM可对整个c64x+ megamodule做全局定义,但由每个local c64x+ megamodule源来实现。由此,初始化BWM就包含了对每个c64x+ megamodule源共同寄存器堆进行编程。 BWM对以下4个源进行带宽保护:
    >Level 1 program(L1P) SRAM/cache
    >Level 1 data(L1D) SRAM/cache
    >Level 2(L2) SRAM/cache
    >memory-mapped registers configuration bus
    以上列出的每个c64x+ megamodule源存在以下一些潜在请求,这些请求也是由BWM来管理:
    >CPU-initiated transfers: data access(load/store,etc) / program access
    >可编程的cache一致性操作(如:writeback): block-based   / global
    >internal DMA(IDMA)-initiated transfers(and resulting coherency operations)
    >external-initiated slave DMA(SDMA) transfers(and resulting coherency operations)
    ※一句话,以上即表示c64x+ megamodule包含的源,以及这些源相关的一些请求的优先级由BWM来管理。
      BWM对以上源的带宽管理是通过优先级仲裁来实现的。当同时出现对一个源的多个请求,则优先级最高的请求首先获得访问权,以此来解决冲突。如果出现资源被连续抢占的情况,则由一个抢夺计数器(contention counter)来解决低优先级请求的服务,由它来保证每n个仲裁cycles必须响应一次低优先级请求,这个n可以通过对寄存器的MAXWAIT域编程来决定。资源请求受阻一次,则contention counter加1,当contention counter达到n时,则低优先级请求的优先级设为-1,并对该请求做出响应。因此,除了从高到低(0~8)9种优先级外,硬件还使用一个-1的优先级,表示某个传输请求因contention counter耗尽到n,使得该请求优先级获得提高。但用户不可对BWM仲裁控制寄存器直接写入-1的优先级。       一系列寄存器(仲裁控制寄存器)来实现BWM。这些寄存器在以下blocks中实现:L1D,L2,extended memory controller(EMC)。对L1P来说,没有可编程的BWM寄存器,但在L1P控制器中有固定带宽管理特性。 对每个源(L1D,L2,EMC)都有一系列仲裁寄存器(CPUARBD/ IDMAARBD/ SDMAARBD/ UCARBD& MDMAARBE),每个寄存器对应一个不同的请求。对应每个源的一组寄存器有相同的初始化值,对大多数应用来说,CPUARBD/ IDMAARBD/ SDMAARBD/ UCARBD的初始化值不需要修改。但MDMAARBE定义的优先级用于c64x+ megamodule以外数据传输,可能需要根据对应系统手册做些调整,大多数情况下,MDMAARBE应该通过编程提高优先级(赋更小值)。