Rocket - jtag - JtagTap
https://mp.weixin.qq.com/s/0u9jM2u-FkTlrk3QNuZaBw
简单介绍JtagTap的实现。
1. 简单介绍
定义TAP(Test Access Port)所需要的相关模块,并实现一个生成TAP的方法。
2. JTAGIO
定义JTAG模块的输入输出接口,输入输出方向是从master side的视角出发决定:
其中,TDO是一个三态值:
3. JtagOutput
定义JTAG模块的输出信号:
a. state:JTAG的当前状态;
b. instruction:当前执行的指令;
c. reset:在Test-Logic-Reset状态输出的复位信号;
4. JtagControl
输入Jtag模块的控制信号,这里是复位信号:
5. JtagBlockIO
聚合在一起的Jtag模块的输入输出接口:
其中:
a. jtag:从slave侧看的TCK/TMS/TDI/TDO等接口;
b. control:Jtag模块控制信号,这里是复位信号;
c. output:Jtag模块的输出信号;
d. idcode:根据类参数决定是否包含JTAGIdcodeBundle数据,用以支持IDCODE指令:
e. irLength:指令寄存器的宽度;
6. JtagControllerIO
定义Jtag控制器的输入输出接口:
a. dataChainOut:数据串出接口;
b. dataChainIn:数据串入接口;
7. JtagTapController
定义Jtag TAP控制器:
1) 类参数
a. irLength:指令寄存器宽度;
b. initialInstruction:初始指令;
2) io
Jtag控制器输入输出接口:
3) stateMachine
stateMachine是JtagTapController的状态机:
a. 创建状态机;
b. suggestName:为stateMachine命名;
c. 灌入tms信号:stateMachine.io.tms := io.jtag.TMS;
d. 输出状态机的状态到currState和io.output.state;
4) stateMachine.io.currState/currState/io.output.state
a. stateMachine.io.currState是状态机中使用的状态,也是最原始(最先变化)的状态;
b. currState:JtagTapController中使用的状态,使用Wire挂在stateMachine.io.currState上作为下游,所以其值与stateMachine.io.currState一致;
c. io.output.state:JtagTapController将stateMachine.io.currState输出到io.output.state,以把状态机的状态作为JtagTapController的状态输出;
5) dataChain
A. 串入串出
data chain使用的是JtagControllerIO,只能串入串出;不像irChain是CaptureUpdateChain,可以并入并出(parallel-in/parallel-out)。
B. 交叉
a. io.jtag.TDI输出到io.dataChainOut.data:
b. io.dataChainIn.data输出到TDO:
c. 为什么不是TDI到io.dataChainIn.data,而io.dataChainOut.data到TDO?
如果与指令寄存器(IR)相比较,指令寄存器只有一个,只是其中存放的指令不同,并不会有多个指令同时存在。
而数据寄存器(DR)则包括很多,TAP控制器需要根据指令的不同,把不同的数据寄存器连接到TDI和TDO之间。
6) irChain
a. CaptureUpdateChain
irChain是一个CaptureUpdateChain,可以并入并出。并且irChain的io.chainIn与io.chainOut中间以移位寄存器链相连接。
b. io.jtag.TDI输出到irChain.io.chainIn.data;
c. irChain.io.chainOut.data输出到TDO:
7) tdo
tdo输出到io.jtag.TDO,tdo_driven用于控制TDO是否active:
8) activeInstruction
A. activeInstruction来自于nextActiveInstruction和updateInstruction;
B. 取值
a. reset为真
当模块处于复位状态时,使用initialInstruction;
b. 如果当前状态为UpdateIR,则从irChain.io.update.bits获取更新后的指令;
c. 其他情况下,则不更新指令;
C. 输出activeInstruction到io.output.instruction:
9) io.output.reset
当状态为TestLogicReset时,输出复位信号:
8. JtagTapGenerator
JtagTapGenerator用于使用JtagTapController生成一个JtagTap。
1) internalIo
internalIo是一个JtagBlockIO:
相比较之下,JtagTapController模块的io接口也继承自JtagBlockIO,并且添加了dataChainIn/dataChainOut。
2) allInstructions
A. instructions
instructions是一个Map,key是指令,value是data register chain:
B. idcode
如果idcode定义了,那么也要生成一个IDCODE指令和data register chain的映射:
a. instructions中不能已经包含一个IDCODE指令
b. 生成一个idcodeChain,作为IDCODE指令使用的data chain:
c. capture
从internalIo.idcode中捕获数据:
d. 把IDCODE指令及idcodeChain的映射加入到instructions中
C. allInstructions
allInstructions中需要加入IDCODE指令,如果instructions中没有,那就把创建一个加入进去。
3) 生成initialInstruction
如果没有提供idcode,则使用BYPASS指令:
4) 创建JtagTapController
5) 处理bypassChain
a. 创建bypassChain
b. 从controller中接收输出:
c. 输出到controller:
d. 连接图
若controller选择从bypassChain输入,则bypassChain中的数据经io.dataChainIn.data输入,而后从TDO输出;
若controller选择输入到bypassChain,则TDI中的数据经过io.dataChainOut.data保存到bypassChain中;
6) 生成数据寄存器到使用其的指令的映射:chainToInstCodes
__chainToInstCodes是重构之后的代码:
a. sortedMap:把allInstructions排序之后的映射;
b. groupsByChain:按照使用的chain(test data register)分组;
c. chainToInstCodesMap:生成chain到使用这个chain的指令之间的映射;
d. 使用第一个指令进行排序;
总体而言,就是把原本指令到数据移位寄存器链的映射,转换为数据移位寄存器链到指令序列的映射。
7) 根据controller中正在执行的指令,确定使用的是哪一个data chain:
8) 生成逻辑,把选择到的chain,输出到controller中:
若没有选择到任何一个data chain,则使用bypassChain。
9) 生成逻辑,让选择到的chain,从controller接收数据:
没有选择到的data chain,从unusedChainOut中获取数据:
因为shift/capture/update都是false,所以没有选择到的data chain内容不会发生变化。
10) data chain连接图
11) 连接与controller的jtag/control/output接口:
12) 返回internalIo供外部使用
实际上可以把这个Generator定义为JtagTap类,而internalIo就是JtagTap模块的io。
Rocket - jtag - JtagTap的更多相关文章
- Rocket - jtag - JtagStateMachine
https://mp.weixin.qq.com/s/cFXVOBHayV2w27jpT5RglA 简单介绍JtagStateMachine的实现. 1. 简单介绍 根据IEEE 1149.1-200 ...
- Rocket - jtag - JtagShifter
https://mp.weixin.qq.com/s/pHtrlmSCPqzlDdfj3qkNPQ 简单介绍JtagShifter的实现. 1. 简单介绍 实现移位寄存器链,包含并行Capture和U ...
- Rocket - debug - DebugTransport
https://mp.weixin.qq.com/s/EcsuTjb4hFF9Ncig9Gfhew 简单介绍DebugTransport的实现. 1. JtagDTMConfig 1) JtagDTM ...
- STM32C8T6 JTAG使用到PB3|PB4|PA13|PA14|PB15端口做普通IO时,需禁止JTAG!
GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIO ...
- 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 ...
- 偶遇STM32 JTAG和SWD口(调试)被禁用无法下载,已经粗暴解决!
处女座,为了板子走线美观,拉线方便,在项目量产前,还更改了原来外设的IO口,埋头苦干一天,移植ok,发现PB3一直不听使唤,好,加班检查代码,检查初始化,时钟,IO对应,然后试PCB板,是否短路,断路 ...
- (转)小心FPGA的JTAG口(上电和下电顺序)
同志们,根据ALTERA官方FAE(现场应用工程师)的强烈建议,请注意不要随意带电插拔你的JTAG下载接口,否则会损坏FPGA芯片的JTAG口信号管脚.现象:在排除了下载线的问题后,还是不能访问FPG ...
- JTAG 学习 -SVF格式
yxr注: 主要zt,附上自己的心得如下: 1)反观SVF文件,除了设置必要的条件之外(初始条件和TIR等四条命令),真正的运行命令就两条,SIR向JTAG TAP状态机的IR寄存器送命令,SDR往J ...
- [异常解决] JTAG 与STM32的SWD连接接线方式
如果我们的板子上只留了4个接口:V3.3,SWDIO,SWDCLK,GND.那么和JTAG的连接关系参见下图: dd400cf22b5c01e57a6c9e198d5383a0_189.jpg (0 ...
随机推荐
- D. Count the Arrays 计数题
D. Count the Arrays 也是一个计数题. 题目大意: 要求构造一个满足题意的数列. \(n\) 代表数列的长度 数列元素的范围 \([1,m]\) 数列必须有且仅有一对相同的数 存在一 ...
- 设计模式(Java语言)- 建造者模式
前言 在日常的生活中,我们可以经常看到建造者模式的影子.比如,建造房子,那么房子就是一个产品,房子由门,窗,墙,地板等部门组成.然后包工头在建造房子的时候就根据设计好的图纸来建造,但是包工头并不是亲自 ...
- Matlab矩阵总结
- SSM的医院管理系统录像
视频观看地址:http://mp.toutiao.com/preview_article/?pgc_id=6806135073323090444
- JVM 虚拟机&&类加载(一)
虚拟机 虚拟机简介 Java 虚拟机(JVM)是运行java程序的抽象计算机,它是计算机设备的规范,可以采用不同方式进行实现,java 程序通过运行在JVM中实现跨平台,一次编译到处运行,不同的操作系 ...
- Git管理修改、撤销修改、删除文件
什么是修改?比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改. a.管理修改 对于提交修改, ...
- [Alink漫谈之三] AllReduce通信模型
[Alink漫谈之三] AllReduce通信模型 目录 [Alink漫谈之三] AllReduce通信模型 0x00 摘要 0x01 MPI是什么 0x02 Alink 实现MPI的思想 0x03 ...
- 两种方式实现sticky footer绝对底部
一.什么是sticky footer 如果页面内容不够长的时候,页脚块粘贴在视窗底部:如果内容足够长时,页脚块会被内容向下推送,我们看到的效果就如下面两张图这样.这种效果基本是无处不在的,很受欢迎. ...
- java基础(反射,注解,多线程,juc)
JAVA基础 java反射 class对象 三种方式获取class加载时对象 1.class.forName("全类名"):将字节码文件加载进内存,返回class对象 2.类名.c ...
- 手把手教你用Python网络爬虫获取网易云音乐歌曲
前天给大家分享了用Python网络爬虫爬取了网易云歌词,在文尾说要爬取网易云歌曲,今天小编带大家一起来利用Python爬取网易云音乐,分分钟将网站上的音乐down到本地. 跟着小编运行过代码的筒子们将 ...