Writing /share/Web/wiki/data/cache/4/4faf7333f7798b9c45b3b94226dd71a2.metadata failed
协议学习:arm_dap
差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
| 协议学习:arm_dap [2023/12/01 14:15] – [2. DPACC & APACC TDR] admin | 协议学习:arm_dap [2024/12/12 17:41] (当前版本) – [5. verilog example code] user01 | ||
|---|---|---|---|
| 行 12: | 行 12: | ||
| - | {{: | + | {{: |
| ===== - JTAG DP IR command | ===== - JTAG DP IR command | ||
| - | {{: | + | {{: |
| 行 24: | 行 24: | ||
| ===== - DPACC & APACC TDR ===== | ===== - DPACC & APACC TDR ===== | ||
| - | 通过DPACC TDR去访问DP | + | 通过DPACC TDR去访问DP register,通过APACC TDR去访问AP register \\ |
| + | 其定义如下: | ||
| TDR length为35bit, | TDR length为35bit, | ||
| TDI输入数据格式定义如下: | TDI输入数据格式定义如下: | ||
| - | * bit[34: | + | * bit[34: |
| * bit[2: | * bit[2: | ||
| * bit[0] 表示读(1)或者写操作(0) | * bit[0] 表示读(1)或者写操作(0) | ||
| TDO输出数据格式定义如下: | TDO输出数据格式定义如下: | ||
| - | * bit[34: | + | * bit[34: |
| - | * bit[2: | + | * bit[2: |
| - | {{: | + | {{: |
| - | {{: | + | {{: |
| 在操作APACC时,会发起对应的AP操作,一般分为AP写和AP读操作,以下是AP读需要注意的地方。 | 在操作APACC时,会发起对应的AP操作,一般分为AP写和AP读操作,以下是AP读需要注意的地方。 | ||
| 如果是AP读的话,需要再读一次TDR,但是如果IR还是指定为APACC的话,就会再触发一次AP操作,所以此时可以临时用IR切换为DPACC,这样读结果不会重新AP操作。 | 如果是AP读的话,需要再读一次TDR,但是如果IR还是指定为APACC的话,就会再触发一次AP操作,所以此时可以临时用IR切换为DPACC,这样读结果不会重新AP操作。 | ||
| + | |||
| + | 通过DP.RDBUFF将AP读数据取出。\\ | ||
| + | {{: | ||
| ===== - DP register summary ===== | ===== - DP register summary ===== | ||
| - | {{: | + | {{: |
| + | |||
| + | SELECT:\\ | ||
| + | {{: | ||
| 行 113: | 行 120: | ||
| repeat(len-1) begin | repeat(len-1) begin | ||
| tck_cycle(1' | tck_cycle(1' | ||
| - | shift_ret[i] = sample_tdo; | + | shift_ret[i] = sample_tdo; i = i+1; |
| - | | + | |
| end | end | ||
| tck_cycle(1' | tck_cycle(1' | ||
| + | shift_ret[i] = sample_tdo; i = i+1; | ||
| tck_cycle(1' | tck_cycle(1' | ||
| tck_cycle(1' | tck_cycle(1' | ||
| 行 136: | 行 143: | ||
| repeat(len-1) begin | repeat(len-1) begin | ||
| tck_cycle(1' | tck_cycle(1' | ||
| - | shift_ret[i] = sample_tdo; | + | shift_ret[i] = sample_tdo; i = i+1; |
| - | | + | |
| end | end | ||
| tck_cycle(1' | tck_cycle(1' | ||
| + | shift_ret[i] = sample_tdo; i = i+1; | ||
| tck_cycle(1' | tck_cycle(1' | ||
| tck_cycle(1' | tck_cycle(1' | ||
| 行 152: | 行 159: | ||
| input [7:0] ap_addr; | input [7:0] ap_addr; | ||
| input | input | ||
| + | |||
| + | reg [7:0] ap_sel; | ||
| begin | begin | ||
| 行 159: | 行 168: | ||
| #1000; | #1000; | ||
| // | // | ||
| - | shift_dr(35, | + | |
| + | | ||
| #1000; | #1000; | ||
| 行 182: | 行 192: | ||
| input [7:0] ap_addr; | input [7:0] ap_addr; | ||
| input | input | ||
| + | |||
| + | reg [7:0] ap_sel; | ||
| begin | begin | ||
| 行 189: | 行 201: | ||
| #1000; | #1000; | ||
| // | // | ||
| - | shift_dr(35, | + | |
| + | | ||
| #1000; | #1000; | ||
| 行 261: | 行 274: | ||
| end | end | ||
| - | task ahb_read; | ||
| - | input [31:0] ahb_addr; | ||
| - | reg [31:0] ahb_data; | ||
| - | begin | ||
| - | // // idcode | ||
| - | // shift_ir(4, 4'he); | ||
| - | // #1000; | ||
| - | // shift_dr(32, | ||
| - | // #1000; | ||
| - | ahbap_write(8' | ||
| - | ahbap_read(8' | ||
| - | ahb_data = shift_ret[34: | ||
| - | $display(" | ||
| - | end | ||
| - | endtask | ||
| endmodule | endmodule | ||
协议学习/arm_dap.1701411359.txt.gz · 最后更改: 2023/12/01 14:15 由 admin