用户工具

站点工具


协议学习: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:
  
  
-{{:协议学习:pasted:20231106-152200.png}}+{{:协议学习:pasted:20231106-152200.png?nolink}}
  
 ===== - JTAG DP IR command  ===== ===== - JTAG DP IR command  =====
  
-{{:协议学习:pasted:20231106-151642.png}}+{{:协议学习:pasted:20231106-151642.png?nolink}}
  
  
行 24: 行 24:
  
 ===== - DPACC & APACC TDR ===== ===== - DPACC & APACC TDR =====
-通过DPACC TDR去访问DP & AP register, 其定义如下:+通过DPACC TDR去访问DP register,通过APACC TDR去访问AP register \\ 
 +其定义如下:
  
 TDR length为35bit, 低bit数据先传。 TDR length为35bit, 低bit数据先传。
  
 TDI输入数据格式定义如下: TDI输入数据格式定义如下:
-  * bit[34:3]传32bit数据,+  * bit[34:3]传32bit数据,
   * bit[2:1]传DP或AP的地址A[3:2]   * bit[2:1]传DP或AP的地址A[3:2]
   * bit[0] 表示读(1)或者写操作(0)   * bit[0] 表示读(1)或者写操作(0)
  
 TDO输出数据格式定义如下: TDO输出数据格式定义如下:
-  * bit[34:3]传32bit数据, +  * bit[34:3]传32bit读结果数据, 
-  * bit[2:0]表示响应ACK, 0b010 - OK/FAULT, 0b001 - WAIT+  * bit[2:0]表示响应ACK, 0b010 - OK/FAULT, 0b001 - WAIT
  
-{{:协议学习:pasted:20231201-135644.png}}+{{:协议学习:pasted:20231201-135644.png?nolink}}
  
  
-{{:协议学习:pasted:20231106-151724.png}}+{{:协议学习:pasted:20231106-151724.png?nolink}}
  
 在操作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读数据取出。\\
 +{{:协议学习:pasted:20241212-090848.png?nolink}}
  
  
 ===== - DP register summary ===== ===== - DP register summary =====
  
-{{:协议学习:pasted:20231201-135514.png}}+{{:协议学习:pasted:20231201-135514.png?nolink}} 
 + 
 +SELECT:\\ 
 +{{:协议学习:pasted:20241212-102752.png?nolink}}
  
  
行 113: 行 120:
         repeat(len-1) begin         repeat(len-1) begin
             tck_cycle(1'b0, data[i]);             tck_cycle(1'b0, data[i]);
-            shift_ret[i] = sample_tdo; +            shift_ret[i] = sample_tdo; i = i+1;
-            i = i+1;+
         end         end
         tck_cycle(1'b1, data[i]);         tck_cycle(1'b1, data[i]);
 +            shift_ret[i] = sample_tdo; i = i+1;
         tck_cycle(1'b1, 1'b0);         tck_cycle(1'b1, 1'b0);
         tck_cycle(1'b0, 1'b0); // rti         tck_cycle(1'b0, 1'b0); // rti
行 136: 行 143:
         repeat(len-1) begin         repeat(len-1) begin
             tck_cycle(1'b0, data[i]);             tck_cycle(1'b0, data[i]);
-            shift_ret[i] = sample_tdo; +            shift_ret[i] = sample_tdo; i = i+1;
-            i = i+1;+
         end         end
         tck_cycle(1'b1, data[i]);         tck_cycle(1'b1, data[i]);
 +            shift_ret[i] = sample_tdo; i = i+1;
         tck_cycle(1'b1, 1'b0);         tck_cycle(1'b1, 1'b0);
         tck_cycle(1'b0, 1'b0); // rti         tck_cycle(1'b0, 1'b0); // rti
行 152: 行 159:
     input   [7:0] ap_addr;     input   [7:0] ap_addr;
     input   [31:0] ap_data;     input   [31:0] ap_data;
 +
 +    reg     [7:0] ap_sel;
  
     begin     begin
行 159: 行 168:
     #1000;     #1000;
     //shift_dr(35, 35'h0); // 32b data, 2b A[3:2] (1:ctrl, 2:ap-sel, 3:read-buffer), 1b RnW (0:write)     //shift_dr(35, 35'h0); // 32b data, 2b A[3:2] (1:ctrl, 2:ap-sel, 3:read-buffer), 1b RnW (0:write)
-    shift_dr(35, {{8'h02,16'h0, ap_addr[7:4],4'h0} , 2'h2, 1'b0}); // ap_sel = select ahb-ap   (31:24 ap_sel, 7:4 ap_banksel)+    ap_sel = 8'h0; 
 +    shift_dr(35, {{ap_sel,16'h0, ap_addr[7:4],4'h0} , 2'h2, 1'b0}); // ap_sel = select ahb-ap   (31:24 ap_sel, 7:4 ap_banksel)
     #1000;     #1000;
  
行 182: 行 192:
     input   [7:0] ap_addr;     input   [7:0] ap_addr;
     input   [31:0] ap_data;     input   [31:0] ap_data;
 +
 +    reg     [7:0] ap_sel;
  
     begin     begin
行 189: 行 201:
     #1000;     #1000;
     //shift_dr(35, 35'h0); // 32b data, 2b A[3:2] (1:ctrl, 2:ap-sel, 3:read-buffer), 1b RnW (0:write)     //shift_dr(35, 35'h0); // 32b data, 2b A[3:2] (1:ctrl, 2:ap-sel, 3:read-buffer), 1b RnW (0:write)
-    shift_dr(35, {{8'h02,16'h0, ap_addr[7:4],4'h0} , 2'h2, 1'b0}); // ap_sel = select ahb-ap   (31:24 ap_sel, 7:4 ap_banksel)+    ap_sel = 8'h0; 
 +    shift_dr(35, {{ap_sel,16'h0, ap_addr[7:4],4'h0} , 2'h2, 1'b0}); // ap_sel = select ahb-ap   (31:24 ap_sel, 7:4 ap_banksel)
     #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, 32'h0); 
-    //    #1000; 
-        ahbap_write(8'h4, ahb_addr); 
-        ahbap_read(8'hc, 32'h0); 
-        ahb_data = shift_ret[34:3]; 
-        $display("ahb_read ret = %8h", ahb_data); 
-    end 
-endtask 
  
 endmodule endmodule
协议学习/arm_dap.1701411359.txt.gz · 最后更改: 2023/12/01 14:15 由 admin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki