parent
247a5b6354
commit
6d8015727e
|
@ -161,7 +161,7 @@ module jtag_dm #(
|
||||||
end
|
end
|
||||||
|
|
||||||
// we always ready to receive dmi request
|
// we always ready to receive dmi request
|
||||||
assign dm_ready_o = 1'b1;
|
assign dm_ready_o = ~sbbusy;
|
||||||
assign dm_valid_o = dm_valid_q;
|
assign dm_valid_o = dm_valid_q;
|
||||||
assign dm_data_o = {{DMI_ADDR_BITS{1'b0}}, dm_resp_data_q, 2'b00}; // response successfully
|
assign dm_data_o = {{DMI_ADDR_BITS{1'b0}}, dm_resp_data_q, 2'b00}; // response successfully
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,7 @@ module jtag_dtm #(
|
||||||
// from jtag_tap
|
// from jtag_tap
|
||||||
input wire tap_req_i,
|
input wire tap_req_i,
|
||||||
input wire [TAP_REQ_BITS-1:0] tap_data_i,
|
input wire [TAP_REQ_BITS-1:0] tap_data_i,
|
||||||
|
input wire dmireset_i,
|
||||||
|
|
||||||
// to jtag_tap
|
// to jtag_tap
|
||||||
output wire [DTM_RESP_BITS-1:0] data_o,
|
output wire [DTM_RESP_BITS-1:0] data_o,
|
||||||
|
@ -71,6 +72,7 @@ module jtag_dtm #(
|
||||||
reg[DTM_REQ_BITS-1:0] dtm_data_d;
|
reg[DTM_REQ_BITS-1:0] dtm_data_d;
|
||||||
reg[DTM_RESP_BITS-1:0] resp_tap_data_q;
|
reg[DTM_RESP_BITS-1:0] resp_tap_data_q;
|
||||||
reg is_busy;
|
reg is_busy;
|
||||||
|
reg stick_busy;
|
||||||
|
|
||||||
wire[DTM_RESP_BITS-1:0] busy_response;
|
wire[DTM_RESP_BITS-1:0] busy_response;
|
||||||
wire dtm_busy;
|
wire dtm_busy;
|
||||||
|
@ -90,11 +92,10 @@ module jtag_dtm #(
|
||||||
|
|
||||||
assign busy_response = {{(DMI_ADDR_BITS + DMI_DATA_BITS){1'b0}}, {(DMI_OP_BITS){1'b1}}}; // op = 2'b11
|
assign busy_response = {{(DMI_ADDR_BITS + DMI_DATA_BITS){1'b0}}, {(DMI_OP_BITS){1'b1}}}; // op = 2'b11
|
||||||
|
|
||||||
assign dmistat = is_busy ? 2'b11 : 2'b00;
|
assign dmistat = (stick_busy | is_busy) ? 2'b11 : 2'b00;
|
||||||
|
|
||||||
assign op = tap_data_i[DMI_OP_BITS-1:0];
|
assign op = tap_data_i[DMI_OP_BITS-1:0];
|
||||||
|
|
||||||
|
|
||||||
always @ (*) begin
|
always @ (*) begin
|
||||||
state_d = state_q;
|
state_d = state_q;
|
||||||
dtm_valid = 1'b0;
|
dtm_valid = 1'b0;
|
||||||
|
@ -169,19 +170,22 @@ module jtag_dtm #(
|
||||||
|
|
||||||
always @ (posedge jtag_tck_i or negedge jtag_trst_ni) begin
|
always @ (posedge jtag_tck_i or negedge jtag_trst_ni) begin
|
||||||
if (!jtag_trst_ni) begin
|
if (!jtag_trst_ni) begin
|
||||||
resp_tap_data_q <= {DTM_RESP_BITS{1'b0}};
|
|
||||||
is_busy <= 1'b0;
|
is_busy <= 1'b0;
|
||||||
|
stick_busy <= 1'b0;
|
||||||
end else begin
|
end else begin
|
||||||
|
if (dmireset_i) begin
|
||||||
|
stick_busy <= 1'b0;
|
||||||
|
end else if ((state_q != S_IDLE) && tap_req_i) begin
|
||||||
|
stick_busy <= 1'b1;
|
||||||
|
end
|
||||||
if (state_q != S_IDLE) begin
|
if (state_q != S_IDLE) begin
|
||||||
resp_tap_data_q <= busy_response;
|
|
||||||
is_busy <= 1'b1;
|
is_busy <= 1'b1;
|
||||||
end else begin
|
end else begin
|
||||||
resp_tap_data_q <= dtm_data_q;
|
|
||||||
is_busy <= 1'b0;
|
is_busy <= 1'b0;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
assign data_o = resp_tap_data_q;
|
assign data_o = (stick_busy | is_busy) ? busy_response : dtm_data_q;
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
|
@ -165,7 +165,7 @@ module jtag_sba(
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
default:;
|
default: state_d = S_IDLE;
|
||||||
endcase
|
endcase
|
||||||
|
|
||||||
if ((sbaccess_i > 3'h2) & (state_q != S_IDLE)) begin
|
if ((sbaccess_i > 3'h2) & (state_q != S_IDLE)) begin
|
||||||
|
@ -181,7 +181,8 @@ module jtag_sba(
|
||||||
assign master_addr_o = master_addr;
|
assign master_addr_o = master_addr;
|
||||||
assign master_wdata_o = master_wdata;
|
assign master_wdata_o = master_wdata;
|
||||||
|
|
||||||
assign sbdata_valid_o = master_rvalid_i;
|
assign sbdata_valid_o = master_rvalid_i &
|
||||||
|
((state_q == S_WAIT_READ) || (state_q == S_WAIT_WRITE));
|
||||||
assign sbdata_o = master_rdata_i;
|
assign sbdata_o = master_rdata_i;
|
||||||
assign sberror_o = sberror;
|
assign sberror_o = sberror;
|
||||||
assign sbaddress_o = sbaddress;
|
assign sbaddress_o = sbaddress;
|
||||||
|
|
|
@ -32,6 +32,7 @@ module jtag_tap #(
|
||||||
|
|
||||||
output wire tap_req_o,
|
output wire tap_req_o,
|
||||||
output wire[TAP_REQ_BITS-1:0] tap_data_o,
|
output wire[TAP_REQ_BITS-1:0] tap_data_o,
|
||||||
|
output wire dmireset_o,
|
||||||
|
|
||||||
input wire[DTM_RESP_BITS-1:0] dtm_data_i,
|
input wire[DTM_RESP_BITS-1:0] dtm_data_i,
|
||||||
input wire[31:0] idcode_i,
|
input wire[31:0] idcode_i,
|
||||||
|
@ -172,4 +173,20 @@ module jtag_tap #(
|
||||||
|
|
||||||
assign jtag_tdo_o = jtag_tdo_q;
|
assign jtag_tdo_o = jtag_tdo_q;
|
||||||
|
|
||||||
|
reg dmireset_q;
|
||||||
|
|
||||||
|
always @ (posedge jtag_tck_i or negedge jtag_trst_ni) begin
|
||||||
|
if (!jtag_trst_ni) begin
|
||||||
|
dmireset_q <= 1'b0;
|
||||||
|
end else begin
|
||||||
|
if ((tap_state == UPDATE_DR) && (ir_reg == REG_DTMCS)) begin
|
||||||
|
dmireset_q <= shift_reg[16];
|
||||||
|
end else begin
|
||||||
|
dmireset_q <= 1'b0;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
assign dmireset_o = dmireset_q;
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
|
@ -124,6 +124,7 @@ module jtag_top(
|
||||||
wire [DMI_DATA_WIDTH-1:0] dtm_to_tap_data;
|
wire [DMI_DATA_WIDTH-1:0] dtm_to_tap_data;
|
||||||
wire [31:0] idcode;
|
wire [31:0] idcode;
|
||||||
wire [31:0] dtmcs;
|
wire [31:0] dtmcs;
|
||||||
|
wire dmireset;
|
||||||
|
|
||||||
jtag_dtm #(
|
jtag_dtm #(
|
||||||
|
|
||||||
|
@ -138,6 +139,7 @@ module jtag_top(
|
||||||
.dtm_ready_o (dtm_to_dmi_ready),
|
.dtm_ready_o (dtm_to_dmi_ready),
|
||||||
.tap_req_i (tap_to_dtm_req),
|
.tap_req_i (tap_to_dtm_req),
|
||||||
.tap_data_i (tap_to_dtm_data),
|
.tap_data_i (tap_to_dtm_data),
|
||||||
|
.dmireset_i (dmireset),
|
||||||
.data_o (dtm_to_tap_data),
|
.data_o (dtm_to_tap_data),
|
||||||
.idcode_o (idcode),
|
.idcode_o (idcode),
|
||||||
.dtmcs_o (dtmcs)
|
.dtmcs_o (dtmcs)
|
||||||
|
@ -153,6 +155,7 @@ module jtag_top(
|
||||||
.jtag_tdo_o (jtag_tdo_o),
|
.jtag_tdo_o (jtag_tdo_o),
|
||||||
.tap_req_o (tap_to_dtm_req),
|
.tap_req_o (tap_to_dtm_req),
|
||||||
.tap_data_o (tap_to_dtm_data),
|
.tap_data_o (tap_to_dtm_data),
|
||||||
|
.dmireset_o (dmireset),
|
||||||
.dtm_data_i (dtm_to_tap_data),
|
.dtm_data_i (dtm_to_tap_data),
|
||||||
.idcode_i (idcode),
|
.idcode_i (idcode),
|
||||||
.dtmcs_i (dtmcs)
|
.dtmcs_i (dtmcs)
|
||||||
|
|
Loading…
Reference in New Issue