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

Rocket - jtag - JtagShifter的更多相关文章

  1. Rocket - jtag - JtagTap

    https://mp.weixin.qq.com/s/0u9jM2u-FkTlrk3QNuZaBw 简单介绍JtagTap的实现. 1. 简单介绍 定义TAP(Test Access Port)所需要 ...

  2. Rocket - jtag - JtagStateMachine

    https://mp.weixin.qq.com/s/cFXVOBHayV2w27jpT5RglA 简单介绍JtagStateMachine的实现. 1. 简单介绍 根据IEEE 1149.1-200 ...

  3. STM32C8T6 JTAG使用到PB3|PB4|PA13|PA14|PB15端口做普通IO时,需禁止JTAG!

    GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIO ...

  4. STM32用JLINK 烧写程序时出现NO Cortex-m device found in JTAG chain现象和解决方案

    现象 CPU: STM32107VC 用JLINK 烧写程序时出现NO Cortex-m device found in JTAG chain 如图无法查找到硬件就是CPU 提示1:NO Cortex ...

  5. 偶遇STM32 JTAG和SWD口(调试)被禁用无法下载,已经粗暴解决!

    处女座,为了板子走线美观,拉线方便,在项目量产前,还更改了原来外设的IO口,埋头苦干一天,移植ok,发现PB3一直不听使唤,好,加班检查代码,检查初始化,时钟,IO对应,然后试PCB板,是否短路,断路 ...

  6. (转)小心FPGA的JTAG口(上电和下电顺序)

    同志们,根据ALTERA官方FAE(现场应用工程师)的强烈建议,请注意不要随意带电插拔你的JTAG下载接口,否则会损坏FPGA芯片的JTAG口信号管脚.现象:在排除了下载线的问题后,还是不能访问FPG ...

  7. JTAG 学习 -SVF格式

    yxr注: 主要zt,附上自己的心得如下: 1)反观SVF文件,除了设置必要的条件之外(初始条件和TIR等四条命令),真正的运行命令就两条,SIR向JTAG TAP状态机的IR寄存器送命令,SDR往J ...

  8. [异常解决] JTAG 与STM32的SWD连接接线方式

    如果我们的板子上只留了4个接口:V3.3,SWDIO,SWDCLK,GND.那么和JTAG的连接关系参见下图: dd400cf22b5c01e57a6c9e198d5383a0_189.jpg (0 ...

  9. Quartus 11.0 的AS 下载方式和JTAG下载jic文件的方式

    FPGA下载的三种方式:主动配置方式(AS)和被动配置方式(PS)和最常用的(JTAG)配置方式: AS由FPGA器件引导配置操作过程,它控制着外部存储器和初始化过程,EPCS系列.如EPCS1,EP ...

随机推荐

  1. [C#] StringFormat详解之文本方向、对齐

    在使用GDI方式处理文本时,往往会用到StringFormat.里面的某些点有点反直觉,不够直观,所以本篇就通过图文的方式去讲解一下. 本篇内容仅涉及到文本方向.对齐的相关内容. 如有错误.不妥之处, ...

  2. [hdu4513]常规dp

    题意:给一个长度为m的序列,从里面选出一些数,相对位置不发生变化,并满足a[i]=a[n-i],a[1]<a[2]<...<a[(n+1)/2],n是数的个数,求最大的n 思路:dp ...

  3. Bootstrap:Bootstrap_table第一篇:快速用bootstrap_table(支持参数)筛选并展示数据,固定表格前几列,实现表格单元格编辑

    1.准备好css和js文件 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstr ...

  4. Nuget一键打包上传以及高级应用

    Nuget是什么不用多说,大家应该也没少用过Nuget, 不少人也应该使用过工具打Nuget包,接下来先一步步说明如何使用脚本完成Nuget一键打包 Nuget一键打包 配置Nuget环境 下载地址: ...

  5. Windows基础学习

    0x01 常用的端口 HTTP协议代理服务器常用端口号:80/8080/3128/8081/9098SOCKS代理协议服务器常用端口号:1080FTP(文件传输)协议代理服务器常用端口号:21Teln ...

  6. Rx-Volley 自己来封装

    自从15年接触了RxJava,对函数式编程越发的喜爱.以前Android项目上网络层都是统一的使用Volley,已经对网络请求的回调,多个回调嵌入各种不爽了,趁着年前任务轻松,赶紧的将Volley封装 ...

  7. jbpm4 泳道

    今天刚学习了jbpm4的泳道使用,方便以后查阅记录一下! 泳道定义: <swimlane name="myswim" assignee="userC"&g ...

  8. 我的linux学习日记day5

    一.vim 编辑器 有三种模式,命令模式,输入模式,末行模式 1.下面是命令模式常用的命令 2.末行模式常用命令 :w 保存 :q 退出 :q! 强制退出 :wq! 强制保存退出 :set nu 显示 ...

  9. 我的linux学习日记day2

    RPM  软件包管理器 目的:降低软件安装难度原理 :将软件源代码加上一套安装规则打包到一起,用户只需要运行RPM systemctl start 服务名称 开启服务systemctl stop 服务 ...

  10. helm使用

    helm 0. helm安装 基本上到github上面,下载二进制就行.mac的话用brew安装. https://github.com/helm/helm brew: brew install ku ...