560 likes | 758 Views
ARM7TDMI 总线接口. ARM7TDMI 外部接口. 存储器接口 中断 调试接口 协处理器接口. ARM7TDMI 接口信号. A[31:0]. Data and Address. D[31:0]. BUSEN. ABE. DBE. TBE. Bus Control. APE, ALE. nENIN. ARM7TDMI. nENOUT. nMREQ, SEQ. Memory Interface. BIGEND. nRW. Memory Access Control. BL[3:0]. ECLK. MCLK.
E N D
ARM7TDMI 外部接口 • 存储器接口 • 中断 • 调试接口 • 协处理器接口
ARM7TDMI 接口信号 A[31:0] Data and Address D[31:0] BUSEN ABE DBE TBE Bus Control APE, ALE nENIN ARM7TDMI nENOUT nMREQ, SEQ Memory Interface BIGEND nRW Memory Access Control BL[3:0] ECLK MCLK MAS[1:0] Clocks and Clock Control LOCK nWAIT TBIT nTRANS Memory Management nM[4:0] ABORT
时钟与时钟控制 • MCLK –输入 • 处理器工作的时钟。 • 静态设计的ARM通过延长时钟周期来访问慢速的设备。 • nWAIT –输入 • 在ARM内部与MCLK相与。 • 必须在MCKL为低的相位阶段改变。 • 容许该信号从一个周期扩展到另一个周期,延长总线访问周期。 • ECLK –输出 • 核心逻辑的时钟的输出。 • 在正常和调试状态下反映内部时钟。 • ph1 & ph2 –内部信号 • 双相位非覆盖的内部时钟。 • 处理器内部工作周期。
时钟控制 - nWAIT 控制 Phase 1 Phase 2 Phase 1 Phase 2 MCLK nWAIT ph1 Internal Clock ph2 Internal Clock ECLK
时钟控制 – 扩展 MCLK Phase 1 Phase 2 Phase 1 Phase 2 MCLK nWAIT ph1 Internal Clock ph2 Internal Clock ECLK
数据总线 • 32 位双或单向数据总线 • BUSEN = 0 配置双向数据总线。 • BUSEN = 1 配置单向数据总线。 • 字节、半字及字访问. • 读取数据必须有效且稳定到相位2结束。 • 写入数据在相位1改变,保持稳定贯穿相位2。 • nENOUT – 输出 (和 nENIN –输入) : 数据总线控制 • 如果采用片外双向数据总线的话,可以用来控制数据总线的方向。
数据总线配置 (1) EmbeddedICE macrocell DIN[31:0] ARM7TDM Macrocell 32 32 D[31:0] bMDen DOUT[31:0] G DoutlatEn
数据总线配置 (2) MCLK DIN2 D[31:0] DIN1 DOUT DIN2 DIN1 DIN[31:0] DOUT DOUT[31:0] READ WRITE READ
地址总线 • 32 位 (4G字节) 寻址能力。 • 默认时序 • 在前一周期的相位2阶段变为有效,保持稳定贯穿当前周期的相位1阶段。 • 流水线地址。 • 地址时序可以通过APE(或ALE)移位。 • 为获得较好的系统性能,建议使用默认时序。地址可以锁存到存储器系统中。
地址总线控制 • APE 和 ALE – 输入 • ARM 建议两个信号都为高,以便有最长的时间进行地址译码。 • 任何一个信号都可以连接到在数据访问期间需要稳定地址的设备。 • APE: 地址流水线使能 • APE = 1 – 地址是流水线的 (在后续的相位2提供). • APE = 0 – 重新定时地址改变的时序,从MCLK的下降沿开始。 • 控制对A[31:0]的透明锁存。 • ALE : 地址锁存使能 • 控制对A[31:0]的透明锁存。 • 仅用于已有的系统设计,因为它比APE更复杂。
流水线地址时序(推荐设置) • ALE 和 APE 均为高 Phase 1 Phase 2 MCLK ALE APE A[31:0] Address D[31:0] Dx (in)
APE对地址时序的作用 Phase 1 Phase 2 MCLK ALE APE A[31:0] Address D[31:0] Dx (in)
总线三态控制 (1) • ABE – 输入 : 地址总线使能 • 当ABE 为低时,下面的信号处于高阻状态:A[31:0], nRW, LOCK, MAS[1:0], nOPC, and nTRANS • DBE – 输入 : 数据总线使能 • 当 DBE 为低时,D[31:0] 处于高阻状态。 • TBE – 输入 : 测试总线使能 • 当 TBE 为低时,下面的信号处于高阻状态: D[31:0], A[31:0], nRW, LOCK, MAS[1:0], nOPC, and nTRANS • 在ABE和DBE都为低时,情况一样。
总线三态控制 (2) ABE DBE TBE A[31:0] D[31:0] (out)
存储器访问控制 • nMREQ – 输出 : 存储器请求. • 低有效,指示在接下来的周期中进行存储器访问。 • SEQ – 输出 : 连续地址访问 • 高有效,指示在接下来的周期中地址不变或大一个操作数(字或半字) • nRW – 输出 : 非读/写 • 区分存储器读写访问 • LOCK – 输出 : 锁定操作 • 指示一条交换指令正在执行,接下来的两个处理器总线周期是不可见的。 • MAS[1:0] – 输出 : 存储器访问大小 • 指示字、半字或字节访问。 • BL[3:0] – 输入 : 数据总线上的字节区段锁存使能 • 容许数据由小数构成。
存储器控制 • MAS[1:0] 指示数据传送大小( 8, 16 或 32 位 ) MCLK nMREQ SEQ Cycle Type Address A[31:0] nRW MAS[1:0] LOCK nTRANS nOPC Data D[31:0]
字节区段锁存使能 ARM7TDMI nWAIT ECLK MCLK BL[0] 31 8 G D[31:0] D [7:0] BL[1] 8 G D [15:8]
32 位存储器接口 Memory Control MCLK BWE[3:0] MAS[1:0] nMREQ, SEQ BL[3:0] nOE nWAIT nRW Memory 32-bit ARM7TDMI Macrocell A[31:0] A[31:2] 32 ID[31:0] 32 Board ASIC
16 位存储器接口 • 16位存储器接口 Memory Control MCLK MAS[1:0] BWE[1:0] BL[3:0] nMREQ, SEQ nWAIT nRW nOE TSTATE MUXC, TSTATE A’ [1] Memory 16-bit ARM7TDMI Macrocell A[31:2] A[31:0] 32 ID[15:0] 32 16 x2 Board ASIC
使用字节区段锁存 MCLK APE A[31:0], MAS[1:0] nWAIT ECLK D[31:0] 0x3 0xC BL[3:0] D[15:0] latched D[31:16] latched
改变操作状态 • T位指示ARM核的状态。 • 高 - Thumb 状态, 低 - ARM 状态 MCLK nMREQ, SEQ N-Cycle BX Instr. Destination Address A[31:0] nWAIT TBIT MAS[1:0] 01 - Half Word 10 - Word T Instr. ARM Instr. D[31:0]
取指 • 在ARM状态,指令是字( 32位 ) • 在THUMB状态,指令是半字(16位) • 指令可以从32位数据总线的高或低半段取得。 • 取决于Endian配置和 A[1]的状态。 Endian Configuration Little BIGEND = 0 Big BIGEND = 1 D[31:16] D[15:0] A[1] = 0 A[1] = 1 D[31:16] D[15:0] Thumb Instruction Fetches
取数据 • 字数据取操作类似于ARM状态的指令取操作。 • 半字数据的取操作类似于THUMB状态的指令取操作。 • 字节数据的取操作取决于Endian 配置和A[1:0]的状态。 Endian Configuration Little BIGEND = 0 Big BIGEND = 1 D[31:24] D[7:0] A[1:0] = 00 D[23:16] A[1:0] = 01 D[15:8] A[1:0] = 10 D[15:8] D[23:16] A[1:0] = 11 D[7:0] D[31:24] Byte Data Fetches
周期类型 • 非连续 (N) • 在接下来的周期中的地址与前一个地址无关。 • 连续 (S) • 在接下来的周期中的地址与前一个地址一样或大一个操作数(字或半字)。 • 内部 (I) • 处理器正在执行一个内部操作,同时,没有有用的预取执行。 • 协处理器寄存器传送 (C). • 处理器和协处理器之间通讯,不涉及存储器访问,但 D[31:0] 用于传送数据。 • 合并的内部连续 (IS) • I和S周期的特殊组合,容许优化存储器访问。
周期类型 nMREQ SEQ Cycle Type 0 0 Non-sequential 0 1 Sequential 1 0 Internal 1 1 Coprocessor register transfer
非连续周期 • 在接下来的周期中(nMREQ = 0) 且 (SEQ = 0) • 下一个周期将是非连续访问。 • 指令译码 nMREQ and SEQ 条件提前一个周期建立。 • A[31:0] 在接下来的周期的相位2阶段有效。 • 对于读操作,D[31:0] 必须在相位2结束时有效。 • 典型地 • 对于基于DRAM的系统的初始的行访问,N 周期要占用更长的时间。 • 处理器停下来(通过停止时钟)一个或更多的完整的时钟周期(等待状态),以便容许较长的访问时间。
典型的 N 周期 • MCLK 可以扩展,通过停止MCLK 或者声明nWAIT。 N - Cycle MCLK nMREQ SEQ A[31:0] D[31:0] nRAS (DRAM Row Address Strobe) nCAS (DRAM Column Address Strobe)
典型的 NS 周期 N - Cycle S - Cycle MCLK nMREQ SEQ Destination address (A) A + 4 A[31:0] D[31:0] nRAS nCAS • ARM state.
内部周期 (I) • 处理器在下一个周期中执行内部操作。 • 例子有乘、寄存器特定的移位操作、在从存储器加载数据之后的回写操作。 • nMREQ 和 SEQ 先于内部(I)周期一个周期的时间有效。 • nMREQ = 1 指示处理器没有存储器访问操作执行。 • A[31:0] 在跟着内部(I)周期的下一个周期的相位2阶段有效。 • 数据总线不驱动。 • 地址总线驱动。
内部(I )周期 I - Cycle MCLK nMREQ SEQ A A[31:0]
合并的 IS 周期 (1) • 处理器执行内部操作。 • 下一条指令的取指地址出现在地址总线上,容许提前译码。 • nMREQ和SEQ先于存储器访问周期一个周期的时间有效。 • 存储器系统可以设计成识别IS情况。 • 可以在内部周期期间启动对在内部周期期间的地址位置的访问。 • 例如,对于非连续的DRAM的访问,建立和声明 nRAS。 • 在连续 (S) 周期期间,访问可以结束。 • 例如, nCAS 完成访问。 • D[31:0] 可以变为有效,直到连续(S)周期的结束(MCLK的下降沿),而不增加等待状态。
合并的 IS 周期 (2) I - Cycle S - Cycle MCLK nMREQ SEQ Address A[31:0] D[31:0] nRAS nCAS
存储器周期状态机 C
代码序列 BL label ;带连接跳转到“label”; 将PC-4存入R14; x ; ARM7TDMI是三级流水,该条指令执行时,PC指向“XX” XX ..... label LDR R2, [R0] ; 从存储在R0中的地址取数,加载到 R2 SUB R2, R2, R3; R2的内容减R3,结果存入R2 ORR R2, R2, R4; R2与R4逻辑或操作,结果存入 R2 MOV PC, R14; 返回到分支之后的指令 .....
流水线及总线动作 1 2 3 4 5 6 7 8 9 10 BL F D E F D X F XX E F D Data WriteBack LDR E F D SUB D E F ORR D F MOV S S N S S N I IS S ECLK nMREQ SEQ Ab Ab+ 4 Ab+ 8 Ai+ 4 Ai+ 8 Ad Ai+ 16 Ai+ 12 Ai A[31:0] B X XX LDR SUB ORR MOV .... D[31:0] Data
流水线及总线动作 • 周期 1-3 • 分支指令及后续指令取自地址 Ab, Ab+4, Ab+8。BL 指令译码和执行在周期2和3中完成。 • 周期 4-6 • LDR 从非连续地址 Ai 取得, SUB 和 ORR 从连续地址Ai+4, Ai+8 取得。LDR 指令在周期 5 和 6 译码执行。 • 周期 7-8 • 在周期 7 中,非连续地从存储器位置Ad 加载,在周期 8 中,将这个数据写入R2中,由此可见,在内部(I )周期中,下一条指令的地址Ai+12 放在了 A[31:0] 上。 • 周期 9-10 • 周期 9 是一个合并的IS周期,在周期10的连续访问中,下一条指令MOV从地址Ai+12 取得。
存储器管理信号 • nOPC – 输出 • 低有效,指示处理器正在从存储器取指。 • nTRANS – 输出 • 低有效,指示处理器处于 ‘user mode’. • nM[4:0] – 输出 • 当前操作模式,即 User, FIQ, IRQ, Supervisor, Abort, System or Undefined. • ABORT – 输入 • 指示请求的访问不容许。 • 既用于指令预取,又用于Data abort。
存储器管理 Phase 1 Phase 2 MCLK A[31:0] nOPC nTRANS nM[4:0] ABORT
ARM7TDMI 外部接口 • 存储器接口 • 中断 • 调试接口 • 协处理器接口
ARM7TDMI 接口信号 nIRQ nFIQ Interrupts ISYNC ARM7TDMI
中断 • 2 个中断源 : nIRQ and nFIQ – 输入 • nFIQ 比nIRQ 优先级高。 • FIQ 代码可以在进入中断后直接访问执行。 • 可以选择 (ISYNC – 输入) 同步或异步时序。 • 异步时序 (ISYNC = 0) • 损失一个周期的同步。 • 同步时序 (ISYNC = 1) • nIRQ 和 nFIQ 必须在MCLK的下降沿的时候已经建立且保持。 • nFIQ 和 nIRQ 中断可以通过设置CPSR寄存器中的 F 和 I 位屏蔽。
异步时序 ISYNC = 0 Earliest Start of Interrupt Sequence MCLK nFIQ/nIRQ A[31:0] D[31:0] Interrupt Vector Address Instruction from Interrupt vector
同步时序 ISYNC = 1 Earliest Start of Interrupt Sequence MCLK nFIQ/nIRQ A[31:0] D[31:0] Instruction from Interrupt Interrupt Vector Address vector
ARM7TDMI 外部接口 • 存储器接口 • 中断 • 调试接口 • 协处理器接口
ARM7TDMI 接口信号 JTAG Interface ARM7TDMI EXTERN[1:0] DBGRQ Debug Interface BREAKPT DBGACK DBGEN ECLK
JTAG 信号 • TDI - Input - Test Data In • TDO - Output - Test Data Out • TMS - Input - Test Mode Select • TCK - Input - Test Clock • nTRST - Input - Test Reset (active low)
调试 Interface (1) • DBGEN – 输入(DEBUG ENABLE) • 必须保持高电平,以容许ARM7TDMI的软件调试。 • EXTERN[1:0] – 输入 • 输入到 EmbeddedICE 宏单元,容许基于外部条件的断点。
调试接口 (2) 下面的信号仅用于扩展外部调试。 • Multi-ICE 不使用这些信号。 • BREAKPT – 输入(BREAK POINT) • 在指令上标志断点。 • 在数据上标志观察点。 • 如果不用,保持低电平。 • DBGRQ – 输入(DEBUG REQUEST) • 强制ARM7TDMI核进入调试状态,高有效。 • 如果不用,保持低电平。 • DBGACK – 输出(DEBUG ACKNOWLEDGE) • ARM7TDMI进入调试状态的响应信号。高电平指示ARM7TDMI核已进入调试状态。
ARM7TDMI增加的扫描链 • TAP信号容许增加额外的链 • SCREG[3:0] -输出 当前选择的扫描链 • IR[3:0] -输出 当前已加载的指令 • TAPSM[3:0] -输出 TAP 状态机状态 • SDINBS -输出扫描链串行数据输入 • SDOUTBS -输入 扫描链串行数据输出 • 所需其它的移位、捕获时钟及多路复用器或选择线。