从端总线库(Bus Slave Factory)

一、简介

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

为了体现该工具的功能, 有一个简单的示例, 其使用Apb3SlaveFactory的变体来实现内存映射的UART(请见examples)。还有一个包含一个内存映射函数的Timer的例子(请见examples)。

您可以在(Developers area >> Bus Slave Factory Implementation)找到更多关于BusSlaveFactory工具内部实现的文档

二、功能性(Functionality)

目前BusSlaveFactory工具有三个实现方式:APB3、AXI-lite 3和Avalon。

该工具的每个实现都以一个对应总线的实例作为参数, 然后提供以下函数来映射用户的硬件到内存映射:

命名 返回类型 描述
busDataWidth Int 返回总线的数据位宽
read(that,address,bitOffset) bitOffset下的对that的回应
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) thataddress地址可读并可写, 并将其防止在字的bitOffset位置
readMultiWord(that,address) 为从addressthat创建内存映射。如果that大于一个字, 则它会扩大相应位置的寄存器
writeMultiWord(that,address) 为向addressthat创建内存映射。如果that大于一个字, 则它会扩大相应位置的寄存器
createWriteOnly(dataType,address,bitOffset) T 创建一个dataType类型的只读寄存器并且放置于字的bitOffset位置
createReadWrite(dataType,address,bitOffset) T 创建一个dataType类型的读写寄存器并且放置于字的bitOffset位置
createAndDriveFlow(dataType,address,bitOffset) Flow[T] 创建一个dataType类型的可写流寄存器并且放置于字的bitOffset位置
drive(that,address,bitOffset) 通过一个地址为address的可写寄存器驱动that并且放置于字的bitOffset位置
driveAndRead(that,address,bitOffset) 通过一个地址为address的可读可写寄存器驱动that并且放置于字的bitOffset位置
driveFlow(that,address,bitOffset) 当对地址address写时, 使用放置在字的bitOffset位置的数据发送that进行传输
readStreamNonBlocking(that,
address,
validBitOffset,
payloadBitOffset)
当对address地址读时, 读取that并完成传输
valid <= validBitOffset bit
payload <= payloadBitOffset+widthOf(payload) downto payloadBitOffset
doBitsAccumulationAndClearOnRead(that,
address,
bitOffset)
实例化一个内部寄存器, 其每周期会进行:reg := reg