LMB(Local Memory Bus)是一种同步总线,主要用于访问FPGA上的块RAM(Block RAM,BRAM)。LMB使用最少的控制信号和一个简单的协议,以保证块RAM能在一个时钟周期内被存取。所有的LMB信号都是高电平有效(active high),这意味着当信号处于高电平时,它们才处于活动状态。
-
N = 32 - 64, 地址总线的宽度
N
可以是32位到64位,具体取决于配置参数C_ADDR_SIZE
。这个特性在MicroBlaze的v9.6版本中引入。 -
N = 32 - 64, 当使用物理地址扩展(PAE)或64位MicroBlaze时,地址总线的宽度
N
仍然可以根据C_ADDR_SIZE
配置为32位到64位。这个特性在MicroBlaze的v10.0版本中引入。 -
N = 4, 8, 当使用64位MicroBlaze时,另一个总线或信号(可能是
Byte_Enable
或其他与数据大小相关的信号)的宽度N
可以是4位或8位,具体取决于配置参数C_LMB_DATA_SIZE
。这个特性在MicroBlaze的v11.0版本中引入。 - N = 32, 64, 当使用64位MicroBlaze时,
N
的值可以是32位或64位,具体取决于配置参数C_LMB_DATA_SIZE
。这个特性是在MicroBlaze的v11.0版本中引入的。 - 这部分信息是在MicroBlaze的v8.00版本中首次引入。
Addr[0:N-1]
地址总线是MicroBlaze IP核的输出,用于与外部存储器或其他设备之间的连接,指示当前传输中正被访问的内存地址。
当AS
为高电平时,地址总线上的Addr[0:N-1]
信号才是有效的。在某些情况下,访问外部存储器或设备可能需要多个时钟周期才能完成(例如,因为延迟、等待响应或其他原因)。在这种情况下,尽管整个传输可能需要多个时钟周期,但地址总线上的Addr[0:N-1]
只在传输的第一个时钟周期内是有效的。这意味着外部设备应该在第一个时钟周期内捕获地址,并在后续周期中根据该地址进行必要的操作。
Byte_Enable[0:N]
字节使能信号是MicroBlaze IP核的输出,用于指示数据总线的哪些字节通道包含有效的数据。字节使能信号Byte_Enable
仅在AS
信号为高电平时有效。
当访问外部存储器或设备需要多个时钟周期才能完成时,Byte_Enable
信号仅在传输的第一个时钟周期内有效。这意味着外部设备应该在第一个时钟周期内捕获Byte_Enable
信号,并根据它来决定哪些字节通道的数据是有效的,然后在后续周期中根据这些信息进行必要的操作。
下表中列出了Byte_Enable
信号的有效值。
Data_Write[0:N-1]
AS
为高电平时有效。这意味着,只有当
AS
信号被激活(置为高)时,写数据总线上的数据才会被外部存储器读取和写入。
Byte_Enable[0:3]
是一个4位的字节使能信号,用于指示写数据总线的哪些字节通道包含有效的数据。
AS
地址选通(AS)是MicroBlaze IP核的输出,它用于指示数据传输的开始,并确认地址总线和字节使能信号的有效性。AS信号仅在传输的第一个时钟周期内为高电平。在第一个时钟周期之后,AS信号变为低电平,并保持低电平直到下一次传输的开始。
Read_Strobe
读选通是MicroBlaze IP核的输出,用于指示正在进行的读取传输。读选通信号在传输的第一个时钟周期内变为高电平。它可以保持高电平,直到读取操作完成并且Ready
信号被采样为高电平的下一个时钟周期。Ready
信号是外部设备(如存储器)向MicroBlaze IP核发送的一个信号,用于指示外部设备已经准备好提供数据或完成当前操作。
当Ready
信号被采样为高电平时,读选通信号(Read Strobe)可能会在下一个时钟周期变为低电平,表明读取操作已经完成。
如果在Ready
信号为高电平的下一个时钟周期直接开始新的读取传输,那么读选通信号可能会保持高电平。这意味着连续的读取操作可能会导致读选通信号保持高电平多个时钟周期,直到最后一次读取操作完成并且Ready
信号被采样为高电平。
Write_Strobe
写选通(Write Strobe)是MicroBlaze IP核的输出,用于指示正在进行的写入传输。
写选通信号在传输的第一个时钟周期内变为高电平。它可以保持高电平,直到写入操作完成并且Ready
信号被采样为高电平的下一个时钟周期。
当Ready
信号被采样为高电平时,写选通信号(Write Strobe)可能会在下一个时钟周期变为低电平,表明写入操作已经完成。
如果在Ready
信号为高电平的下一个时钟周期直接开始新的写入传输,那么写选通信号(Write_Strobe)可能会保持高电平。
这意味着连续的写入操作可能会导致写选通信号保持高电平多个时钟周期,直到最后一次写入操作完成并且Ready
信号被采样为高电平。
Data_Read[0:N-1]
读数据总线是MicroBlaze IP核的输出,包含从外部存储器或其他设备读取的数据。在Ready
信号为高电平时,于时钟的上升沿Data_Read
变得有效。
Ready
Ready
信号是外部设备向MicroBlaze IP核发送的一个输入信号,它用于指示当前传输的完成,并表明下一个传输可以在下一个时钟周期开始。Ready
信号在时钟的上升沿被采样。
当Ready
信号为高电平时,它指示Data_Read[0:31]
总线上的数据是有效的。这意味着MicroBlaze IP核可以在该时钟周期的上升沿之后安全地读取这些数据。
当Ready
信号为高电平时,它表明Data_Write[0:31]
总线上的数据已经被写入到本地存储器中。它通知MicroBlaze IP核写入操作已经完成,并可以开始下一个操作或传输。
Wait
信号是外部设备向MicroBlaze IP核发送的一个输入信号,用于指示当前的数据传输请求已经被接受,但传输操作尚未完成。
Wait
信号在时钟的上升沿被采样,
当Wait
信号为高电平时,MicroBlaze IP核知道它发起的数据传输请求已经被外部设备接收,但传输过程仍在进行中,尚未完成。在这种情况下,MicroBlaze IP核通常会暂停或延迟后续的操作,直到Wait
信号变为低电平,指示传输已经完成。
CE
CE
信号是外部设备向MicroBlaze IP核发送的一个输入信号,用于指示当前的数据传输中存在一个可纠正的错误,并且该错误已经被外部设备或内存系统纠正。CE
信号在Ready
信号为高电平时,于时钟的上升沿变得有效。
对于读取操作:当CE
信号有效时,它表明Data_Read[0:31]
总线上的数据在传输过程中存在一个可纠正的错误,但该错误已经被纠正。因此,尽管有错误发生,但读取到的数据是正确的。
对于字节或半字写入操作:如果CE
信号有效,则表明在将新数据写入本地存储器之前,相应的数据字在本地存储器中已经存在一个可纠正的错误,并且该错误已经被纠正。这意味着新数据将被写入到一个没有错误的数据字上。
UE
UE
信号是外部设备向MicroBlaze IP核发送的一个输入信号,它用于指示当前的数据传输中存在一个不可纠正的错误,即该错误无法被外部设备或内存系统修复。UE
信号在Ready
信号为高电平时,于时钟的上升沿变得有效。
对于读取操作:当UE
信号有效时,它表明Data_Read[0:31]
总线上的数据在传输过程中存在一个不可纠正的错误。因此,处理器核心应该认为这个数据值是错误的,并且不能信任它。
对于字节或半字写入操作:如果UE
信号有效,则表明在将新数据写入本地存储器之前,相应的数据字(word)在本地存储器中就已经存在一个不可纠正的错误。此时,MicroBlaze IP核需要决定如何处理这个错误,因为新的数据将覆盖一个有问题的数据字。
Clk
所有在LMB上进行的操作(如数据的读写)都是与MicroBlaze IP核时钟同步的,这意味着每一个操作都在MicroBlaze IP核时钟的特定周期(如上升沿或下降沿)开始和结束,这种同步性确保了数据的一致性和传输的效率。