AvalonMM
AvalonMM总线非常适合FPGA。它非常灵活:
能够与APB一样简单
在许多需要带宽的应用中比AHB更好,因为AvalonMM有一种将读取响应与命令解耦的模式(减少延迟读延迟的影响)。
性能不如AXI,但使用的逻辑面积少得多(读取和写入命令使用相同的握手通道。主端不需要存储挂起请求的地址,从而避免读取/写入冒险)
Configuration and instantiation
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)