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

     

     

  • 相关阅读:
    查看IIS进程W3WP.exe对应网站进程池的PID
    【C#】结对项目开发-电梯调度仿真系统(Bata版)(党云龙、黄为)
    对于敏捷开发的理解!~~~~~~~~(黄为)
    【C】二维数组求最大子数组(基于一维数组的拓展)
    【C#】结对项目开发-电梯调度仿真系统(内部开发者版)(党云龙、黄为)
    【C】课堂结对联系-求整数数组的子数组之和的最大值(党云龙、黄为)
    【C#】结对项目开发-电梯调度需求分析(党云龙、黄为)
    C语言中求整型数组中的最大值!~~~~(黄为,刘佳琪)
    读入文本,找出出现频率最高的10个单词~~~~
    Emmet HTML/CSS代码快速编写神器
  • 原文地址:https://www.cnblogs.com/wjcdx/p/11632585.html
Copyright © 2020-2023  润新知