JTAG Master 的简单用法

JTAG master简单的使用方法

Arth

         JTAGmaster是个简单好用的调试工具,一般的调试只需要几句简单的TCL语言就可以完成,复杂的也可以做成tcl脚本直接调用。

         这篇先介绍下一些简单的调试方法。

1.      JTAG Master IP添加

新建qsys工程后,可以从IP Catalog目录里面找到JTAG to Avalon Master Bridge,双击加入。如下图所示。


2.      加入后连接好该IP的时钟和复位信号,并将master端口连接到需要观察调试的slave上,并给slave分配一个固定地址,这里就直接用默认的地址了。如下图所示。

 

3.      generate并编译工程后将sof文件下载到fpga。

4.      从tools->SystemDebugging Tools里面打开SystemConsole,如下图所示

 

5.      打开后界面如下,我们在tclconsole中输入一些指令就可以操作我们的JTAG master了。


 

6.      输入指令说明

首先肯定是将我们的Tcl console和jtag master建立连接,先设置jtag master的path,注意关键字后要留有空格!

语法:set <service-path> [lindex[get_service_paths master] 0]

举例:set jd_path [lindex [get_service_paths master ] 0]

Tcl console里面打印出路径后就说明已经找到了我们在qsys中放入的的jtag master

然后open service master,用下面一条指令

语法:open_service master <service-path>

举例:open_service master$jd_path

这时候准备工作就算是完成了,我们就可以先用jtag_master_read/write之类的命令来读写slave的数据了。

比如我们想从0x0000上读取一个32位的数据,就可以用下面的一条指令

语法:master_read_32 <service-path><address> <size_in_multiples_of_32_bits>

举例:master_read_32$jd_path 0x0000 1 这就可以从jtagmaster对应的slave的0x0000地址读取一个数据了,当然数据的地址和读取的数量是可以根据自己的需求进行修改的。

 

 

写入一个32位的数据到指定地址的语法是类似的,

语法:master_write_32 <service-path><address> <list_of_32_bit_words>

举例:master_write_32$jd_path 0x0000 0x12345678 这就可以往jtag master对应的0x0000地址写入0x12345678这个数据了,写入后再回读,可以发现数据是正确的。当然,有些地址是只读的就无法写入了,这个和具体工程有关系。

用完后再close service就可以了

语法:close_service master <service-path>

举例:close_service master$jd_path

使用这些语法的时候,要注意关键字后面要留有空格。

以上介绍的只是冰山一角,欢迎有兴趣的同学一起学习。

其他常用的jtag-master语法如下,用法大同小异,稍微实验下就知道怎么用了。这里就不详细说明了。

Command

Arguments

Function

master_write_memory

<service-path>

<address>

<list_of_byte_values>

Writes the list of byte values, starting at the specified base address.

master_write_8

<service-path>

<address>

<list_of_byte_values>

Writes the list of byte values, starting at the specified base address, using 8-bit accesses.

master_write_16

<service-path>

<address>

<list_of_16_bit_words>

Writes the list of 16-bit values, starting at the specified base address, using 16-bit accesses.

master_write_from_file

<service-path>

<file-name>

<address>

Writes the entire contents of the file through the master, starting at the specified address. The file is treated as a binary file containing a stream of bytes.

master_write_32

<service-path>

<address>

<list_of_32_bit_words>

Writes the list of 32-bit values, starting at the specified base address, using 32-bit accesses.

master_read_memory

<service-path>

<address>

<size_in_bytes>

Returns a list of<size>bytes. Read from memory starts at the specified base address.

master_read_8

<service-path>

<address>

<size_in_bytes>

Returns a list of<size>bytes. Read from memory starts at the specified base address, using 8-bit accesses.

master_read_16

<service-path>

<address>

<size_in_multiples_of_16_bits>

Returns a list of<size> 16-bit values. Read from memory starts at the specified base address, using 16-bit accesses.

master_read_32

<service-path>

<address>

<size_in_multiples_of_32_bits>

Returns a list of<size> 32-bit values. Read from memory starts at the specified base address, using 32-bit accesses.

master_read_to_file

<service-path>

<file-name>

<address>

<count>

Reads the number of bytes specified by<count>from the memory address specified and creates (or overwrites) a file containing the values read. The file is written as a binary file.

master_get_register_names

<service-path>

When a register map is defined, returns a list of register names in the sla

 

 

当然,想把jtag master用的很熟练,就建议学习下TCL脚本了。

  • 10
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是一个简单JTAG (Joint Test Action Group) 结构的 Verilog 代码示例。这个 JTAG 结构包含了一个 Test Access Port (TAP) 和一个 Boundary Scan Register (BSR)。 ``` module jtag_top ( input tck, // Test Clock input rst_n, // Reset, active low input tms, // Test Mode Select input tdi, // Test Data In output tdo // Test Data Out ); // JTAG state machine states parameter IDLE = 2'b00; parameter SHIFT_DR = 2'b01; parameter SHIFT_IR = 2'b10; parameter RESET = 2'b11; // TAP state register reg [1:0] tap_state; // Boundary Scan Register (BSR) reg [7:0] bsr_data; wire [7:0] bsr_data_out; assign tdo = (tap_state == SHIFT_DR) ? bsr_data_out[7] : 1'bz; // TAP state machine always @(posedge tck or negedge rst_n) begin if (~rst_n) begin tap_state <= RESET; end else begin case (tap_state) IDLE: begin if (tms) begin tap_state <= RESET; end else begin tap_state <= SHIFT_IR; end end SHIFT_IR: begin if (tms) begin tap_state <= IDLE; end else begin // Shift IR data tap_state <= SHIFT_DR; end end SHIFT_DR: begin if (tms) begin // Update BSR data bsr_data <= {bsr_data[6:0], tdi}; tap_state <= IDLE; end else begin // Shift DR data tap_state <= SHIFT_DR; end end RESET: begin tap_state <= IDLE; end endcase end end // BSR data register always @(posedge tck or negedge rst_n) begin if (~rst_n) begin bsr_data <= 8'h00; end else begin case (tap_state) SHIFT_DR: begin bsr_data <= {bsr_data[6:0], tdi}; end endcase end end // BSR data output assign bsr_data_out = (tap_state == SHIFT_DR) ? bsr_data : 8'h00; endmodule ``` 这个 JTAG 结构包含了一个 Test Access Port (TAP) 和一个 Boundary Scan Register (BSR)。TAP 在不同的状态下可以执行不同的操作,包括读取和写入 BSR 数据。BSR 使用一个 8 位的寄存器来存储 Boundary Scan Chain 的数据,并且支持从 TDI 输入数据和从 TDO 输出数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值