本文主要是介绍MicroBlaze IP核中的外设接口和缓冲器接口介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
MicroBlaze IP核是Xilinx公司提供的一个嵌入式软核处理器,广泛应用于FPGA设计中。在MicroBlaze IP核中,外设接口和缓冲器接口是处理器与外部设备和内存交互的关键部分。
1 外设接口
MicroBlaze处理器中的AXI4 内存映射外设接口AXI4是一种在Xilinx FPGA设计中常见的通信协议,用于在处理器和内存或其他外设之间传输数据。
指令外设接口(M_AXI_IP):MicroBlaze提供了多种AXI4内存映射外设接口,这些接口可以作为32位或64位的主设备(master)来工作。每个接口在任何时候都只有一个未完成的事务(transaction),并且所有的事务都是按顺序完成的。指令外设接口是一个32位的主设备,仅执行单字(single word)的读访问。它总是被设置为使用AXI4-Lite的子集。
数据外设接口(M_AXI_DP):是一个32位或64位的主设备,执行单次的访问。默认情况下,它被设置为使用AXI4-Lite的子集,但当启用LWX和SWX指令的独占访问时,它可以被设置为使用AXI4。半字(halfword)和字节(byte)的写操作是通过设置适当的字节选通(strobes)来实现的。每个写交易都会等待M_AXI_DP_BVALID
信号,以确保存储指令在完成之前数据已经被正确写入。
当启用MMU物理地址扩展(PAE)时,指令外设接口(M_AXI_IP)地址宽度可以在32-64位的范围内,这取决于C_ADDR_SIZE的参数值。
数据外设接口(M_AXI_DP)的地址宽度可以在32-64位的范围内,这取决于C_ ADDR_SIZE的参数值。
2 缓冲器接口
AXI4内存映射缓存接口可以根据缓存行长度和数据宽度参数实现32位、128位、256位或512位的主设备(masters)。而AXI一致性扩展(ACE)接口实现为32位主设备(masters)。
ACE是AXI协议的一个扩展,它提供了一套机制,使得多个处理器IP核和其他主设备能够以一种高效且一致的方式访问共享内存。ACE通过定义一组事务类型、信号和协议来管理多个主控之间的缓存一致性和内存访问。它支持五种状态的缓存模型,用于管理缓存行状态并确保数据一致性。
使用32位主机时,指令缓存接口
当使用32位主机时,指令缓存接口(M_AXI_IC 或 M_ACE_IC)可以执行突发读访问(burst read accesses),这意味着在单个请求中可以连续读取多个字(word)。可能的突发读访问长度包括4字、8字或16字。突发读访问的长度(即每次连续读取的字数)取决于缓存行(cache line)的长度。缓存行是缓存中存储数据的基本单位。
当使用更宽的主机接口(如128位、256位或512位)时,指令缓存接口只能执行单次读访问(single read accesses),即每次请求只读取一个数据块(这个数据块的大小取决于主机的位宽)。
当使用32位主机时,接口可以拥有多个未决事务。默认情况下,可能支持高达2个未决事务。当启用流缓存(stream cache)时,未决事务的数量可以增加。流缓存允许提前请求两个缓存行,这意味着在某些情况下,可以同时有5个未决事务。然而,如果设置了未决读操作的数量,它必须是一个2的幂次方。因此,在可以拥有5个未决事务的情况下,通常会将其设置为8个,因为8是大于5的最小2的幂次方。对于128位、256位或512位更宽的主机接口,指令缓存接口通常只支持单个未决事务。
参数 C_ICACHE_ALWAYS_USED
控制了如何访问内存位置,特别是与指令缓存(Instruction Cache)相关的内存范围。
当 C_ICACHE_ALWAYS_USED
为 1 时,缓存的内存范围总是通过 AXI4 或 ACE 缓存接口进行访问。
这意味着无论缓存是否由软件启用或禁用,访问缓存内存范围时都会使用缓存接口。
当 C_ICACHE_ALWAYS_USED
为 0 时:缓存的内存范围将通过 AXI4 外设接口进行访问。MSR(Machine Status Register)中的 ICE 位用于控制指令缓存的启用/禁用。当 ICE=0 时,指令缓存被禁用。
使用32位主机时,数据缓存接口
当使用32位主机时,数据缓存接口可以执行单个字(word)的访问,也可以执行突发访问(burst accesses),具体取决于缓存行的长度。突发访问的长度可以是4个字、8个字或16个字。
突发写访问(burst write accesses)仅在使用AXI4的写回缓存时执行。写回缓存是一种缓存策略,其中修改的数据首先被写入缓存,并在之后的某个时间点写回到主存中。如果没有使用写回缓存或使用了不同的缓存策略,则可能只执行单个字的写访问。
对于这些更宽的主机接口,数据缓存接口只执行单个访问,无论是读还是写。
未决事务是指在某个时间点内,接口已经开始但尚未完成的事务数量。在数据缓存接口中,这通常指的是正在等待响应的读写请求。
读取时:最多可以有2个未决事务。这意味着在读取操作之间,接口可以并行处理最多两个读取请求,而不会阻塞其他请求。
写入时:最多可以有32个未决事务。这意味着在写入操作之间,接口可以并行处理多达32个写入请求,而不会阻塞其他请求。
MicroBlaze是一个软处理器核,它必须维护一个有序的内存模型。这意味着在处理器看来,内存的读写操作必须按照程序中的顺序执行,即使底层硬件(如AXI4或ACE接口)可能使用不同的顺序来处理这些操作。AXI4和ACE接口为读写操作提供了单独的通道,即读操作和写操作可以在不同的通道上并行执行,而不会相互干扰。然而,这些接口本身并不保证读写操作的顺序性。允许有多达32个未决写事务可以显著提高性能。这是因为当处理器有多个写入请求时,它可以并行地发送这些请求,而不需要等待每个请求都完成后再发送下一个。这减少了处理器的等待时间,从而提高了整体的处理速度。
字、半字和字节的写入是通过设置适当的字节选通来执行的。
可以为LWX和SWX指令启用Exclusive访问。
C_DCACHE_ALWAYS_USED
是一个配置参数,通常用于描述硬件(如FPGA中的处理器或SoC)的数据缓存(Data Cache)行为。这个参数决定了数据缓存是否总是被用于访问特定的内存区域。
当 C_DCACHE_ALWAYS_USED
为 1 时:数据缓存总是被用于访问缓存内存范围。这意味着,无论软件是否禁用了缓存(例如,通过修改某个特定的内存状态寄存器MSR的DCE位),数据缓存都会被用来访问这部分内存。在这种情况下,内存访问通常通过AXI4或ACE缓存接口进行,因为这些接口支持缓存一致性和缓存管理功能。
当 C_DCACHE_ALWAYS_USED
为 0 时:数据缓存的使用是可选的,取决于软件配置和缓存状态。如果软件禁用了数据缓存(例如,通过设置MSR[DCE]=0),那么对缓存内存范围的访问将通过AXI4的外围接口(Peripheral Interface)进行,而不是通过缓存接口。使用外围接口意味着这些内存访问不会受到数据缓存的影响,即它们将绕过缓存直接访问物理内存。这可以用于确保某些内存操作的一致性,例如非缓存写或绕过缓存的读取。
这篇关于MicroBlaze IP核中的外设接口和缓冲器接口介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!