总线从端生成器

简介

在许多情况下,需要实现总线寄存器组, BusSlaveFactory 是一个提供了一种抽象且流畅的方式来定义它们的工具。

要了解该工具的功能,可以通过一个简单的使用Apb3SlaveFactory变体来实现 内存映射UART 的示例。还有另一个 计时器 的示例,其中包含内存映射函数。

您可以在 这里 找到有关 BusSlaveFactory 工具内部实现的更多文档

功能

有许多 BusSlaveFactory 工具的实现,包括后续总线:AHB3-lite、APB3、APB4、AvalonMM、AXI-lite 3、AXI4、BMB、Wishbone 和 PipelinedMemoryBus。
该工具的每个实现都接受相应总线的一个实例作为参数,然后提供以下函数,用于将您的硬件映射到内存映射:

名称

返回类型

描述

busDataWidth

Int

返回总线的数据宽度

read(that,address,bitOffset)

当通过总线读取地址 address 时,用 thatbitOffset 位置的数据填充响应

write(that,address,bitOffset)

当通过总线写入地址 address 时,将总线上 bitOffset 位置的数据赋值 that

onWrite(address)(doThat)

address 地址上发生写操作(出现写事务)时调用 doThat

onRead(address)(doThat)

address 上发生读操作(出现读事务)时调用 doThat

nonStopWrite(that,bitOffset)

将通过总线写入的 bitOffset 的数据赋值到 that

readAndWrite(that,address,bitOffset)

使 that 信号可通过 address 地址读写,并且该信号放置在数据的 bitOffset 位置

readMultiWord(that,address)

创建内存映射以从 ‘address’ 读取 that
如果 that 的位宽大于一个字(32位),它将在以下地址上扩展寄存器

writeMultiWord(that,address)

创建内存映射以在 ‘address’ 处写入 that
如果 that 的位宽大于一个字(32位),它将在以下地址上扩展寄存器

createWriteOnly(dataType,address,bitOffset)

T

address 地址处创建一个 dataType 类型的只写寄存器,并将其放置在字中的 bitOffset 位置

createReadWrite(dataType,address,bitOffset)

T

address 处创建一个 dataType 类型的读写寄存器,并将其放置在字中的 bitOffset 位置

createAndDriveFlow(dataType,address,bitOffset)

Flow[T]

address 地址处创建一个 dataType 类型的可写流(Flow)寄存器,并将其放置在字中的 bitOffset 位置

drive(that,address,bitOffset)

使用位于 address 地址的可写寄存器中 bitOffset 位置的信号驱动 that

driveAndRead(that,address,bitOffset)

使用位于 address 地址的可读写寄存器中 bitOffset 位置的信号驱动 that

driveFlow(that,address,bitOffset)

当对 address 地址写入时,通过使用位于 bitOffset 位的数据,在 that 流(Flow)上发出事务

readStreamNonBlocking(that,
address,
validBitOffset,
payloadBitOffset)
读取 that 信号并在读取 address 地址时消耗事务。
valid <= validBitOffset bit
payload <= payloadBitOffset+widthOf(payload) downto payloadBitOffset
doBitsAccumulationAndClearOnRead(that,
address,
bitOffset)
实例化一个内部寄存器,该寄存器在每个周期执行以下操作:
reg := reg | that
然后,当发生读取时,寄存器被清除。该寄存器可通过 address 地址读取,并放置在字中的 bitOffset 位置