jtag访问arm内核寄存器

  • jtag的原理图
  • jtag接口访问arm Device ID code register的步骤
  • jtag接口访问arm Device ID code register的功能验证的testbench
  • jtag接口访问arm Device ID code register的功能验证的波形图
  • jtag相关注意细节
  • jtag访问arm内核寄存器的步骤
  • 与DTR相关的协处理器指令介绍
  • 最后通过封装成verilog task就可以实现简单的jtag仿真器了

想实现arm jtag接口的功能验证,搭建verilog testbench去访问arm内核的寄存器。还没实现。。待完成。(暂时完成了利用jtag接口,访问arm Device ID code register的功能验证。)
已验证完成。
以下描述,基于ARM11。

jtag的原理图

网上摘了几张图,
这里写图片描述

这里写图片描述

这里写图片描述

jtag接口访问arm Device ID code register的步骤

实现jtag的IDCODE指令,然后再实验arm内核寄存器的访问。

基本原理,
tms信号,负责jtag模式切换,即下图的状态机。
第一步,通过tms信号,跳转至Shift-IR状态;
第二步,tdi信号输入IDCODE指令码;其实就是指令寄存器,输入jtag识别的指令码。
第三步,通过tms信号,跳转至Shift-DR状态;
第四步,查看tdo信号,其实就是数据寄存器输出的数据。因为指令是IDCODE,所以这一步输出的值应该是jtag的器件ID信息,32位。

注意:根据jtag协议,得到下述信息:
jtag相关输入信号,要求在tck下降沿输入。jtag输出信号,是在tck上升沿产生。

jtag接口访问arm Device ID code register的功能验证的testbench

这里写图片描述

jtag接口访问arm Device ID code register的功能验证的波形图

这里写图片描述

jtag相关注意细节

  • arm jtag的debug,一定要在arm正常启动后才能执行。
  • arm 进入jtag debug state,需要两步,一步是DSCR[14]使能;一步是Halt指令。
  • arm jtag里,有tck和ARMCLK之间的异步时钟域(这是因为jtag和ARM内核有数据交互),所以要么满足tck/ARMCLK同步要求(即,打开JTAGSYNCBYPASS使能);要么就去掉JTAGSYNCBYPASS的使能。
  • jtag的输入信号,都是在tck下降沿打进去的;jtag的输出信号,都是在tck上升沿打出来的。
  • arm的tdi和tdo,都是先最低位。
  • shift-IR最后一拍tdi输入和离开shift-IR的动作,都是在一拍内同时完成。上图代码中,注释了一行@(negedge tck)。shift-DR同理。
  • jtag可以访问专有的debug寄存器;而且可以向arm输入指令和访问数据(这是通过ITR、DTR寄存器和INTEST/EXTEST等jtag指令,根据下述步骤实现的)。
  • jtag和边界扫描,是配合成套的;jtag访问arm内核寄存器,也是通过边界扫描的实现,才能把指令/数据scan-in;并把数据scan-out。

jtag访问arm内核寄存器的步骤

如果通过jtag接口,访问memory或者register,需要提供指令码。过程简述如下:
ARM11原始文档,介绍了类似过程;这里讲得更详细一些。

  • 进入debug state。即执行arm jtag的Halt命令。注意这一步骤和下一步骤的两个shift-IR操作,不能跳过Run-Test/Idle状态【实践验证得知,具体原因还未查询】。
    可以走这个过程,jtag状态机shift-IR->exit1-IR->update-IR->Run-Test/Idle->Select-DR-Scan->Select-IR-Scan->Capture-IR->Shift-IR
  • Scan_N选择扫描链的指令,配置值为0x1;(JTAG接口就是通过扫描方式,访问ARM内核的。)(0x1是为了访问DSCR寄存器)
  • INTEST读指令;目的是为了读后写,使DSCR寄存器的部分字段恢复初始状态。
  • EXTEST写指令;DSCR[14]配置1,使能ARM Debug模式。重要步骤。而且DSCR[13]需要在单独的下一步骤配置,不能[14][13]一起配置,否则会引起不可预知的错误。
  • EXTEST写指令;DSCR[13]配置1,即使能ARM Debug状态下对指令的执行。
  • Scan_N选择扫描链的指令,配置值为0x4(0x4是访问指令传输寄存器ITR,把下一步的指令码传输给指令预取单元里)
  • EXTEST写指令;这个指令码,就是普通的arm反汇编二进制码。补充:送往PU(预取单元PrefetchUnit),然后开始指令流水,如果指令不符合要求,内部会出现DbgInstrV(debug instruction Valid信号)不能有效。
    指令举例:
    e3a02332 mov r2, #-939524096 ; 0xc8000000
    e3a01499 mov r1, #-1728053248 ; 0x99000000
    e5821020 str r1, [r2, #32]
    e5920020 ldr r0, [r2, #32]
    ee000e15 MCR P14,0,R0,C0,C5,0

注意,与DTR相关的指令需要协处理器指令完成,后面会介绍。

  • jtag状态机必须要经过Run-Test/Idle;
  • Scan_N选择扫描链的指令,配置值为0x5(这个数据传输寄存器DTR,与ITR指令传输寄存器配合使用)
  • INTEST读指令;把34bits的数据扫描出来,[31:0]是R0寄存器的值,[32]是指令是否完成的标识(如果指令未完成,会再Scan out一组34bits的数据出来),[33]是rDTRempty即数据传输寄存器里的数据是否空。

与DTR相关的协处理器指令介绍

这里写图片描述

原型:
MCR{cond} <cp_num>, <op1>, <Rd>, <CRn>, <CRm>{, <op2>}  
意义:
协处理器与ARM寄存器之间的数据传输。
其中,debug协处理器,数据传输是在DTR(即P14.C5)寄存器里。即P14.C5与ARM.Rx之间的数据搬移。
解析:
- MCRMove to coproc from ARM reg  
- {cond};条件判断,大括号表示可选参数,如果没有这个参数,则意味着无条件执行。
- <cp_num>;CoProcessor协处理器号,p0~p14。jtag对应的一般是p14,即CP14
- <Rd>;是ARM寄存器
- <CRm>;是协处理器的寄存器号。比如debug协处理器的P14.C5,就是DTR寄存器。
- <op1>, <op2>,<CRn>;这几个是可以由debug指令确认。

举例说明:
MCR P14,0,R0,C0,C5,0
属于ARM CP14 debug指令之一,叫DTR指令。
意义:
move to ARMReg[R0] from CP14.C5;其中 CP14.C5就是debug协处理器的DTR寄存器。

最后通过封装成verilog task,就可以实现简单的jtag仿真器了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1549584.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

关于ARM内核经典系列ARM7/ARM9/ARM11和Cortex®-A/Cortex®-R/Cortex®-M的产品线简单介绍

目前市场上的嵌入式单片机或者Soc大部分都是ARM的内核架构&#xff0c;相信大家对Cortex-M3/Cortex-M4&#xff0c;Cortex-A53/Cortex-A73等有所耳闻。 ARM公司主要是设计处理器内核的公司&#xff0c;之前的ARM7/ARM9/ARM11被划分为经典的ARM内核&#xff1b;后面ARM公司分出…

常见前端面试之VUE面试题汇总三

7. Vue 中封装的数组方法有哪些&#xff0c;其如何实现页面更新 在 Vue 中&#xff0c;对响应式处理利用的是 Object.defineProperty 对数据进 行拦截&#xff0c;而这个方法并不能监听到数组内部变化&#xff0c;数组长度变化&#xff0c;数 组的截取变化等&#xff0c;所以需…

配置arm内核实现NFS功能

NFS介绍 NFS&#xff08;Network File System&#xff09;即网络文件系统&#xff0c;是FreeBSD支持的文件系统中的一种&#xff0c;它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中&#xff0c;本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件&…

什么是arm-arm体系架构版本(指令集版本)-arm内核版本

1、什么是arm&#xff1f; arm公司&#xff1a;是英国一家电子公司的名字&#xff0c;该公司成立于1990年11月&#xff0c;是苹果电脑&#xff0c;Acorn电脑集团和VLSI Technology的合资企业。Acorn曾在1985年推出世界上首个商用单芯片RISC&#xff08;Reduced Instruction Se…

ARM内核——寄存器功能讲解

根据“ARM-thumb 过程调用标准”&#xff1a; 通用寄存器 通用寄存器包含R0到R12&#xff0c;13个寄存器 R0-R3 用作传入函数参数&#xff0c;传出函数返回值。在子程序调用之间&#xff0c;可以将 r0-r3 用于任何用途。被调用函数在返回之前不必恢复 r0-r3。如果调用函数需…

ARM内核版本

ARM架构CPU发展历程&#xff1a; &#xff08;https://en.wikipedia.org/wiki/ARM_architecture#CPU_modes&#xff09;

嵌入式芯片的硬件组成(ARM内核)

嵌入式最小硬件系统的6部分 基于ARM内核的嵌入式芯片的硬件组成 连接到系统总线上的高带宽组件主要包括&#xff1a; 存储器及控制器、电源管理与时钟控制器、中断控制器、DMA控制器、GPIO端口、互联通信组件、定时计数组件、模拟通道组件。

ARM内核全解析

前不久 ARM 正式宣布推出新款 ARMv8架构 的 Cortex-A5 0处理器系列产品&#xff0c;以此来扩大ARM在高性能与低功耗领域的领先地位&#xff0c;进一步抢占移动终端市场份额。Cortex-A50是继 Cortex-A15 之后的又一重量级产品&#xff0c;将会直接影响到主流PC市场的占有…

ARM 内核分类

根据ARM官方资料和网上资料整理。 先来一张Architecture的图片 ARM微处理器系列 ARM 微处理器目前包括下面几个系列&#xff0c;以及其它厂商基于 ARM 体系结构的处理器&#xff0c;除了具有 ARM 体系结构的共同特点以外&#xff0c;每一个系列的 ARM 微处理器都有各自的特点和…

ARM内核结构

ARM内核有4个功能模块T、D、M、I&#xff0c;可供生产厂商根据不同用户的要求来配置生产ARM芯片。 其中&#xff1a;T功能模块表示16位Thumb&#xff0c;可以在兼顾性能的同时减少代码尺寸。M功能模块表示8位乘法器。D功能模块表示Debug&#xff0c;该内核中放置了用于调试的结…

ARM内核、指令集等简介

文章目录 1.ARM架构学习1.1.ARM相关背景介绍 2.ARM指令集2.1 A32指令集2.2 A64指令集2.3 代码举例说明 3.ARM与RISC、CISC的关系4.ARM与哈佛结构、冯诺依曼结构 1.ARM架构学习 ARM即是公司名&#xff0c;是一家英国的公司&#xff0c;也是芯片名&#xff0c;随便嵌入式设备的发…

ARM 之五 发展史及各时期内核(ARM1 ~ ARM11 / Cortex)介绍

很久很久以前   1978年12月5日&#xff0c;物理学家赫尔曼豪泽&#xff08;Hermann Hauser&#xff09;和工程师 Chris Curry&#xff0c;在英国剑桥创办了CPU公司&#xff08;Cambridge Processing Unit&#xff09;&#xff0c;主要业务是为当地市场供应电子设备。1979年&a…

ARM内核与架构

1、ARM架构分类 ARM架构发展至今分为 ARMv1~ARMv8 &#xff0c;不同架构之间指令集存在差异。根据架构类型又开发出不同内核&#xff0c;常用的 ARMv7 架构有三种类型的内核&#xff1a; 1&#xff09;Cortex-A&#xff1a;用于高性能应用&#xff0c;主要支持分页内存管理单…

ARM内核科普

从1985年ARMv1架构诞生起&#xff0c;到2011年&#xff0c;ARM架构已经发展到了第八代ARMv8。 Cortex-A32/35/53/57/72/73/77/78采用的都是ARMv8架构&#xff0c;这是ARM公司的首款支持64位指令集的处理器架构。 3&#xff09; ARM11之前的处理器和指令集架构 ARM11芯片之前&…

IDC发布中国低代码市场报告,得帆独立低代码市占率第一

近日&#xff0c;国际数据公司IDC公布了《2022下半年中国低代码与零代码软件市场跟踪报告》&#xff08;以下简称“报告”&#xff09;。 2022下半年中国低代码与零代码软件市场规模为15.6亿元人民币&#xff0c;得帆低代码PaaS平台凭借过硬的产品优势和深厚的客户实践经验&am…

初识ARM(内核、SoC)

对于刚接触到ARM的人来说&#xff0c;可能仅仅知道ARM是一种内核&#xff0c;是一种处理器&#xff08;CPU&#xff09;&#xff0c;但是&#xff0c;每当我们思考ARM内核是如何发挥作用、ARM处理器到底有什么用的时候&#xff0c;我们可能就会脑袋空白。当然&#xff0c;作为初…

FFmpeg解码32k大分辨率出现如下错误:Picture size 32768x32768 is invalid

最近找到一张32k的jpeg图片&#xff0c;尝试用ffmpeg来进行解码&#xff0c;命令如下&#xff1a; ffmpeg -i enflame_32768-32768-420.jpg 32.yuv结果出现Picture size 32768x32768 is invalid的错误&#xff1a; 找到报错的代码文件imgutils.c&#xff0c;以及函数&#x…

YOLOv8教程系列:四、使用yolov8仓库训练自己的图像分类数据集(含推理预测)

YOLOv8教程系列&#xff1a;四、使用yolov8仓库训练自己的图像分类数据集&#xff08;含推理预测&#xff09; 0.引言 Yolov8是最新一代的You Only Look Once目标检测模型,它由Ultralytics研究团队在2022年开发。相比于之前的Yolo版本,Yolov8在速度和精度上都有很大的提升。 …

IE实现PDF在线预览功能

背景&#xff1a; chrome、firefox、edge浏览器默认可以在线预览pdf的&#xff0c;因为chrome默认自带PDF reader的 但是IE这个微软早已经放弃垃圾浏览器&#xff0c;国内还有好多大型国有企业在用&#xff0c;所以还得做兼容 步骤 1、下载安装 Adobe Reader&#xff08; Adb…

Ubuntu64位安装Adobe Reader 9.5.5

Aodbe Reader在Linux下的效果比Foxit Reader&#xff08;福昕阅读器&#xff09;要好一些&#xff0c;尤其对于中文文档而言。本文介绍Adobe Reader在Ubuntu下的安装&#xff0c;文章《Ubuntu12.04 64位安装Foxit Reader》则介绍Foxit Reader的安装。 Aodbe Reader的安装步骤如…