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

相关文章

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Java中HashMap的用法详细介绍

《Java中HashMap的用法详细介绍》JavaHashMap是一种高效的数据结构,用于存储键值对,它是基于哈希表实现的,提供快速的插入、删除和查找操作,:本文主要介绍Java中HashMap... 目录一.HashMap1.基本概念2.底层数据结构:3.HashCode和equals方法为什么重写Has

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

基于Redisson实现分布式系统下的接口限流

《基于Redisson实现分布式系统下的接口限流》在高并发场景下,接口限流是保障系统稳定性的重要手段,本文将介绍利用Redisson结合Redis实现分布式环境下的接口限流,具有一定的参考价值,感兴趣... 目录分布式限流的核心挑战基于 Redisson 的分布式限流设计思路实现步骤引入依赖定义限流注解实现

setsid 命令工作原理和使用案例介绍

《setsid命令工作原理和使用案例介绍》setsid命令在Linux中创建独立会话,使进程脱离终端运行,适用于守护进程和后台任务,通过重定向输出和确保权限,可有效管理长时间运行的进程,本文给大家介... 目录setsid 命令介绍和使用案例基本介绍基本语法主要特点命令参数使用案例1. 在后台运行命令2.

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以