从端总线库(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) | 令that 在address 地址可读并可写, 并将其防止在字的bitOffset 位置 |
|
readMultiWord(that,address) | 为从address 读that 创建内存映射。如果that 大于一个字, 则它会扩大相应位置的寄存器 |
|
writeMultiWord(that,address) | 为向address 写that 创建内存映射。如果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 |