AvalonMM

AvalonMM总线非常适合FPGA。它非常灵活:

  • 能够与APB一样简单

  • 在许多需要带宽的应用中比AHB更好,因为AvalonMM有一种将读取响应与命令解耦的模式(减少延迟读延迟的影响)。

  • 性能不如AXI,但使用的逻辑面积少得多(读取和写入命令使用相同的握手通道。主端不需要存储挂起请求的地址,从而避免读取/写入冒险)

配置和实例化

AvalonMM 包有一个构造参数 AvalonMMConfig 。由于Avalon总线的灵活性, AvalonMMConfig 有很多配置元素。有关Avalon规范的更多信息,请访问英特尔网站。

case class AvalonMMConfig( addressWidth : Int,
                           dataWidth : Int,
                           burstCountWidth : Int,
                           useByteEnable : Boolean,
                           useDebugAccess : Boolean,
                           useRead : Boolean,
                           useWrite : Boolean,
                           useResponse : Boolean,
                           useLock : Boolean,
                           useWaitRequestn : Boolean,
                           useReadDataValid : Boolean,
                           useBurstCount : Boolean,
                           //useEndOfPacket : Boolean,

                           addressUnits : AddressUnits = symbols,
                           burstCountUnits : AddressUnits = words,
                           burstOnBurstBoundariesOnly : Boolean = false,
                           constantBurstBehavior : Boolean = false,
                           holdTime : Int = 0,
                           linewrapBursts : Boolean = false,
                           maximumPendingReadTransactions : Int = 1,
                           maximumPendingWriteTransactions : Int = 0, // unlimited
                           readLatency : Int = 0,
                           readWaitTime : Int = 0,
                           setupTime : Int = 0,
                           writeWaitTime : Int = 0
                           )

这个配置类还有一些函数:

名称

返回类型

描述

getReadOnlyConfig

AvalonMMConfig

返回一个类似的配置,但禁用所有写入属性

getWriteOnlyConfig

AvalonMMConfig

返回一个类似的配置,但禁用所有读取属性

这个配置伴随对象还有一些函数来提供一些 AvalonMMConfig 模板:

名称

返回类型

描述

fixed(addressWidth,dataWidth,readLatency)

AvalonMMConfig

返回一个具有固定读取时间的简单配置

pipelined(addressWidth,dataWidth)

AvalonMMConfig

返回一个具有可变延迟读取的配置 (readDataValid)

bursted(addressWidth,dataWidth,burstCountWidth)

AvalonMMConfig

返回一个具有可变延迟读取和突发功能的配置

// Create a write only AvalonMM configuration with burst capabilities and byte enable
val myAvalonConfig =  AvalonMMConfig.bursted(
                        addressWidth = addressWidth,
                        dataWidth = memDataWidth,
                        burstCountWidth = log2Up(burstSize + 1)
                      ).copy(
                        useByteEnable = true,
                        constantBurstBehavior = true,
                        burstOnBurstBoundariesOnly = true
                      ).getWriteOnlyConfig

// Create an instance of the AvalonMM bus by using this configuration
val bus = AvalonMM(myAvalonConfig)