Rocket

https://mp.weixin.qq.com/s/pHtrlmSCPqzlDdfj3qkNPQ

 

简单介绍JtagShifter的实现。

 

 

1. 简单介绍

 

实现移位寄存器链,包含并行Capture和Update功能,用于实现从TDI到IR/DR,再到TDO的串行移位路径。

 

2. ShifterIO

 

定义Shifter的输入输出接口:

a. data:被移位(移入移出)的数据;

b. shift:控制是否移位(high in the ShiftIR/DR state);

c. capture:控制是否捕获数据(high in CaptureIR/DR state);

d. update:控制是否更新数据(hign in UpdateIR/DR state);

 

另外:

a. 多个ShifterIO可以组合在一起成为一个shifter chain;

b. chainControlFrom方法只是把控制接口串在一起,并没有串接data;

 

3. ChainIO

 

定义包含一个输入移位器接口和一个输出移位器接口的移位器链:

 

4. Capture

 

定义CaptureIO:

其中,

a. bits:输入信号,从中输入要捕获的数据(data to capture);

b. capture:输出信号,只是是否在捕获数据;

 

5. Chain

 

定义会引入一个ChainIO输入输出接口的特征:

 

6. JtagBypassChain

 

定义包含bypass寄存器的移位器链,按照规范中的说法,是select the bypass register to be connected for serial access between TDI and TDO in the Shift-DR controller state:

1) io

 

输入输出接口是一个ChainIO,用于把数据串行移入移出:

 

2) reg

 

reg即是bypass register,只有一个比特:

 

reg中的数据输出到chainOut这个ShifterIO:

 

reg中的数据从chainIn中来:

这里同时也考虑到capture的情况,可以参考规范。

 

3) assert

 

这个断言后面还会出现,用于断定capture/update/shift这三个值不能同时为真:

 

7. CaptureChain

 

包含并行数据捕获功能的移位器链:

 

1) io

 

在ChainIO的基础上,添加CaptureIO:

 

2) n

 

n是并行捕获数据的宽度,同时也是构造移位器链所需要的单比特寄存器数:

 

3) regs

 

regs用于存放并行捕获的数据,同时也支持移位:

 

4) 移位

 

regs可以通过移位逐位输入输出。

 

a. 串出

 

 

b. 串入

 

 

c. 移位

 

 

5) 捕获

 

regs也可以通过捕获并行输入输出。

 

a. 并行捕获

 

并行(一次性)地把io.capture.bits中的数据输入到regs中:

 

b. io.capture.capture赋值

 

相较于io.chainIn.shift通过外部输入,io.capture.capture的值根据io.chainIn.capture和io.chainIn.shift来决定:

 

8. CaptureUpdateChain

 

包含并行捕获和更新的移位寄存器链:

 

1) io

 

在ChainIO的寄存上加入CaptureIO和update相关的数据:

其中,更新相关的数据使用ReadyValid接口;

 

2) captureWidth/updateWidth/n

 

 

a. captureWidth:捕获数据的宽度;

b. updateWidth:更新数据的宽度;

c. n:两者中的较大值;

 

n取较大值,因为生成的寄存器既要并行输入要捕获的数据,也要并行输出更新的数据:

 

3) 移位

 

a. 串出

 

 

b. 串入

 

 

c. 移位

 

 

4) 捕获

 

把io.capture.bits并行输入到regs中:

这里使用math.min(n, captureWidth)是没有必要的,可以直接使用captureWidth;因为n ≥captureWidth,所以两者中较小的肯定是captureWidth。

 

5) 更新

 

在判断到io.chainIn.update为真时,会把io.update.valid值为真:

 

此时由regs产生的updateBits就并行更新(parallel update)输出到io.update.bits中了:

 

6) 断言

 

这个断言的意义在这里就更明确了,用于断定capture/update/shift这三个值不能同时为真:

 

 

原文地址:https://www.cnblogs.com/wjcdx/p/11632585.html