Presentation is loading. Please wait.

Presentation is loading. Please wait.

MicroBlaze软核处理器接口 何宾 2012.02.

Similar presentations


Presentation on theme: "MicroBlaze软核处理器接口 何宾 2012.02."— Presentation transcript:

1 MicroBlaze软核处理器接口 何宾

2 MicroBlaze软核处理器接口 本章详细介绍了MicroBlaze软核处理的接口,这些接 口包括:
(1) AXI4接口; (2) PLB接口; (3) LMB接口; (4) FSL接口; (5) XCL接口; (6) 调试接口和跟踪接口。 这些接口提供了软核处理器与片上、片外外设和存储 器的灵活接口。此外,接口也提供了点对点的或者共享 总线的数据传输方式。

3 MicroBlaze接口概述 MicroBlaze处理器结构采用哈弗结构,即为数据和
器支持下面四种存储器接口: 本地存储器总线(LMB); AMBA AXI4接口(AXI4); IBM处理器本地总线(PLB); Xilinx的CacheLink(XCL)接口;

4 MicroBlaze软核处理器接口 LMB提供了以单时钟周期访问双端口存储器的能 力。 AXI4和PLB提供了片上和片外外设和存储器的接
口。CacheLink接口和外部存储器控制一起用作专门用 途。MicroBlaze处理器支持最多16个简单快速链接FSL 或者AXI4-Stream接口端口,每一个端口有主和从接口。

5 MicroBlaze软核处理器接口 MicroBlaze处理器能配置成下面的总线接口: ARMA AXI4接口;
32位版本的PLBV4.6接口; LMB提供简单同步协议用于高效的BRAM传输; FSL或AXI4-Stream提供快速无需仲裁的流通信机制; XCL提供在缓存和外部存储器控制器之间的快速从设备仲裁的流接口; 调试接口和处理器调试模块(MDM)一起使用; 跟踪接口用于性能分析;

6 AXI4接口 --存储器映射接口 MicroBlaze AXI4存储器映射的外设接口
(M_AXI_DP,M_AXI_IP)实现32位的主接口。这些 接口只发出单个地址,所有的交易按顺序完成。 (1) 指令外设接口只执行单字读访问,总是设置使用AXI4-Lite子 集; (2) 数据外设接口执行单字访问,默认设置使用AXI4-Lite子集, 当使能用于LWX和SWX的互斥访问时,使用AXI4。通过设 置合适的字节选通,可以执行半字和字节写操作;

7 AXI4接口 --存储器映射接口 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 指令。

8 AXI4接口 --存储器映射接口 M_AXI_DP、M_AXI_IP、M_AXI_DC和
M_AXI_IC接口信号功能一样,表4.1给出了M_AXI_DP 端口的信号及功能。更具体的功能可以参看第二章的 内容。

9 AXI4接口 --存储器映射接口 信号 接口 I/O 描述 M_AXI_DP_AWID M_AXI_DP O 主设备写地址ID
M_AXI_DP_AWADDR 主设备写地址 M_AXI_DP_AWLEN 主设备猝发长度 M_AXI_DP_AWSIZE 主设备猝发大小 M_AXI_DP_AWBURST 主设备猝发类型 M_AXI_DP_AWLOCK 主设备锁类型 M_AXI_DP_AWCACHE 主设备缓存类型 M_AXI_DP_AWPROT 主设备保护类型 M_AXI_DP_AWQOS 主设备服务质量 M_AXI_DP_AWVAILD 主设备写地址有效 M_AXI_DP_AWREADY I 从设备写地址准备 M_AXI_DP_WDATA 主设备写数据 M_AXI_DP_WSTRB 主设备写选通 M_AXI_DP_WLAST 主设备写最后 M_AXI_DP_WVALID 主设备写有效

10 AXI4接口 --存储器映射接口 M_AXI_DP_WREADY M_AXI_DP I 从设备写准备 M_AXI_DP_BID
M_AXI_DP_BRESP 从设备写响应 M_AXI_DP_BVALID 从设备写响应有效 M_AXI_DP_BREADY O 主设备响应准备 M_AXI_DP_ARID 主设备读地址ID M_AXI_DP_ARADDR 主设备读地址 M_AXI_DP_ARLEN 主设备猝发长度 M_AXI_DP_ARSIZE 主设备猝发大小 M_AXI_DP_ARBURST 主设备猝发类型 M_AXI_DP_ARLOCK 主设备锁类型 M_AXI_DP_ARCACHE 主设备缓存类型 M_AXI_DP_ARPORT 主设备保护类型 M_AXI_DP_ARQOS 主设备服务质量 M_AXI_DP_ARVAILD 主设备读地址有效

11 AXI4接口 --存储器映射接口 M_AXI_DP_ARREADY M_AXI_DP I 从设备读地址准备 M_AXI_DP_RID
M_AXI_DP_RDATA 从设备读数据 M_AXI_DP_RRESP 从设备读响应 M_AXI_DP_RLAST 从设备读最后 M_AXI_DP_RVALID 从设备读有效 M_AXI_DP_RREADY O 主设备读准备

12 AXI4接口 --流接口 MicroBlaze AXI4-Stream接口 (M0_AXIS..M15_AXIS,
S0_AXIS..S15_AXIS) 实现32位主设备或从设备。 Mn_AXIS_TLAST,Sn_AXIS_TLAST信号直接对 应于同等的FSLn_M_Control和FSLn_S_Control信号。

13 AXI4接口 --流接口 1.写操作 MicroBlaze通过使用put或putd指令执行写流接口操
阻塞模式写(put或cput指令)在单个时钟周期内完成 传输,且接口不忙。如果接口忙,处理器停止,一直 到其可用为止。非阻塞指令(前缀n),即使在忙时, 也总是在单周期内完成传输。如果接口忙,禁止写并 且设置MSR内的进位位。

14 AXI4接口 --流接口 2.读操作 MicroBlaze通过使用get或getd指令执行读流接口操
阻塞模式读在两个时钟周期内完成传输,且数据可 用。如果数据不可用时,处理器在这条指令上停下 来,一直到其可用为止。在非阻塞模式下(前缀n), 不管数据是否可用,也总是在一个或者两个时钟周期 内完成传输。如果数据不可用,不发生数据传输,并 且设置MSR内的进位位。 表4.2给出了M_AXI_Stream端口的信号及功能。更 具体的功能可以参看第二章的内容

15 AXI4接口 --流接口 信号 接口 I/O 描述 Mn_AXIS_TLAST M0_AXIS..M15_AXIS O
Mn_AXIS_TDATA 主设备接口输出AXI4通道写数据 Mn_AXIS_TVALID 主设备接口输出AXI4通道写有效 Mn_AXIS_TREADY I 主设备接口输入AXI4通道写准备 Sn_AXIS_TLAST 从设备接口输入AXI4通道写最后 Sn_AXIS_TDATA 从设备接口输入AXI4通道写数据 Sn_AXIS_TVALID 从设备接口输入AXI4通道写有效 Sn_AXIS_TREADY 从设备接口输出AXI4通道写准备

16 PLB接口 MicroBlaze处理的PLB接口用于字节使能的32位主 设备。表4.3给出了IPLB总线接口信号定义。表4.4给出
了DPLB总线接口定义。更详细的可以参考PLBV46互 连和接口资料。

17 PLB接口(IPLB) 信号 接口 I/O 功能(指令侧PLB接口简称IPLB) IPLB_M_ABORT IPLB O
IPLB_M_ABUS IPLB地址总线 IPLB_M_UABUS IPLB高部分地址总线 IPLB_M_BE IPLB字节使能 IPLB_M_busLock IPLB总线锁定 IPLB_M_lockErr IPLB总线锁定错误指示 IPLB_M_Msize IPLB主设备数据总线大小 IPLB_M_priority IPLB请求优先级 IPLB_M_rdBurst IPLB猝发式读传输指示 IPLB_M_request IPLB总线请求 IPLB_M_RNW IPLB读/非写 IPLB_M_size IPLB传输大小 IPLB_M_TAttribute IPLB传输属性总线 IPLB_M_type IPLB传输类型 IPLB_M_wrBurst IPLB猝发式写传输指示 IPLB_M_wrDBus IPLB写数据总线

18 PLB接口(IPLB) IPLB_Mbusy IPLB I IPLB从设备忙指示 IPLB_MRdErr IPLB从设备读错误指示
IPLB_MWrErr IPLB从设备写错误指示 IPLB_MIRQ IPLB从设备中断指示 IPLB_MWRBTerm IPLB终止写猝发指示 IPLB_MWrDAck IPLB写数据应答 IPLB_MAddrAck IPLB地址应答 IPLB_MRdBTerm IPLB终止读猝发指示 IPLB_MRdDAck IPLB读数据应答 IPLB_MRdDBus IPLB读数据总线 IPLB_MRdEdAddr IPLB读字总线 IPLB_MRearbitrate IPLB再总裁指示 IPLB_MSSize IPLB从设备数据总线大小 IPLB_MTimeout IPLB总线超时

19 PLB接口(DPLB) 信号 接口 I/O 功能(数据侧PLB接口简称DPLB) DPLB_M_ABORT DPLB O
DPLB_M_ABUS DPLB地址总线 DPLB_M_UABUS DPLB高部分地址总线 DPLB_M_BE DPLB字节使能 DPLB_M_busLock DPLB总线锁定 DPLB_M_lockErr DPLB总线锁定错误指示 DPLB_M_Msize DPLB主设备数据总线大小 DPLB_M_priority DPLB请求优先级 DPLB_M_rdBurst DPLB猝发式读传输指示 DPLB_M_request DPLB总线请求 DPLB_M_RNW DPLB读/非写 DPLB_M_size DPLB传输大小 DPLB_M_TAttribute DPLB传输属性总线 DPLB_M_type DPLB传输类型

20 PLB接口(DPLB) DPLB_M_wrBurst DPLB O DPLB猝发式写传输指示 DPLB_M_wrDBus IPLB
DPLB_Mbusy I DPLB从设备忙指示 DPLB_MRdErr DPLB从设备读错误指示 DPLB_MWrErr DPLB从设备写错误指示 DPLB_MIRQ DPLB从设备中断指示 DPLB_MWRBTerm DPLB终止写猝发指示 DPLB_MWrDAck DPLB写数据应答 DPLB_MAddrAck DPLB地址应答 DPLB_MRdBTerm DPLB终止读猝发指示 DPLB_MRdDAck DPLB读数据应答 DPLB_MRdDBus DPLB读数据总线 DPLB_MRdEdAddr DPLB读字总线 DPLB_MRearbitrate DPLB再总裁指示 DPLB_MSSize DPLB从设备数据总线大小 DPLB_MTimeout DPLB总线超时

21 LMB接口 LMB是同步总线,主要用于访问片上块RAM资 源。LMB有最少的控制总线数目,使用简单协议保证
信号及定义。所有信号都是高有效。

22 LMB接口 信号 数据接口 指令接口 类型 功能 Addr[0:31] Data_Addr[0:31] Insr_Addr[0:31] O
地址总线 Byte_Enable[0:31] Byte_Enable[0:3] not used 字节使能 Data_Write[0:31] 写数据总线 AS D_AS I_AS 地址选通 Read_Strobe IFetch 读进行 Write_Strobe 写进行 Data_Read[0:31] Insr[0:31] I 读数据总线 Ready DReady IReady 下次传输准备 Wait DWait IWait 等待,直到准备被接受的传输 CE DCE ICE 可更正的错误 UE 不可更正的错误 Clk 总线时钟

23 FSL接口 FSL总线在输出FIFO和输入FIFO之间提供点对点的 通信通道,更详细的信息参考IP核参考资料。表4.6给

24 FSL接口(MFSL) 信号 功能 VHDL类型 方向 FSLn_M_Clk 时钟 std_logic input FSLn_M_Write
写使能信号,表示数据正被写到输出 FSL output FSLn_M_Data 数据写到输出FSL std_logic_vector FSLn_M_Control 控制位写到输出FSL FSLn_M_Full 当设置时,表示输出FSL 的FIFO满

25 FSL接口(SFSL) 信号 功能 VHDL类型 方向 FSLn_S_Clk 时钟 std_logic input FSLn_S_Read
output FSLn_S_Data 在输入FSL的顶部的现在可用的数据 std_logic_vector FSLn_S_Control 控制比特,输入FSL顶部的数据现在可用 FSLn_S_Exists 指示标志,表明在输入FSL中存在数据

26 FSL接口 1. FSL总线写操作 MicroBlaze使用put或putd指令,执行写FSL的操
上。当FSL的FIFO非满状态时,在阻塞传输模式下只需 要一个时钟周期就能完成数据传输。如果FSL的FIFO满 时,处理器停下来等待,直到FSL的满标志变成低。非 阻塞传输指令(前缀n)在一个时钟周期下完成传输 (即使FSL为满)。如果FSL为满时,写操作被禁止, 且MSR的进位标志被置位。

27 FSL接口 2. FSL总线读操作 MicroBlaze使用get或getd指令,执行读FSL的操
器中。当FSL的FIFO非满状态时,在阻塞传输模式下 只需要2个时钟周期就能完成数据读传输。如果FSL的 FIFO满时,处理器停下来等待,直到FSL的满标志变 成低。非阻塞传输指令(前缀n)在2个时钟周期下完 成传输(即使FSL为空)。如果FSL为空时,不产生读 数据传输,且MSR的进位标志被置位。

28 FSL接口 3. 直接FSL连接 直接FSL连接用来去避免需要FSL总线。在没有缓冲 的情况下,例如两个连接的IP核。
在直接FSL连接下不使用FSL的FIFO。无FIFO可以减 少延迟和要求实现的资源。 MicroBlaze处理器的每一个FSL接口能使用FSL直接 连接或FSL总线。 MicroBlaze的DWFSL接口是直接FSL连接的初始 源,它只能连接到DWFSL目标。DWFSL的初始源和目 标有同样的信号名(与MFSL信号一样)。MicroBlaze使 用DWFSL接口通过put或putd命令写数据到目标。

29 FSL接口 MicroBlaze的DRFSL接口是一个FSL连接的目标, 它只能连接到DRFSL的初始源。DRFSL的初始源和目
标有同样的信号名(与SFSL信号一样)。MicroBlaze 使用DRFSL接口通过get或getd命令从初始源读数据。 Xilinx的CacheLink(XCL)接口就是使用直接FSL 连接实现的。

30 XCL接口 --XCL接口原理 对外部存储器的访问来说,XCL接口是高性能的解 决方案。XCL通过使用集成的FSL缓冲区直接和存储器
控制器连接,例如MPMC。这种方法有最低的延迟和 最小数目的例化。图4.1给出了使用集成FSL缓冲区的 XCL连接原理图。

31 XCL接口 --XCL接口原理 图4.1使用集成FSL缓冲区的XCL连接原理 BEGIN microblaze ...
BUS_INTERFACE IXCL = myIXCL END BEGIN mpmc BUS_INTERFACE XCL0 = myIXCL …. 存储器控制器 FSL MicroBlaze 图4.1使用集成FSL缓冲区的XCL连接原理

32 XCL接口 --XCL接口原理 当缓存使能时,XCL接口可以使用。可以在指令侧 或数据侧使用一个XCL缓存。
存储器位置的访问,由指令缓存参数 C_ICACHE_ALWAYS_USED和数据缓存参数 C_DCACHE_ALWAYS_USED来确定。如果值为1,表示 缓存的存储器范围总是能通过XCL访问。如果值为0,每 当缓存被软件禁止时,缓存的存储器范围只能通过AXI4 或PLB访问。

33 XCL接口 --XCL接口原理 在XCL可访问的范围以外存储器的位置可通过 AXI,PLB或者LMB访问。
与PLB和AXI4分开,也减少了对非缓存存储器访问的 冲突。表4.8给出了XCL的信号接口。

34 写新的缓存缺失访问请求到指令侧的读访问FSL
XCL接口 --XCL接口原理 信号 描述 VHDL类型 方向 ICACHE_FSL_IN_Clk 时钟输出到指令侧返回读数据的FSL std_logic output ICACHE_FSL_IN_Read 读信号输出到指令侧返回读数据的FSL ICACHE_FSL_IN_Data 指令侧返回FSL读数据 std_logic_vector(0:31) input ICACHE_FSL_IN_Control 指令侧返回FSL读数据的控制位,保留。 ICACHE_FSL_IN_Exists 更多的数据存在指令侧的返回FSL ICACHE_FSL_OUT_Clk 时钟输出到指令侧的读访问FSL ICACHE_FSL_OUT_Write 写新的缓存缺失访问请求到指令侧的读访问FSL ICACHE_FSL_OUT_Data 缓存缺失访问到指令侧的读访问FSL ICACHE_FSL_OUT_Control FSL控制位到指令侧的读访问FSL ICACHE_FSL_OUT_Full FSL访问缓冲为指令侧的读访问满。 DCACHE_FSL_IN_CLK 时钟输出到数据侧返回读数据的FSL DCACHE_FSL_IN_Read 读信号到数据侧返回读数据的FSL DCACHE_FSL_IN_Data 读数据从数据侧返回读数据的FSL DCACHE_FSL_IN_Control FSL控制位从数据侧返回数据FSL

35 XCL接口 --XCL接口原理 DCACHE_FSL_IN_Exists 更多数据存在于数据侧的返回FSL std_logic input
DCACHE_FSL_OUT_Clk 时钟输出到数据侧读访问FSL output DCACHE_FSL_OU_Write 写新的缓存缺失访问请求到数据侧的读访问FSL DCACHE_FSL_OUT_Data 缓存缺失访问(读地址/写地址+写数据+字节写使能)到数据侧读访问FSL std_logic_vector(0:31) DCACHE_FSL_OUT_Control FSL控制比特到数据侧读访问FSL。使用地址比特[30:31]为读/写和字节使能编码。 DCACHE_FSL_OUT_Full 用于数据侧读访问的FSL访问缓冲区为满

36 XCL接口 --XCL交易 所有单独的CacheLink访问遵循基于FSL FIFO的交易 协议,主要包含以下几点:
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),则发送方只允许写。指 令缓存控制器不使用满信号标志。

37 XCL接口 --XCL交易 (4) 使用ICACHE_FSL_IN_Read和DCACHE_FSL_IN_Read 取决于所选择的接口协议:
使用IXCL和DXCL协议,通过拉高读信号信息被接收(加载)。该信号为低,除非当发送者示意有新数据存在。 使用IXCL2和DXCL2协议,拉低读信号表示接收方不能接收新的数据。当读信号为高时,新数据是只读的,发送者示意有新数据存在。 (5) 只要发送方示意有新数据存在(例如 ICACHE_FSL_IN_Exists=1),接收方只允许读。

38 XCL接口 --XCL交易 Xilinx的CacheLink解决方案中,每个缓存控制器 使用一个流入(从)和流出(主)FSL。流出FSL用
行。FSL的数据和控制信号上,XCL也使用交易信 息的特定编码。 在XCL协议中,用于读操作的缓存行为4/8个字 长。取决于所选择的接口协议,使用第一个关键字 (Critical word first)或者线性顺序(in linear order), 取出每个缓存行。

39 (1) IXCL和DXCL协议使用第一个关键字协议
XCL接口 --XCL交易 (1) IXCL和DXCL协议使用第一个关键字协议 (C_ICACHE_INTERFACE=0或者C_DCACHE_INTERFACE=0)。 每个缓存行希望由第一个关键字开始(即,如果访问地址0x348缺 失4个字的缓存行,则返回的缓存行应该是下面的地址序列: 0x348,0x34c,0x340,0x344)。 缓存控制器发送第一个字到执行单元,同时把它存在缓存存储 器中。这样使得只要第一个字返回,就可以继续执行。只要接收到 这些字,缓存控制器使用剩余的3或7个字填充缓存行。

40 XCL接口 --XCL交易 (2) 线性取使用IXCL2和DXCL2协议,(C_ICACHE_INTERFACE=1或者C_ DCACHE_INTERFACE =1)。CacheLink的地址输出对齐缓存行大小(即,如果访问地址0x348缺失4个字的缓存行,择CacheLink的地址输出是0x340)。缓存控制器将数据保存在缓存控制器中,当可用时,将请求字提交给执行单元。

41 XCL接口 --XCL交易 当C_DACHE_USE_WRITEBACK设置为1时,使用猝
发写能保存整个缓存行和一个单字。每个缓存行总是以线 性顺序保存,CacheLink的地址输出对齐缓存行大小。当 C_DACHE_USE_WRITEBACK清零时,在Cache上的所有 写操作是单字操作。当使用写回时 C_DACHE_INTERFACE必须设置为1(因为猝发写只能用 DXCL2协议)。

42 XCL交易 --指令缓存读缺失 当读缺失时,缓存控制器执行下面的操作: (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协议(线性取) (4)将相关的字提交到执行单元,以便继续执行; (5)将剩余的字从ICACHE_FSL_IN_Data保存到缓存中;

43 XCL交易 --数据缓存读缺失 当读缺失时,缓存控制器执行下面的操作:
(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协议(线性取) (5)将请求字提交到执行单元,以便继续执行; (6)将剩余的字从DCACHE_FSL_IN_Data保存到缓存中;

44 XCL交易 --数据缓存写 当C_DCACHE_INTERFACE设置为1时, CacheLink能执行猝发写或者单字写。当设置
C_DCACHE_USE_WRITEBACK=1时,使用猝发写, 整个缓存行有效。 当C_DCACHE_USE_WRITEBACK=0时,写数据 到数据缓存总是完全写入。因此,不管在缓存中命中 还是缺失,在CacheLink中都有一个写操作。

45 XCL交易 --数据缓存写 使用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用于缓存行中随后的字。

46 XCL交易 --数据缓存写 使用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则停止,直到变低;

47 XCL交易 --数据缓存写 4.写数据被保存在DCACHE_FSL_OUT_Data中。对于字节和
半字访问,数据镜像到字节通道。镜像输出的字节或者半字各自 写到所有的四个字节通道或者半字通道。控制位应该为低 (DCACHE_FSL_OUT_Control=0)用于字或者半字访问,为高将 字节访问和猝发访问分开。字和字节访问由地址的LSB进行区分 (0=字,1=半字)。

48 调试接口 MicroBlaze的调试接口用来和Xilinx微处理调试
(Xilinx Microprocessor Debug, MDM)的IP核。MDM由 Xilinx处理器调试器(Xilinx Microprocessor Debuger, XMD) 通过FPGA的JTAG端口控制。MDM能在同一时 间控制多个MicroBlaze处理器。调试信号在DEBUG总 线上分组。表4.9给出了MicroBlaze的调试信号。

49 来自MDM的复位信号(高有效,至少维持一个时钟周期)
调试接口 信号名称 描述 VHDL类型 方向 Dbg_Clk 来自MDM的JTAG时钟 std_logic input Dbg_TDI 来自MDM的JTAG TDI信号 Dbg_TDO 到MDM的JTAG TDO信号 output Dbg_Reg_En 来自MDM的调试寄存器使能信号 Dbg_Shift 来自MDM的JTAG BSCAN 移位信号 Dbg_Capture 来自MDM的JTAG BSCAN捕获信号 Dbg_Update 来自MDM的JTAG BSCAN更新信号 Dbg_Rst 来自MDM的复位信号(高有效,至少维持一个时钟周期)

50 跟踪接口 MicroBlaze核输出大量的内部信号用于跟踪。由 于该接口非标准化,所以Xilinx推荐对这些信号不要使
用定制逻辑,而是使用Xilinx提供的分析IP。跟踪信号 在TRACE总线上被分组。表4.10给出了MicroBlaze的跟 踪信号。

51 跟踪接口 --跟踪信号 信号名称 描述 VHDL类型 方向 Trace_Valid_Instr 跟踪端口的有效指令 std_logic
output Trace_Instruction 指令码 std_logic_vector(0 to 31) Trace_PC 程序计数器 Trace_Reg_Write 写寄存器文件指令 Trace_Reg_Addr 目标寄存器地址 std_logic_vector(0 to 4) Trace_MSR_Reg 机器状态寄存器 Trace_PID_Reg 进程标示寄存器 Trace_New_Reg_Value 目标寄存器更新值 Trace_Exception_Taken 指令引起采纳异常 Trace_Exception_Kind 异常类型 Trace_Jump_Taken 分支指令评估为真,例如:采纳 Trace_Delay_Slot 指令时延迟隙的采纳分支 Trace_Data_Access 数据侧存储器访问有效

52 跟踪接口 --跟踪信号 Trace_Data_Address 数据侧存储器访问地址 std_logic_vector(0 to 31)
output Trace_Data_Write_Value 数据侧的写访问值 Trace_Data_Byte_Enable 数据侧存储器访问字节使能 std_logic Trace_Data_Read 数据侧的存储器访问为读操作 Trace_Data_Write 数据侧的存储器访问为写操作 Trace_DCache_Req 数据存储器地址在数据缓存范围内 Trace_DCache_Hit 数据存储器地址在数据缓存中 Trace_ICache_Req 指令存储器地址在指令缓存范围内 Trace_ICache_Hit 指令存储器地址在指令缓存中 Trace_OF_PipeRun 流水超前为译码阶段 Trace_EX_pipeRun 流水超前为执行阶段 Trace_MEM_pipeRun 流水超前为存储器阶段 Trace_MB_Halted 调试导致流水线停止

53 Trace_Exception_Kind[0:4]
跟踪接口 --跟踪异常类型 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缺失异常

54 编程接口 MicroBlaze应用二进制接口(Application Binary
Interface, ABI)对于在汇编语言级开发软件是非常重要 的。MicroBlaze GNU编译器允许下面所介绍的规约。 由汇编语言程序员所编写的代码也遵循同样的规约, 该规约与编译器产生的代码兼容。

55 编程接口 --堆栈规则 表4.12给出了MicroBlaze的堆栈规则。堆栈帧的 ABI规则定义了协议,该协议用来传递参数,保存非
易失性存储器的值和为函数内的本地变量分配空间。

56 编程接口 --堆栈规则 高地址 为调用子例程的功能参数(Arg n…Arg1)
(可选的:对于任何一个由当前程序所调用程序的最多数目的参数要求) 先前的堆栈指针 链接寄存器(R15) 被调者保存寄存器(R31..R19) (可选的:只有那些当前程序所使用的寄存器被保存) 当前程序的本地变量 (可选的:如果在程序中定义才出现) 功能参数(Argn…Arg1) (可选的:对于任何一个由当前程序所调用程序的最多数量的参数要求) 新堆栈指针 链接寄存器 低地址

57 编程接口 --堆栈规则 那些包含调用其它子例程的函数也称为非叶结点 函数。这些非叶结点函数为自己创建新的堆栈帧。当
程序开始执行时,堆栈指针有最大值。当函数被调 用,堆栈指针被减小。调用函数的堆栈指针的值比被 调函数的堆栈指针的值要高。 图4.2给出一个调用的例子。该例子Fun1调用 Fun2,Fun2调用Fun3。当Fun1调用Fun2时,SP的值减 小。SP继续减少用来为Fun3提供堆栈帧。在返回时, SP的值增加。

58 编程接口 --堆栈规则 调用函数通过寄存器R5-R10或堆栈帧传递参数到 被调用函数。被调者使用调用者的堆栈区域来保存传
递到被调者的参数。例如,Fun2的参数保存在R5-R10 或者分配给Fun1的堆栈帧。 图4.2 函数调用过程

59 存储器模型 MicroBlaze所定义的存储器模型有四个不同的 部分: (1)小数据区; (2)数据区; (3)普通非初始化区;
(4)文字或常数;

60 存储器模型 --小数据区 小尺寸的全局初始化变量保存在这个区域。保存 变量的尺寸门槛为8个字节(在MicroBlaze C 编译器
mb-gcc),但是能通过给编译器命令行改变值。64KB 的存储器分配给小数据区。通过使用读写小数据区指 针寄存器(R13)和16位偏移量来访问这个区域。分配小 尺寸的变量到这个区域减少要求使用IMM指令访问全 局变量。在该区域的变量可以使用绝对地址访问。

61 存储器模型 --数据区 相对而言,大尺寸的初始化的变量被保存到数 据区内,使用读写小数据区指针寄存器(R13)或
绝对地址访问(取决于编译器的命令行选项)。

62 非初始化的全局变量保存在这个区域,使用读
存储器模型 --普通的非初始区 非初始化的全局变量保存在这个区域,使用读 写小数据区的指针寄存器R13或绝对地址访问(取 决于编译器的设置)。

63 存储器模型 --文字或常数 常数存放在只读小数据区。使用只读小数据区 指针寄存器(R2)访问。

64 _hw_exception_handler Reserved for future use
中断和异常句柄 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

65 中断和异常句柄 下面给出了在这些位置所期望的代码。对于没有使 用-xl-mode-xmdstub编译器选项的程序,crt0.o初始化文
件由mb-gcc编译器传递到mb-ld连接器。这个文件设置 合适的地址用于异常句柄。 对于使用-xl-mode-xmdstub编译器选项的程序, crt1.o初始化文件被链接到输出程序。通过使用已经加 载到0x0地址的xmdstub运行程序。因此在运行时, crt1.o的初始化代码向0x8到0x14地址(取决中断还是异 常)写合适的指令。

66 中断和异常句柄 下面给出了用于处理中断和异常的句柄代码。 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

67 中断和异常句柄 MicroBlaze允许异常和中断例程放在任何一个32 位地址。用户异常句柄代码由_exception_handler开始,
硬件异常句柄由_hw_exception_handler。而中断句柄由 _interrupt_handler开始。 在当前的MicroBlaze系统中,有一些用于中断和异 常处理的空程序,用户可以修改这些空程序。为了重 载这些程序,并链接用户自己的中断和异常句柄,必 须使用interrupt_handler属性来定义中断句柄代码。 当XMD工具使用软件断点时,断点(HW/SW)地 址位置被保留用来处理软件断点。


Download ppt "MicroBlaze软核处理器接口 何宾 2012.02."

Similar presentations


Ads by Google