Axi4
AXI4是ARM定义的高带宽总线。
Configuration and instantiation
首先,每当您想要创建AXI4总线时,您都需要一个配置对象。该配置对象是一个 Axi4Config
并具有以下参数:
注意:useXXX用于指定总线是否存在XXX信号。
参数名称 |
类型 |
默认值 |
---|---|---|
addressWidth |
Int |
|
dataWidth |
Int |
|
idWidth |
Int |
|
userWidth |
Int |
|
useId |
Boolean |
true |
useRegion |
Boolean |
true |
useBurst |
Boolean |
true |
useLock |
Boolean |
true |
useCache |
Boolean |
true |
useSize |
Boolean |
true |
useQos |
Boolean |
true |
useLen |
Boolean |
true |
useLast |
Boolean |
true |
useResp |
Boolean |
true |
useProt |
Boolean |
true |
useStrb |
Boolean |
true |
useUser |
Boolean |
false |
简而言之,AXI4总线在SpinalHDL库中定义方式如下:
case class Axi4(config: Axi4Config) extends Bundle with IMasterSlave {
val aw = Stream(Axi4Aw(config))
val w = Stream(Axi4W(config))
val b = Stream(Axi4B(config))
val ar = Stream(Axi4Ar(config))
val r = Stream(Axi4R(config))
override def asMaster(): Unit = {
master(ar,aw,w)
slave(r,b)
}
}
这是一个简单的使用示例:
val axiConfig = Axi4Config(
addressWidth = 32,
dataWidth = 32,
idWidth = 4
)
val axiX = Axi4(axiConfig)
val axiY = Axi4(axiConfig)
when(axiY.aw.valid) {
// ...
}
变体
Axi4总线还有其他3种变体:
类型 |
描述 |
---|---|
Axi4ReadOnly |
只存在AR和R通道 |
Axi4WriteOnly |
只存在AW、W和B通道 |
Axi4Shared |
此变体是该库的首创。
它使用4个通道,W、B、R,还有一个新通道,称为AWR。
AWR通道可用于传输AR和AW事务。为了分离它们,需要一个
write 信号。这种Axi4Shared变体的优点是使用更少的面积,特别是在互连方面。
|
函数和运算符
名称 |
返回类型 |
描述 |
---|---|---|
X >> Y |
将X连接到Y。能够像AXI4规范中指定的那样推断默认值,并以安全的方式调整一些位宽。 |
|
X << Y |
执行>>运算符相反的操作 |
|
X.toWriteOnly |
Axi4WriteOnly |
返回由X驱动的Axi4WriteOnly总线 |
X.toReadOnly |
Axi4ReadOnly |
返回由X驱动的Axi4ReadOnly总线 |