MicroBlaze IP核中的外设接口和缓冲器接口介绍

2024-06-20 13:12

本文主要是介绍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核中的外设接口和缓冲器接口介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1078233

相关文章

揭秘未来艺术:AI绘画工具全面介绍

📑前言 随着科技的飞速发展,人工智能(AI)已经逐渐渗透到我们生活的方方面面。在艺术创作领域,AI技术同样展现出了其独特的魅力。今天,我们就来一起探索这个神秘而引人入胜的领域,深入了解AI绘画工具的奥秘及其为艺术创作带来的革命性变革。 一、AI绘画工具的崛起 1.1 颠覆传统绘画模式 在过去,绘画是艺术家们通过手中的画笔,蘸取颜料,在画布上自由挥洒的创造性过程。然而,随着AI绘画工

20.Spring5注解介绍

1.配置组件 Configure Components 注解名称说明@Configuration把一个类作为一个loC容 器 ,它的某个方法头上如果注册7@Bean , 就会作为这个Spring容器中的Bean@ComponentScan在配置类上添加@ComponentScan注解。该注解默认会扫描该类所在的包下所有的配置类,相当于之前的 <context:component-scan>@Sc

vue3项目将所有访问后端springboot的接口统一管理带跨域

vue3项目将所有访问后端springboot的接口统一管理带跨域 一、前言1.安装Axios2.创建Axios实例3.创建API服务文件4.在组件中使用API服务 二、跨域三、总结 一、前言 在Vue 3项目中,统一管理所有访问后端Spring Boot接口的最佳实践是创建一个专门的API服务层。这可以让你的代码更加模块化、可维护和集中管理。你可以使用Axios库作为HTT

[vivado][IP核]FFT

刘东华的IP核详解: 1、 2、

[vivado][IP核]DDS

刘东华的IP核详解: 1、 这里的是指IP核配置中的相位数据的宽度。 2、 实际使用此IP核时并没有“频率分辨率”可以配,是靠改变来变的。 3、 4、 5、 数据输出的ready在数据正式输出时才会有。 自己仿真: 使用SIN/COS LUT only的模式,使用一个累加器作为相位输入,不知怎么,输出为X。

[ip核][vivado]aurora

Xapp1193:  discovered:1)并不是所有芯片都支持aurora.xc7z010就没有。                     2)XDC文件的指令-允许未约束的引脚的存在:                 set_property BITSTREAM.General.UnconstrainedPins {Allow} [current_design] PG046

[ip核][vivado]Block Menory Gennerator 学习

<刘东华的xilinx系列FPGA芯片IP核详解>读书摘录: 1. 2. 3.

[ip核][vivado]FIFO 学习

<xlinx FPGA应用进阶 通用IP核详解和设计开发>读书摘录: 1.        2.3.仿真模型 特点总结:1)复位后会有busy状态,需要等待wr_rst_busy信号低电平后才能正常写入                  2)prog_full信号的高电平长度可调                  3)仿真中的读状态很奇怪,并没有正常读取,都是XXX的状态。 所用的te

局域网内vue2 配置本地IP地址访问项目

在日常开发中同事可能需要访问你的前端项目,可以通过配置实现通过ip访问 一.首先找到config文件夹目录下的 index.js文件             将此处的host的值修改为0.0.0.0(即 host: 0.0.0.0) // Various Dev Server settings//host: 'localhost' //将localhost进行替换成 0.0.0.0host:

C++标准模板库STL介绍

STL的六大组成部分 STL(Standard Template Library)是 C++ 标准库中的一个重要组成部分,提供了丰富的通用数据结构和算法,使得 C++ 编程变得更加高效和方便。STL 包括了 6 大类组件,分别是算法(Algorithm)、容器(Container)、空间分配器(Allocator)、迭代器(Iterator)、函数对象(Functor)、适配器(Adapter)