microblaze 软核处理器接口
DESCRIPTION
MicroBlaze 软核处理器接口. 何宾 2012.02. MicroBlaze 软核处理器接口. 本章详细介绍了 MicroBlaze 软核处理的接口,这些接 口包括: (1) AXI4 接口 ; (2) PLB 接口 ; (3) LMB 接口 ; (4) FSL 接口 ; (5) XCL 接口 ; (6) 调试接口和跟踪接口。 这些接口提供了软核处理器与片上、片外外设和存储 器的灵活接口。此外,接口也提供了点对点的或者共享 总线的数据传输方式。. - PowerPoint PPT PresentationTRANSCRIPT
MicroBlazeMicroBlaze 软核处理器接口软核处理器接口
何宾何宾2012.022012.02
MicroBlazeMicroBlaze 软核处理器接口软核处理器接口
本章详细介绍了 MicroBlaze 软核处理的接口,这些接口包括: (1) AXI4 接口 ;
(2) PLB 接口 ;
(3) LMB 接口 ;
(4) FSL 接口 ;
(5) XCL 接口 ;
(6) 调试接口和跟踪接口。 这些接口提供了软核处理器与片上、片外外设和存储器的灵活接口。此外,接口也提供了点对点的或者共享总线的数据传输方式。
MicroBlazeMicroBlaze 接口概述接口概述 MicroBlaze 处理器结构采用哈弗结构,即为数据和指令访问提供了独立的总线接口单元。 MicroBlaze 处
理器支持下面四种存储器接口:
– 本地存储器总线( LMB );– AMBA AXI4 接口( AXI4 );– IBM 处理器本地总线( PLB );– Xilinx 的 CacheLink ( XCL )接口;
MicroBlazeMicroBlaze 软核处理器接口软核处理器接口
LMB 提供了以单时钟周期访问双端口存储器的能力。 AXI4 和 PLB 提供了片上和片外外设和存储器的接口。 CacheLink 接口和外部存储器控制一起用作专门用途。 MicroBlaze 处理器支持最多 16 个简单快速链接 FSL
或者 AXI4-Stream 接口端口,每一个端口有主和从接口。
MicroBlazeMicroBlaze 软核处理器接口软核处理器接口
MicroBlaze 处理器能配置成下面的总线接口:– ARMA AXI4 接口;– 32 位版本的 PLBV4.6 接口;– LMB 提供简单同步协议用于高效的 BRAM 传输;– FSL 或 AXI4-Stream 提供快速无需仲裁的流通信机制;– XCL 提供在缓存和外部存储器控制器之间的快速从设备
仲裁的流接口;– 调试接口和处理器调试模块( MDM )一起使用;– 跟踪接口用于性能分析;
AXI4AXI4 接口 接口 ---- 存储器映射接口存储器映射接口
MicroBlaze AXI4 存储器映射的外设接口( M_AXI_DP , M_AXI_IP )实现 32 位的主接口。这些接口只发出单个地址,所有的交易按顺序完成。 (1) 指令外设接口只执行单字读访问,总是设置使用 AXI4-Lite 子 集; (2) 数据外设接口执行单字访问,默认设置使用 AXI4-Lite 子集, 当使能用于 LWX 和 SWX 的互斥访问时,使用 AXI4 。通过设 置合适的字节选通,可以执行半字和字节写操作;
AXI4AXI4 接口 接口 ---- 存储器映射接口存储器映射接口
AXI4 存储器映射的缓存接口( M_AXI_DC ,M_AXI_IC )可以实现 32 位、 128 位或者 256 位的主设备(取决于缓存行的长度和数据宽度参数)。 (1) 作为 32 位主设备,指令缓存接口执行 4 字或 8 字(取决于缓 存行长度)猝发读访问。作为 128 位或 256 位主设备,只执 行单个读访问。当使能流缓存时,这个接口能提供最多 2 个 地址或者 8 个地址。 (2) 作为 32 位主设备,数据缓存接口执行单字访问或 4/8 字猝发 访问(取决于缓存行长度)。当使用写通过缓存时,不执 行写猝发访问。通过设置合适的字节选通,可以执行字、 半字和字节写操作。当读时,接口最多发出 2 个地址,而当 写时,最多发出 32 个地址。使能互斥访问用于 LWX 和 SWX 指令。
AXI4AXI4 接口 接口 ---- 存储器映射接口存储器映射接口
M_AXI_DP 、 M_AXI_IP 、 M_AXI_DC 和M_AXI_IC 接口信号功能一样,表 4.1 给出了 M_AXI_
DP
端口的信号及功能。更具体的功能可以参看第二章的内容。
AXI4AXI4 接口 接口 ---- 存储器映射接口存储器映射接口
信号 接口 I/O 描述M_AXI_DP_AWID M_AXI_DP O 主设备写地址 ID
M_AXI_DP_AWADDR M_AXI_DP O 主设备写地址M_AXI_DP_AWLEN M_AXI_DP O 主设备猝发长度M_AXI_DP_AWSIZE M_AXI_DP O 主设备猝发大小M_AXI_DP_AWBURST M_AXI_DP O 主设备猝发类型M_AXI_DP_AWLOCK M_AXI_DP O 主设备锁类型M_AXI_DP_AWCACHE M_AXI_DP O 主设备缓存类型M_AXI_DP_AWPROT M_AXI_DP O 主设备保护类型M_AXI_DP_AWQOS M_AXI_DP O 主设备服务质量M_AXI_DP_AWVAILD M_AXI_DP O 主设备写地址有效M_AXI_DP_AWREADY M_AXI_DP I 从设备写地址准备M_AXI_DP_WDATA M_AXI_DP O 主设备写数据M_AXI_DP_WSTRB M_AXI_DP O 主设备写选通M_AXI_DP_WLAST M_AXI_DP O 主设备写最后M_AXI_DP_WVALID M_AXI_DP O 主设备写有效
AXI4AXI4 接口 接口 ---- 存储器映射接口存储器映射接口
M_AXI_DP_WREADY M_AXI_DP I 从设备写准备M_AXI_DP_BID M_AXI_DP I 从设备响应 ID
M_AXI_DP_BRESP M_AXI_DP I 从设备写响应M_AXI_DP_BVALID M_AXI_DP I 从设备写响应有效M_AXI_DP_BREADY M_AXI_DP O 主设备响应准备M_AXI_DP_ARID M_AXI_DP O 主设备读地址 ID
M_AXI_DP_ARADDR M_AXI_DP O 主设备读地址M_AXI_DP_ARLEN M_AXI_DP O 主设备猝发长度M_AXI_DP_ARSIZE M_AXI_DP O 主设备猝发大小M_AXI_DP_ARBURST M_AXI_DP O 主设备猝发类型M_AXI_DP_ARLOCK M_AXI_DP O 主设备锁类型M_AXI_DP_ARCACHE M_AXI_DP O 主设备缓存类型M_AXI_DP_ARPORT M_AXI_DP O 主设备保护类型M_AXI_DP_ARQOS M_AXI_DP O 主设备服务质量M_AXI_DP_ARVAILD M_AXI_DP O 主设备读地址有效
AXI4AXI4 接口 接口 ---- 存储器映射接口存储器映射接口
M_AXI_DP_ARREADY M_AXI_DP I 从设备读地址准备
M_AXI_DP_RID M_AXI_DP I 从设备读 ID标志
M_AXI_DP_RDATA M_AXI_DP I 从设备读数据
M_AXI_DP_RRESP M_AXI_DP I 从设备读响应
M_AXI_DP_RLAST M_AXI_DP I 从设备读最后
M_AXI_DP_RVALID M_AXI_DP I 从设备读有效
M_AXI_DP_RREADY M_AXI_DP O 主设备读准备
AXI4AXI4 接口 接口 ---- 流接口流接口
MicroBlaze AXI4-Stream 接口 (M0_AXIS..M15_AXIS,
S0_AXIS..S15_AXIS)
实现 32 位主设备或从设备。 Mn_AXIS_TLAST , Sn_AXIS_TLAST 信号直接
对应于同等的 FSLn_M_Control 和 FSLn_S_Control 信号。
AXI4AXI4 接口 接口 ---- 流接口流接口
1 .写操作 MicroBlaze 通过使用 put 或 putd 指令执行写流接口
操作。写操作将寄存器的内容传到输出 AXI4 接口。对于阻塞模式写( put 或 cput 指令)在单个时钟周期内完
成传输,且接口不忙。如果接口忙,处理器停止,一直到其可用为止。非阻塞指令(前缀 n ),即使在忙时,也总是在单周期内完成传输。如果接口忙,禁止写并且设置 MSR 内的进位位。
AXI4AXI4 接口 接口 ---- 流接口流接口
2 .读操作 MicroBlaze 通过使用 get 或 getd 指令执行读流接口
操作。读操作将输入 AXI4 接口内容传输到寄存器。对于阻塞模式读在两个时钟周期内完成传输,且数据可用。如果数据不可用时,处理器在这条指令上停下来,一直到其可用为止。在非阻塞模式下(前缀 n ),不管数据是否可用,也总是在一个或者两个时钟周期内完成传输。如果数据不可用,不发生数据传输,并且设置 MSR 内的进位位。 表 4.2 给出了 M_AXI_Stream 端口的信号及功能。更具体的功能可以参看第二章的内容
AXI4AXI4 接口 接口 ---- 流接口流接口
信号 接口 I/O 描述
Mn_AXIS_TLAST M0_AXIS..M15_AXIS O 主设备接口输出 AXI4通道写最后
Mn_AXIS_TDATA M0_AXIS..M15_AXIS O 主设备接口输出 AXI4通道写数据
Mn_AXIS_TVALID M0_AXIS..M15_AXIS O 主设备接口输出 AXI4通道写有效
Mn_AXIS_TREADY M0_AXIS..M15_AXIS I 主设备接口输入 AXI4通道写准备
Sn_AXIS_TLAST M0_AXIS..M15_AXIS I 从设备接口输入 AXI4通道写最后
Sn_AXIS_TDATA M0_AXIS..M15_AXIS I 从设备接口输入 AXI4通道写数据
Sn_AXIS_TVALID M0_AXIS..M15_AXIS I 从设备接口输入 AXI4通道写有效
Sn_AXIS_TREADY M0_AXIS..M15_AXIS O 从设备接口输出 AXI4通道写准备
PLBPLB 接口接口
MicroBlaze 处理的 PLB 接口用于字节使能的 32 位主
设备。表 4.3 给出了 IPLB 总线接口信号定义。表 4.4给出
了 DPLB 总线接口定义。更详细的可以参考 PLBV46互
连和接口资料。
PLBPLB 接口接口 (IPLB)(IPLB)信号 接口 I/O 功能(指令侧 PLB 接口简称 IPLB )
IPLB_M_ABORT IPLB O IPLB 放弃总线请求指示IPLB_M_ABUS IPLB O IPLB 地址总线
IPLB_M_UABUS IPLB O IPLB 高部分地址总线IPLB_M_BE IPLB O IPLB 字节使能
IPLB_M_busLock IPLB O IPLB 总线锁定IPLB_M_lockErr IPLB O IPLB 总线锁定错误指示IPLB_M_Msize IPLB O IPLB 主设备数据总线大小
IPLB_M_priority IPLB O IPLB 请求优先级IPLB_M_rdBurst IPLB O IPLB 猝发式读传输指示IPLB_M_request IPLB O IPLB 总线请求IPLB_M_RNW IPLB O IPLB 读 / 非写IPLB_M_size IPLB O IPLB 传输大小
IPLB_M_TAttribute IPLB O IPLB 传输属性总线IPLB_M_type IPLB O IPLB 传输类型
IPLB_M_wrBurst IPLB O IPLB 猝发式写传输指示IPLB_M_wrDBus IPLB O IPLB 写数据总线
PLBPLB 接口接口 (IPLB)(IPLB)
IPLB_Mbusy IPLB I IPLB 从设备忙指示IPLB_MRdErr IPLB I IPLB 从设备读错误指示IPLB_MWrErr IPLB I IPLB 从设备写错误指示
IPLB_MIRQ IPLB I IPLB 从设备中断指示IPLB_MWRBTerm IPLB I IPLB 终止写猝发指示IPLB_MWrDAck IPLB I IPLB 写数据应答IPLB_MAddrAck IPLB I IPLB 地址应答IPLB_MRdBTerm IPLB I IPLB 终止读猝发指示IPLB_MRdDAck IPLB I IPLB 读数据应答IPLB_MRdDBus IPLB I IPLB 读数据总线
IPLB_MRdEdAddr IPLB I IPLB 读字总线IPLB_MRearbitrate IPLB I IPLB 再总裁指示
IPLB_MSSize IPLB I IPLB 从设备数据总线大小IPLB_MTimeout IPLB I IPLB 总线超时
PLBPLB 接口接口 (D(DPLB)PLB)
信号 接口 I/O 功能(数据侧 PLB 接口简称 DPLB ) DPLB_M_ABORT DPLB O DPLB 放弃总线请求指示DPLB_M_ABUS DPLB O DPLB 地址总线
DPLB_M_UABUS DPLB O DPLB 高部分地址总线DPLB_M_BE DPLB O DPLB 字节使能
DPLB_M_busLock DPLB O DPLB 总线锁定DPLB_M_lockErr DPLB O DPLB 总线锁定错误指示DPLB_M_Msize DPLB O DPLB 主设备数据总线大小
DPLB_M_priority DPLB O DPLB 请求优先级DPLB_M_rdBurst DPLB O DPLB 猝发式读传输指示DPLB_M_request DPLB O DPLB 总线请求DPLB_M_RNW DPLB O DPLB 读 / 非写DPLB_M_size DPLB O DPLB 传输大小
DPLB_M_TAttribute DPLB O DPLB 传输属性总线DPLB_M_type DPLB O DPLB 传输类型
PLBPLB 接口接口 (D(DPLB)PLB)
DPLB_M_wrBurst DPLB O DPLB 猝发式写传输指示DPLB_M_wrDBus IPLB O DPLB 写数据总线
DPLB_Mbusy DPLB I DPLB 从设备忙指示 DPLB_MRdErr DPLB I DPLB 从设备读错误指示DPLB_MWrErr DPLB I DPLB 从设备写错误指示
DPLB_MIRQ DPLB I DPLB 从设备中断指示DPLB_MWRBTerm DPLB I DPLB 终止写猝发指示DPLB_MWrDAck DPLB I DPLB 写数据应答DPLB_MAddrAck DPLB I DPLB 地址应答DPLB_MRdBTerm DPLB I DPLB 终止读猝发指示DPLB_MRdDAck DPLB I DPLB 读数据应答DPLB_MRdDBus DPLB I DPLB 读数据总线
DPLB_MRdEdAddr DPLB I DPLB 读字总线DPLB_MRearbitrate DPLB I DPLB 再总裁指示
DPLB_MSSize DPLB I DPLB 从设备数据总线大小DPLB_MTimeout DPLB I DPLB 总线超时
LMBLMB 接口接口 LMB 是同步总线,主要用于访问片上块 RAM 资源。 LMB 有最少的控制总线数目,使用简单协议保证以单周期访问本地块 RAM 资源。表 4.5 给出了 LMB
接口信号及定义。所有信号都是高有效。
LMBLMB 接口接口
信号 数据接口 指令接口 类型 功能Addr[0:31] Data_Addr[0:31] Insr_Addr[0:31
]O 地址总线
Byte_Enable[0:31] Byte_Enable[0:3] not used O 字节使能Data_Write[0:31] Data_Write[0:31] not used O 写数据总线
AS D_AS I_AS O 地址选通Read_Strobe Read_Strobe IFetch O 读进行Write_Strobe Write_Strobe not used O 写进行
Data_Read[0:31] Data_Read[0:31] Insr[0:31] I 读数据总线Ready DReady IReady I 下次传输准备Wait DWait IWait I 等待,直到准备被接受的传输CE DCE ICE I 可更正的错误UE 不可更正的错误Clk Clk Clk I 总线时钟
FSLFSL 接口接口
FSL 总线在输出 FIFO 和输入 FIFO 之间提供点对点的
通信通道,更详细的信息参考 IP 核参考资料。表 4.6给
出了主 FSL 信号接口,表 4.7 给出了从 FSL 接口信号。
FSLFSL 接口接口 (MFSL)(MFSL)
信号 功能 VHDL 类型 方向
FSLn_M_Clk 时钟 std_logic input
FSLn_M_Write 写使能信号,表示数据正被写到输出FSL
std_logic output
FSLn_M_Data 数据写到输出 FSL std_logic_vector output
FSLn_M_Control 控制位写到输出 FSL std_logic output
FSLn_M_Full 当设置时,表示输出 FSL 的 FIFO 满 std_logic input
FSLFSL 接口接口 (SFSL)(SFSL)
信号 功能 VHDL 类型 方向
FSLn_S_Clk 时钟 std_logic input
FSLn_S_Read 读响应信号表示,数据已经从输入 FSL 读出
std_logic output
FSLn_S_Data 在输入 FSL 的顶部的现在可用的数据 std_logic_vector input
FSLn_S_Control 控制比特,输入 FSL 顶部的数据现在可用 std_logic input
FSLn_S_Exists 指示标志,表明在输入 FSL 中存在数据 std_logic input
FSLFSL 接口接口
1. FSL 总线写操作 MicroBlaze 使用 put 或 putd 指令,执行写 FSL 的操作。写 FSL 操作将寄存器的内容传送到输出 FSL 总线上。当 FSL 的 FIFO 非满状态时,在阻塞传输模式下只需要一个时钟周期就能完成数据传输。如果 FSL 的 FIFO满时,处理器停下来等待,直到 FSL 的满标志变成低。非阻塞传输指令(前缀 n )在一个时钟周期下完成传输(即使 FSL 为满)。如果 FSL 为满时,写操作被禁止,且 MSR 的进位标志被置位。
FSLFSL 接口接口
2. FSL 总线读操作 MicroBlaze 使用 get 或 getd 指令,执行读 FSL 的操作。读 FSL 操作将输入 FSL 总线的内容传输到通用寄存器中。当 FSL 的 FIFO 非满状态时,在阻塞传输模式下只需要 2 个时钟周期就能完成数据读传输。如果 FSL 的FIFO满时,处理器停下来等待,直到 FSL 的满标志变成低。非阻塞传输指令(前缀 n )在 2 个时钟周期下完成传输(即使 FSL 为空)。如果 FSL 为空时,不产生读数据传输,且 MSR 的进位标志被置位。
FSLFSL 接口接口 3. 直接 FSL 连接 直接 FSL 连接用来去避免需要 FSL 总线。在没有缓冲的情况下,例如两个连接的 IP 核。 在直接 FSL 连接下不使用 FSL 的 FIFO 。无 FIFO 可以减少延迟和要求实现的资源。 MicroBlaze 处理器的每一个 FSL 接口能使用 FSL 直接连接或 FSL 总线。 MicroBlaze 的 DWFSL 接口是直接 FSL 连接的初始源,它只能连接到 DWFSL目标。 DWFSL 的初始源和目标有同样的信号名(与 MFSL 信号一样)。 MicroBlaze 使用 DWFSL 接口通过 put 或 putd命令写数据到目标。
FSLFSL 接口接口
MicroBlaze 的 DRFSL 接口是一个 FSL 连接的目标,它只能连接到 DRFSL 的初始源。 DRFSL 的初始源和目标有同样的信号名(与 SFSL 信号一样)。 MicroBlaze
使用 DRFSL 接口通过 get 或 getd命令从初始源读数据。 Xilinx 的 CacheLink ( XCL )接口就是使用直接 F
SL
连接实现的。
XCLXCL 接口接口--XCL--XCL 接口原理接口原理
对外部存储器的访问来说, XCL 接口是高性能的解
决方案。 XCL 通过使用集成的 FSL 缓冲区直接和存储器
控制器连接,例如 MPMC 。这种方法有最低的延迟和最小数目的例化。图 4.1 给出了使用集成 FSL 缓冲区的XCL 连接原理图。
XCLXCL 接口接口--XCL--XCL 接口原理接口原理
存储器控制器
FS
L
FSL
MicroBlaze
BEGIN microblaze ... BUS_INTERFACE IXCL = myIXCL ... ENDBEGIN mpmc ... BUS_INTERFACE XCL0 = myIXCL….END
图 4.1 使用集成 FSL 缓冲区的 XCL 连接原理
XCLXCL 接口接口--XCL--XCL 接口原理接口原理
当缓存使能时, XCL 接口可以使用。可以在指令侧或数据侧使用一个 XCL 缓存。 存储器位置的访问,由指令缓存参数C_ICACHE_ALWAYS_USED 和数据缓存参数C_DCACHE_ALWAYS_USED 来确定。如果值为 1 ,表示
缓存的存储器范围总是能通过 XCL 访问。如果值为 0 ,每
当缓存被软件禁止时,缓存的存储器范围只能通过 AXI4或 PLB 访问。
XCLXCL 接口接口--XCL--XCL 接口原理接口原理
在 XCL 可访问的范围以外存储器的位置可通过AXI , PLB 或者 LMB 访问。 XCL 缓存控制器处理 4-8 个缓存行。同时由于 XC
L
与 PLB 和 AXI4 分开,也减少了对非缓存存储器访问的冲突。表 4.8 给出了 XCL 的信号接口。
XCLXCL 接口接口--XCL--XCL 接口原理接口原理
信号 描述 VHDL 类型 方向ICACHE_FSL_IN_Clk 时钟输出到指令侧返回读数据的 FSL std_logic output
ICACHE_FSL_IN_Read 读信号输出到指令侧返回读数据的 FSL std_logic output
ICACHE_FSL_IN_Data 指令侧返回 FSL 读数据 std_logic_vector(0:31) input
ICACHE_FSL_IN_Control 指令侧返回 FSL 读数据的控制位,保留。 std_logic input
ICACHE_FSL_IN_Exists 更多的数据存在指令侧的返回 FSL std_logic input
ICACHE_FSL_OUT_Clk 时钟输出到指令侧的读访问 FSL std_logic output
ICACHE_FSL_OUT_Write 写新的缓存缺失访问请求到指令侧的读访问FSL
std_logic output
ICACHE_FSL_OUT_Data 缓存缺失访问到指令侧的读访问 FSL std_logic_vector(0:31) output
ICACHE_FSL_OUT_Control FSL 控制位到指令侧的读访问 FSL std_logic output
ICACHE_FSL_OUT_Full FSL 访问缓冲为指令侧的读访问满。 std_logic input
DCACHE_FSL_IN_CLK 时钟输出到数据侧返回读数据的 FSL std_logic output
DCACHE_FSL_IN_Read 读信号到数据侧返回读数据的 FSL std_logic output
DCACHE_FSL_IN_Data 读数据从数据侧返回读数据的 FSL std_logic_vector(0:31) input
DCACHE_FSL_IN_Control FSL 控制位从数据侧返回数据 FSL std_logic input
XCLXCL 接口接口--XCL--XCL 接口原理接口原理
DCACHE_FSL_IN_Exists 更多数据存在于数据侧的返回 FSL std_logic input
DCACHE_FSL_OUT_Clk 时钟输出到数据侧读访问 FSL std_logic output
DCACHE_FSL_OU_Write 写新的缓存缺失访问请求到数据侧的读访问 FSL
std_logic output
DCACHE_FSL_OUT_Data 缓存缺失访问(读地址 / 写地址 + 写数据 +字节写使能)到数据侧读访问 FSL
std_logic_vector(0:31)
output
DCACHE_FSL_OUT_Control FSL 控制比特到数据侧读访问 FSL 。使用地址比特 [30 : 31] 为读 / 写和字节使能编
码。
std_logic output
DCACHE_FSL_OUT_Full 用于数据侧读访问的 FSL 访问缓冲区为满 std_logic input
XCLXCL 接口接口--XCL--XCL 交易交易
所有单独的 CacheLink 访问遵循基于 FSL FIFO 的交易
协议,主要包含以下几点: (1) FSL 的数据和控制信号上的访问信息被编码(例如 : DCACHE_FSL_OUT_Data , DCACHE_FSL_OUT_Control , ICACHE_FSL_IN_Data 和 ICACHE_FSL_IN _Control )。 (2) 通过拉高写使能信号( DCACHE_FSL_OUT_Write ),信息
被发送(保存)。 (3) 如果来自接收方的满信号无效 ( DCACHE_FSL_OUT_FULL=0 ),则发送方只允许写。
指 令缓存控制器不使用满信号标志。
XCLXCL 接口接口--XCL--XCL 交易交易
(4) 使用 ICACHE_FSL_IN_Read 和 DCACHE_FSL_IN_Read
取决于所选择的接口协议:• 使用 IXCL 和 DXCL 协议,通过拉高读信号信息被接收(加载)。该信号为低,除非当发送者示意有新数据存在。
• 使用 IXCL2 和 DXCL2 协议,拉低读信号表示接收方不能接收新的数据。当读信号为高时,新数据是只读的,发送者示意有新数据存在。
(5) 只要发送方示意有新数据存在(例如 ICACHE_FSL_IN_Exists=1 ),接收方只允许读。
XCLXCL 接口接口--XCL--XCL 交易交易
Xilinx 的 CacheLink解决方案中,每个缓存控制器使用一个流入(从)和流出(主) FSL 。流出 FSL 用于发送访问请求,而流入 FSL 用于接收请求的缓存行。 FSL 的数据和控制信号上, XCL 也使用交易信息的特定编码。 在 XCL 协议中,用于读操作的缓存行为 4/8 个字长。取决于所选择的接口协议,使用第一个关键字( Critical word first )或者线性顺序 (in linear order) ,取出每个缓存行。
XCLXCL 接口接口--XCL--XCL 交易交易
(1) IXCL 和 DXCL 协议使用第一个关键字协议( C_ICACHE_INTERFACE=0 或者 C_DCACHE_INTERFACE=0 )。每个缓存行希望由第一个关键字开始(即,如果访问地址 0x348缺失 4 个字的缓存行,则返回的缓存行应该是下面的地址序列: 0x348,0x34c,0x340,0x344 )。 缓存控制器发送第一个字到执行单元,同时把它存在缓存存储器中。这样使得只要第一个字返回,就可以继续执行。只要接收到这些字,缓存控制器使用剩余的 3 或 7 个字填充缓存行。
XCLXCL 接口接口--XCL--XCL 交易交易
(2) 线性取使用 IXCL2 和 DXCL2 协议,( C_ICACHE_INTERFACE=1 或者 C_ DCACHE_INTERFACE =1 )。CacheLink 的地址输出对齐缓存行大小(即,如果访问地址 0x348缺失 4 个字的缓存行,择 CacheLink 的地址输出是 0x340 )。缓存控制器将数据保存在缓存控制器中,当可用时,将请求字提交给执行单元。
XCLXCL 接口接口--XCL--XCL 交易交易
当 C_DACHE_USE_WRITEBACK 设置为 1 时,使用猝
发写能保存整个缓存行和一个单字。每个缓存行总是以线性顺序保存, CacheLink 的地址输出对齐缓存行大小。当C_DACHE_USE_WRITEBACK清零时,在 Cache 上的所
有写操作是单字操作。当使用写回时C_DACHE_INTERFACE必须设置为 1 (因为猝发写只能
用DXCL2 协议)。
XCLXCL 交易交易---- 指令缓存读缺失指令缓存读缺失
当读缺失时,缓存控制器执行下面的操作: ( 1 )写字对齐的或者缓存行对齐的缺失地址到 ICACHE_FSL_OUT_Data ,控制位设置低, ( ICACHE_FSL_OUT_Control=0 )表示读访问; ( 2 )等到 ICACHE_FSL_IN_Exists 为高,表示数据可用(等待 至少一个时钟)。 使用 IXCL 协议(第一个关键字) ( 3 )将 ICACHE_FSL_IN_Data 的内容保存到缓存中; ( 4 )将关键字提交到执行单元,以便继续执行; ( 5 )重复步骤 3 和 4 ,处理在缓存行中剩余的 3 或 7 个字;使
用 IXCL2 协议(线性取) ( 3 )将 ICACHE_FSL_IN_Data 的内容保存到缓存中; ( 4 )将相关的字提交到执行单元,以便继续执行; ( 5 )将剩余的字从 ICACHE_FSL_IN_Data保存到缓存中;
XCLXCL 交易交易---- 数据缓存读缺失数据缓存读缺失
当读缺失时,缓存控制器执行下面的操作: ( 1 )如果 DCACHE_FSL_OUT_Full=1则停止,直到变低; ( 2 )写字对齐的或者缓存行对齐的缺失地址到 DCACHE_FSL_OUT_Data ,控制位置低, ( DCACHE_FSL_OUT_Control=0 )表示读访问; ( 3 )等到 DCACHE_FSL_IN_Exists 为高,表示数据可用(等待
至少一个时钟)。 使用 DXCL 协议(第一个关键字) ( 4 )将 DCACHE_FSL_IN_Data 的内容保存到缓存中; ( 5 )将关键字提交到执行单元,以便继续执行; ( 6 )重复步骤 4 和 5 ,处理在缓存行中剩余的 3 或 7 个字; 使用 DXCL2 协议(线性取) ( 4 )将 DCACHE_FSL_IN_Data 的内容保存到缓存中; ( 5 )将请求字提交到执行单元,以便继续执行; ( 6 )将剩余的字从 DCACHE_FSL_IN_Data保存到缓存中;
XCLXCL 交易交易---- 数据缓存写数据缓存写
当 C_DCACHE_INTERFACE 设置为 1 时,CacheLink 能执行猝发写或者单字写。当设置C_DCACHE_USE_WRITEBACK=1 时,使用猝发写,整个缓存行有效。 当 C_DCACHE_USE_WRITEBACK=0 时,写数据到数据缓存总是完全写入。因此,不管在缓存中命中还是缺失,在 CacheLink中都有一个写操作。
XCLXCL 交易交易---- 数据缓存写数据缓存写
使用 DXCL2 协议,在一个猝发缓存行写,缓存控制器执行下面的序列: ( 1 )如果 DCACHE_FSL_OUT_Full=1则停止,直到变低; ( 2 )写缓存对齐的地址到 DCACHE_FSL_OUT_Data ,控制位 为高( DCACHE_FSL_OUT_ Control=1 )表示写访问。地 址总线的最高两位 (30:31) 用来编码猝发访问: 0b10= 猝 发。从一个单字写中分出一个猝发访问时,在步骤 4中, 对于第一个数据字的控制位为低,用于猝发访问 ( DCACHE_FSL_OUT_Control=1 )。 ( 3 )如果 DCACHE_FSL_OUT_Full=1则停止,直到变低; ( 4 )写数据被保存在 DCACHE_FSL_OUT_Data中。控制位位 低( DCACHE_FSL_OUT_ Control=0 ),表示猝发访问。 ( 5 )重复步骤 3 和 4 用于缓存行中随后的字。
XCLXCL 交易交易---- 数据缓存写数据缓存写
使用 DXCL 或者 DXCL2 协议,在一个单字写时,缓存控制器执行下面的序列: ( 1 )如果 DCACHE_FSL_OUT_Full=1则停止,直到变低; ( 2 )写缺失的地址到 DCACHE_FSL_OUT_Data ,控制位为高 ( DCACHE_FSL_OUT_ Control=1 )表示写访问。地址总线 的最高两位 (30:31) 用来编码字节或半字使能: 0b00= 字节 0b01= 字节 1 或者半字 0 , 0x10= 字节 2 和 0x11= 字节 3 或者半 字 1 。选择半字或者字节访问基于步骤 4中用于数据字的控 制位。 ( 3 )如果 DCACHE_FSL_OUT_Full=1则停止,直到变低;
XCLXCL 交易交易---- 数据缓存写数据缓存写
4 .写数据被保存在 DCACHE_FSL_OUT_Data中。对于字节和
半字访问,数据镜像到字节通道。镜像输出的字节或者半字各自写到所有的四个字节通道或者半字通道。控制位应该为低( DCACHE_FSL_OUT_Control=0 )用于字或者半字访问,为高
将字节访问和猝发访问分开。字和字节访问由地址的 LSB 进行区分( 0= 字, 1= 半字)。
调试接口调试接口
MicroBlaze 的调试接口用来和 Xilinx微处理调试 ( Xilinx Microprocessor Debug, MDM) 的 IP 核。 MDM由
Xilinx 处理器调试器 (Xilinx Microprocessor Debuger ,XMD) 通过 FPGA 的 JTAG 端口控制。 MDM 能在同一
时间控制多个 MicroBlaze 处理器。调试信号在 DEBUG 总线上分组。表 4.9 给出了 MicroBlaze 的调试信号。
调试接口调试接口
信号名称 描述 VHDL 类型 方向
Dbg_Clk 来自 MDM 的 JTAG 时钟 std_logic input
Dbg_TDI 来自 MDM 的 JTAG TDI 信号 std_logic input
Dbg_TDO 到 MDM 的 JTAG TDO 信号 std_logic output
Dbg_Reg_En 来自 MDM 的调试寄存器使能信号 std_logic input
Dbg_Shift 来自 MDM 的 JTAG BSCAN 移位信号 std_logic input
Dbg_Capture 来自 MDM 的 JTAG BSCAN 捕获信号 std_logic input
Dbg_Update 来自 MDM 的 JTAG BSCAN 更新信号 std_logic input
Dbg_Rst 来自 MDM 的复位信号(高有效,至少维持一个时钟周期)
std_logic input
跟踪接口跟踪接口
MicroBlaze 核输出大量的内部信号用于跟踪。由于该接口非标准化,所以 Xilinx推荐对这些信号不要
使用定制逻辑,而是使用 Xilinx 提供的分析 IP 。跟踪信
号在 TRACE 总线上被分组。表 4.10 给出了 MicroBlaze
的跟踪信号。
跟踪接口跟踪接口---- 跟踪信号跟踪信号
信号名称 描述 VHDL 类型 方向Trace_Valid_Instr 跟踪端口的有效指令 std_logic output
Trace_Instruction 指令码 std_logic_vector(0 to 31) output
Trace_PC 程序计数器 std_logic_vector(0 to 31) output
Trace_Reg_Write 写寄存器文件指令 std_logic output
Trace_Reg_Addr 目标寄存器地址 std_logic_vector(0 to 4) output
Trace_MSR_Reg 机器状态寄存器 std_logic_vector(0 to 4) output
Trace_PID_Reg 进程标示寄存器 std_logic output
Trace_New_Reg_Value 目标寄存器更新值 std_logic output
Trace_Exception_Taken 指令引起采纳异常 std_logic output
Trace_Exception_Kind 异常类型 std_logic_vector(0 to 31) output
Trace_Jump_Taken 分支指令评估为真,例如:采纳 std_logic_vector(0 to 31) output
Trace_Delay_Slot 指令时延迟隙的采纳分支 std_logic_vector(0 to 31) output
Trace_Data_Access 数据侧存储器访问有效 std_logic output
跟踪接口跟踪接口---- 跟踪信号跟踪信号
Trace_Data_Address 数据侧存储器访问地址 std_logic_vector(0 to 31)
output
Trace_Data_Write_Value 数据侧的写访问值 std_logic_vector(0 to 31)
output
Trace_Data_Byte_Enable 数据侧存储器访问字节使能 std_logic output
Trace_Data_Read 数据侧的存储器访问为读操作 std_logic output
Trace_Data_Write 数据侧的存储器访问为写操作 std_logic output
Trace_DCache_Req 数据存储器地址在数据缓存范围内 std_logic output
Trace_DCache_Hit 数据存储器地址在数据缓存中 std_logic output
Trace_ICache_Req 指令存储器地址在指令缓存范围内 std_logic output
Trace_ICache_Hit 指令存储器地址在指令缓存中 std_logic output
Trace_OF_PipeRun 流水超前为译码阶段 std_logic output
Trace_EX_pipeRun 流水超前为执行阶段 std_logic output
Trace_MEM_pipeRun 流水超前为存储器阶段 std_logic output
Trace_MB_Halted 调试导致流水线停止 std_logic output
跟踪接口跟踪接口---- 跟踪异常类型跟踪异常类型
Trace_Exception_Kind[0:4] 描述00000 FSL 异常00001 非对齐异常00010 非法操作符异常00011 指令总线异常00100 数据总线异常00101 除数为 0 异常00110 FPU 异常00111 特权指令异常01010 中断01011 外部非屏蔽断点01100 外部可屏蔽断点10000 数据存储异常10001 指令存储异常10010 数据 TLB 缺失异常10011 指令 TLB 缺失异常
编程接口编程接口
MicroBlaze 应用二进制接口( Application Binary
Interface, ABI )对于在汇编语言级开发软件是非常重要
的。 MicroBlaze GNU编译器允许下面所介绍的规约。由汇编语言程序员所编写的代码也遵循同样的规约,该规约与编译器产生的代码兼容。
编程接口编程接口---- 堆栈规则堆栈规则
表 4.12 给出了 MicroBlaze 的堆栈规则。堆栈帧的ABI规则定义了协议,该协议用来传递参数,保存非易失性存储器的值和为函数内的本地变量分配空间。
编程接口编程接口---- 堆栈规则堆栈规则
高地址为调用子例程的功能参数( Arg n…Arg1 )
(可选的:对于任何一个由当前程序所调用程序的最多数目的参数要求 )
先前的堆栈指针 链接寄存器( R15 )被调者保存寄存器( R31..R19 )
(可选的:只有那些当前程序所使用的寄存器被保存 )
当前程序的本地变量(可选的:如果在程序中定义才出现 )
功能参数( Argn…Arg1 )(可选的:对于任何一个由当前程序所调用程序的最多数量的参数要求 )
新堆栈指针 链接寄存器低地址
编程接口编程接口---- 堆栈规则堆栈规则
那些包含调用其它子例程的函数也称为非叶结点函数。这些非叶结点函数为自己创建新的堆栈帧。当程序开始执行时,堆栈指针有最大值。当函数被调用,堆栈指针被减小。调用函数的堆栈指针的值比被调函数的堆栈指针的值要高。 图 4.2 给出一个调用的例子。该例子 Fun1 调用Fun2 , Fun2 调用 Fun3 。当 Fun1 调用 Fun2 时, SP
的值减小。 SP继续减少用来为 Fun3 提供堆栈帧。在返回时,SP 的值增加。
编程接口编程接口---- 堆栈规则堆栈规则
调用函数通过寄存器 R5-R10 或堆栈帧传递参数到被调用函数。被调者使用调用者的堆栈区域来保存传递到被调者的参数。例如, Fun2 的参数保存在 R5-R10
或者分配给 Fun1 的堆栈帧。
图 4.2 函数调用过程
存储器模型存储器模型
MicroBlaze 所定义的存储器模型有四个不同的部分: ( 1 )小数据区; ( 2 )数据区; ( 3 )普通非初始化区; ( 4 )文字或常数;
存储器模型存储器模型---- 小数据区小数据区
小尺寸的全局初始化变量保存在这个区域。保存变量的尺寸门槛为 8 个字节(在 MicroBlaze C 编译器mb-gcc ),但是能通过给编译器命令行改变值。 64KB
的存储器分配给小数据区。通过使用读写小数据区指针寄存器 (R13) 和 16 位偏移量来访问这个区域。分配小尺寸的变量到这个区域减少要求使用 IMM 指令访问全局变量。在该区域的变量可以使用绝对地址访问。
存储器模型存储器模型---- 数据区数据区
相对而言,大尺寸的初始化的变量被保存到数据区内,使用读写小数据区指针寄存器( R13 )或绝对地址访问(取决于编译器的命令行选项)。
存储器模型存储器模型---- 普通的非初始区普通的非初始区
非初始化的全局变量保存在这个区域,使用读写小数据区的指针寄存器 R13 或绝对地址访问(取决于编译器的设置)。
存储器模型存储器模型---- 文字或常数文字或常数
常数存放在只读小数据区。使用只读小数据区指针寄存器( R2 )访问。
中断和异常句柄中断和异常句柄 MicroBlaze保留一些地址空间用来处理中断和异常。表 4.13 给出了中断和异常处理句柄。
有效 硬件跳转到 软件标号
Start/Reset 0x0 _start
User expection 0x8 _exception_handler
Interrupt 0x10 _interrupt_handler
Break(HW/SW) 0x18 -
Hardware exception 0x20 _hw_exception_handler
Reserved for future use 0x28-0x4F -
中断和异常句柄中断和异常句柄
下面给出了在这些位置所期望的代码。对于没有使用 -xl-mode-xmdstub编译器选项的程序, crt0.o初始化文件由mb-gcc编译器传递到 mb-ld 连接器。这个文件设置合适的地址用于异常句柄。 对于使用 -xl-mode-xmdstub编译器选项的程序,crt1.o初始化文件被链接到输出程序。通过使用已经加载到 0x0 地址的 xmdstub运行程序。因此在运行时,crt1.o 的初始化代码向 0x8 到 0x14 地址(取决中断还是异常)写合适的指令。
中断和异常句柄中断和异常句柄
• 下面给出了用于处理中断和异常的句柄代码。• 0x00: bri _start1• 0x04: nop • 0x08: imm high bits of address (user exception handler)• 0x0c: bri _exception_handler • 0x10: imm high bits of address (interrupt handler)• 0x14: bri _interrupt_handler • 0x20: imm high bits of address (HW exception handler)• 0x24: bri _hw_exception_handler
中断和异常句柄中断和异常句柄
MicroBlaze允许异常和中断例程放在任何一个 32位地址。用户异常句柄代码由 _exception_handler开始,硬件异常句柄由 _hw_exception_handler 。而中断句柄由_interrupt_handler开始。 在当前的 MicroBlaze系统中,有一些用于中断和异常处理的空程序,用户可以修改这些空程序。为了重载这些程序,并链接用户自己的中断和异常句柄,必须使用 interrupt_handler属性来定义中断句柄代码。 当 XMD工具使用软件断点时,断点( HW/SW )
地址位置被保留用来处理软件断点。