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)