• 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这三个值不能同时为真:

     

     

  • 相关阅读:
    html5笔记
    CGI
    php和apache的关系和作用()
    sass最佳实践
    javascript笔记——jQuery插件开发的几种方式
    关于ajax解析
    http协议详解
    【python之路6】pycharm的使用
    【每日一linux命令7】用户及用户组
    【每日一linux命令6】命令中的命令
  • 原文地址:https://www.cnblogs.com/wjcdx/p/11632585.html
Copyright © 2020-2023  润新知