JTAG 指令寄存器和指令译码器介绍

嵌入式技术

1372人已加入

描述

Instruction Register (IR) 指令寄存器

指令寄存器的目的是通过 TDI 信号移入指令。另外,指令寄存器还可以在新指令完全移入之前,存储当前的指令。

一般情况下,一个 IR 会图 1 中的那样,包含两个寄存器。Hold 寄存器存储的是前一条指令,Shift 寄存器用于在不影响前一条指令的情况下,移入下一条指令。

寄存器

图 1- 数据寄存器顶层示意图

指令寄存器的控制信号来自于 TAP 控制器,具体的控制信号数值取决于当前 FSM 状态机的状态,使指令寄存器工作 Shift 寄存器移入/移出指令(即 Shift-IR 状态下的串行更新过程),或者使 Shift 寄存器的内容传递到 Hold 寄存器中(即 Update-IR 状态下的并行更新过程)。

假设一个 4 比特长度的指令寄存器,如果要向其中装填的一个数值,比如 4‘b1100,那么需要以下几个步骤:

控制 TMS 信号输入以下序列,使状态机从 “Test Logic Reset” 状态转入 "Shift-IR" 状态:

TMS = 0 (1st clock)

TMS = 1 (2nd clock)

TMS = 1 (3rd clock)

TMS = 0 (4th clock)

TMS = 0 (5th clock)

在 "Shift-IR" 状态时,在接下来的 3 个时钟周期内保持 TMS = 0,并通过 TDI 串行移入指令数值(4'b1100)。NOTE:这里使用 3 个时钟周期就移入了 4 比特数据,这是因为数据 4'b1100 的 LSB (即比特 0)在第四个时钟周期后出现在 TDI 端口上,这样在第五个时钟周期 FSM 进入"Shift-IR" 状态时就会将 LSB 移入。最终,数据的最后一比特 MSB 会在第八个时钟周期移入。

控制 TMS 信号输入以下序列,使状态机从 "Shift-IR" 状态移入 “Update-IR” 状态:

在 FSM 进入 “Update-IR” 状态后,Shift 寄存器中的数值(4'1100)会并行地被加载到 Hold 寄存器。此时,该指令将可以被指令译码器读取。

TMS = 1 (9th clock)

TMS = 1 (10th clock)

Instruction Decoder 指令译码器

指令寄存器(IR)中的指令会被传输给指令译码逻辑,译码逻辑会根据指令选取下一步 JTAG 操作的目标数据寄存器。

我们给每个数据寄存器都分配了一个不同的指令码数值。当选择某个数据寄存器时,会将其对应的指令装填到指令寄存器中,随后指令译码器将译码该指令码,并建立其一条 TDI/TDO 和对应数据寄存器之间的通路。

假设我们的 JTAG 模块中有两个数据寄存器 DR-1 和 DR-2,以及一个 4 比特宽度的指令寄存器。所以我们将给每个数据寄存器指定一个指令码以及对应的指令,比如:

DR-1 ( opcode = 4’b0010)

DR-2 ( opcode = 4’b0011)

NOTE:采用 4 比特指令码,是因为该 JTAG 指令译码器位宽为 4 比特。

如果我们想通过 JTAG 访问 DR-2,那么我们需要在指令译码器中装填数值 4'b0011,指令译码器将可以译码该数值,并选中 DR-2。

编辑:黄飞

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分