Avalon® 接口规范

ID 683091
日期 5/27/2021
Public
文档目录

3.2. Avalon® 存储器映射接口信号角色

信号角色定义了 Avalon® -MM主端口和从端口支持的信号类型。

此规范不要求所有信号存在于一个 Avalon® -MM接口中。也没有始终需要哪一个信号。对 Avalon® -MM接口的最低要求是只读接口需要使用readdata,或者只写接口需要使用writedatawrite

下表列出了 Avalon® -MM接口的信号角色:

表 9.   Avalon® 存储器映射信号角色某些 Avalon® 存储器映射信号可以是高电平有效(active high)或低电平有效(active low)。当低电平有效时,信号名称以_n结尾。
信号角色(Signal Roles) 宽度 方向 是否需要 描述
基本信号
address 1 - 64 Host → Agent No

Hosts:默认情况下,address信号代表一个字节地址。地址的值必须与数据宽度对齐。要写入一个数据字中的特定字节,host必须使用byteenable信号。请参考addressUnits接口属性来了解字寻址。

Agents:默认情况下,互连(interconnect)将字节地址转换成agent的地址空间中的一个字地址。从agent的角度来看,每个agent访问都是针对一个数据字。

例如,address = 0选择agent的第一个字。address = 1选择agent的第二个字。请参考addressUnits接口属性来了解字节寻址。

byteenable

byteenable_n

2, 4, 8, 16, 32, 64, 128 Host → Agent No 使能宽度大于8比特接口上的传输过程中一个或者多个特定字节通道。byteenable中的每个比特对应于writedatareaddata中的一个字节。byteenable的host bit <n>表明是否写入byte <n>。写操作期间,byteenables指定写入哪些字节。其他字节会被agent忽略。读操作期间,byteenables表明host读取哪些字节。仅返回readdata而无副作用的agent可以在读操作期间忽略byteenables。如果一个接口没有byteenable信号,那么传输继续,就像所有byteenables都被置位一样。

当置位byteenable信号的多个比特时,所有置位的数据通路都是相邻的。

debugaccess 1 Host → Agent No 置位时,允许 Nios® II处理器对配置成ROM的片上存储器进行写操作。
read

read_n

1 Host → Agent No 置位后,表明一个read传输。如果存在,则需要readdata
readdata 8, 16, 32, 64, 128, 256, 512, 1024 Agent → Host No readdata从agent驱动到host,以响应read传输。支持读操作的接口需要。
response [1:0] 2 Agent → Host No

response信号是一个承载响应状态的可选信号。

注: 由于该信号是共享的,因此接口不能在同一时钟周期内发布或接受写响应和读响应。
  • 00: OKAY—对一个事务的成功响应。
  • 01: RESERVED—编码被保留。
  • 10: SLVERR—来自端点agent的错误。表明一个失败的事务。
  • 11: DECODEERROR—表明尝试访问一个未定义位置。

对于读响应:

  • 一个是通过每个readdata发送的响应。值为N的读突发长度会导致N个响应。即便在出现错误的情况下,更少的响应也是无效的。对于突发中的每个readdata,响应信号值可能不同。
  • 接口必须要有读控制信号。使用readdatavalid信号可支持流水线(pipeline)。
  • 在读错误上,对应的readdata是"don't care"。

对于写响应:

  • 必须对每个写命令发送一个写响应。一个写突发仅产生一个响应,必须在突发中的最后一个写传输被接受之后发送。
  • 如果存在writeresponsevalid,那么所有写命令必须与写响应一同完成。
write

write_n

1 Host → Agent No 置位表明一个write传输。如果存在,则需要writedata
writedata 8, 16, 32, 64, 128, 256, 512, 1024 Host → Agent No 写传输的数据。宽度必须与readdata的宽度相同(如果两者都存在)。支持写操作的接口需要。
等待状态信号(Wait-State Signals)
lock 1 Host → Agent No lock确保一旦host赢得仲裁,此host就会维持访问多个传输事务的agent。Lock恰好与事务的锁定序列中第一个readwrite同时置位。Lock在事务的锁定序列中最后一个事务时解除置位。lock置位并不保证赢得仲裁。lock-asserting host被授予之后,此host保留授权,直到lock解除置位。

具备lock的host不能是一个突发host。已配备lock的host仲裁优先级值将被忽略。

lock对于read-modify-write (RMW)操作特别有用。典型的read-modify-write操作包括以下步骤:

  1. Host A置位lock,并读取具有多个比特字段的32比特数据。
  2. Host A解除置位lock,修改一个比特字段,并写回32比特数据。

lock阻止host B在Host A的读与写之间执行写操作。

waitrequest

waitrequest_n

1 Agent → Host No 当agent无法响应read或者write请求时会置位waitrequest。强制host等待,直到互连(interconnect)准备好继续传输。在所有传输开始时,host启动传输并等待,直到waitrequest解除置位。host处于空闲状态时,不得对waitrequest的置位状态做出假设:waitrequest可能是高电平或者低电平,这取决于系统属性。

waitrequest置位时,host对agent的控制信号必须保持不变,beginbursttransfer除外。关于说明beginbursttransfer信号的时序图,请参考Read Bursts(读突发)中的图示。

Avalon® 存储器映射agent可以在空闲周期内置位waitrequest Avalon® 存储器映射host可以在waitrequest置位时启动一个事务,并等待此信号解除置位。为避免系统锁定,agent器件在复位状态时会置位waitrequest

流水线信号(Pipeline Signals)
readdatavalid

readdatavalid_n

1 Agent → Host No 用于可变延迟,流水线化的read传输。置位时表明readdata信号包含有效数据。对于突发计数(burstcount)值为<n>的读突发,readdatavalid信号必须置位<n>次,每个readdata item一次。在read的接受与readdatavalid的置位之间必须至少有一个周期的延迟。关于显示readdatavalid信号的时序图,请参考Pipelined Read Transfer with Variable Latency(通过可变频率的流水线化读传输)。

agent可以通过置位readdatavalid将数据传输到host,而不用考虑agent是否使用了waitrequest停止新命令。

如果host支持流水线化读取(pipelined read),则需要此信号。具有读功能的突发host必须包含readdatavalid信号。

writeresponsevalid 1 Agent → Host No

可选信号。如果存在,那么接口发布写命令的写响应。

置位时,响应信号上的值是一个有效的写响应。

仅在写命令被接受后才置位Writeresponsevalid一个或多个时钟周期。从命令接受到writeresponsevalid置位之间至少有一个时钟周期的延迟。

当突发的最后一个beat被发送到agent并且waitrequest为低电平时才认为写命令被接受。在发布突发的最后一个beat后,可置位writeresponsevalid一个或多个时钟周期。

突发信号(Burst Signals)
burstcount 1 – 11 Host → Agent No 突发host用以指示每个突发中的传输数量。burstcount参数的最大值必须是2的幂。一个宽度为<n>的burstcount接口能够解码一个尺寸为2(<n>-1)的最大突发。例如,一个4-bit burstcount信号能够支持的最大突发数为8。最小burstcount为1。constantBurstBehavior属性控制burstcount信号的时序。具有读功能的突发host必须包含readdatavalid信号。

对于使用字节地址的host和agent,对地址宽度有以下限制:

<address_w> >= <burstcount_w> +
log2(<symbols_per_word_of_interface>)

对于使用字地址的host和agent,上述方程中的log2 项被省略。

beginbursttransfer 1 Interconnect → Agent No 一个突发的第一个周期时置位,以指示一个突发传输的开始。此信号在一个周期后解除置位,无论waitrequest的值如何。有关说明beginbursttransfer的时序图,请参考Read Bursts(读突发)中的图。

beginbursttransfer是可选的。通过对数据传输的计数,agent总是能够在内部计算出下一个写突发事务的开始。

警告: do not使用此信号。此信号是为了支持传统存储控制器而存在。