集成电路流片随笔16:jtag top下的两个子模块概览 tinyriscv
JTAG 接口模块,实现了对系统的 调试、控制 和 状态检查 功能。具体来说,它是通过 JTAG (Joint Test Action Group) 接口,控制和访问系统中的内部寄存器、内存以及其他外设。
模块整体说明
该模块是 JTAG(调试接口) 的顶层模块,主要有两个子模块:
jtag_driver
:该模块负责处理 JTAG 信号,进行通信与响应。jtag_dm
:该模块是 JTAG 数据寄存器管理模块,处理从 JTAG 驱动器到内存或寄存器的数据操作。
JTAG 接口信号
输入信号:
clk
:时钟信号。jtag_rst_n
:JTAG 接口复位信号。jtag_pin_TCK
:时钟信号,用于同步数据传输。jtag_pin_TMS
:测试模式选择信号,用于指示 JTAG 状态机的状态。jtag_pin_TDI
:JTAG 数据输入信号,从外部发送到设备。reg_rdata_i
:寄存器的数据输入,读取的数据。mem_rdata_i
:内存的数据输入,读取的内存内容。
输出信号:
jtag_pin_TDO
:JTAG 数据输出信号,将数据返回给外部。reg_we_o
:寄存器写使能信号,表示是否进行寄存器写操作。reg_addr_o
:寄存器地址信号,用于指定目标寄存器的地址。reg_wdata_o
:寄存器写数据,写入寄存器的数据。mem_we_o
:内存写使能信号,表示是否进行内存写操作。mem_addr_o
:内存地址,指示要写入的内存位置。mem_wdata_o
:内存写数据,写入内存的数据。op_req_o
:操作请求信号,表示操作是否已请求。halt_req_o
:停止请求信号,用于发出停止信号。reset_req_o
:重置请求信号,发出重置信号。
主要子模块
1. jtag_driver
- 功能:处理来自 JTAG 端口的信号,尤其是 TDI (输入) 和 TDO (输出),同时负责 JTAG 协议的时序控制。
- 信号交互:
- 接收 TDI、TMS、TCK 信号,操作 JTAG 流程。
- 向 JTAG 数据管理模块(jtag_dm) 发送请求,进行调试或操作。
- 负责处理与
dtm_req_valid_o
和dtm_req_data_o
等相关的数据请求。
2. jtag_dm
- 功能:处理与内存和寄存器的交互。负责将来自 JTAG 的请求转换为实际的硬件操作。
- 信号交互:
- 接受来自 jtag_driver 模块的请求,处理内部数据访问。
- 负责将请求发送给寄存器、内存等设备,通过
mem_we_o
,reg_we_o
和相应的地址与数据控制信号。 - 根据 JTAG 流程,执行数据读取、写入,甚至发送操作请求。
模块工作流程
-
JTAG 设备初始化:
- 通过 JTAG 接口,向目标设备发送初始化信号。
S_IDLE
状态表示设备空闲,等待操作。
-
寄存器和内存读写:
- 在
jtag_dm
模块中,根据接收到的 JTAG 信号,执行对目标寄存器或内存的读取或写入。 - JTAG 信号处理过程中包括写入数据到寄存器和内存、读取并返回数据。
- 在
-
控制信号的请求:
halt_req_o
:发送停止操作请求,通常用于调试过程中暂停程序执行。reset_req_o
:发送重置请求,通常用于设备初始化或故障恢复。
总结
这个 JTAG 接口模块 的作用是通过 JTAG 协议 提供硬件调试和控制功能,可以对设备的寄存器、内存进行读写操作,并支持发出停止和重置请求。通常用于 嵌入式系统 或 调试平台 中,以帮助开发者进行硬件调试和验证。