blob: c1145793c1d5954f9ce5adffc9b77464685498bf [file] [log] [blame]
From 9f3f5b220d1e3978e83dc4ff611bd6f9e6d8a9e2 Mon Sep 17 00:00:00 2001
From: Philipp Wagner <phw@lowrisc.org>
Date: Fri, 22 Feb 2019 14:48:46 +0000
Subject: [PATCH] Use lowrisc instead of PULP primitives
---
src/dm_csrs.sv | 33 +++++++++-----------------
src/dmi_cdc.sv | 57 ++++++++++++++++++++++++++++-----------------
src/dmi_jtag_tap.sv | 25 +++++++++++---------
3 files changed, 60 insertions(+), 55 deletions(-)
diff --git a/src/dm_csrs.sv b/src/dm_csrs.sv
index f23ea9d..13fd1e0 100644
--- a/src/dm_csrs.sv
+++ b/src/dm_csrs.sv
@@ -83,10 +83,6 @@ module dm_csrs #(
dm::dtm_op_e dtm_op;
assign dtm_op = dm::dtm_op_e'(dmi_req_i.op);
- logic resp_queue_full;
- logic resp_queue_empty;
- logic resp_queue_push;
- logic resp_queue_pop;
logic [31:0] resp_queue_data;
localparam dm::dm_csr_e DataEnd = dm::dm_csr_e'((dm::Data0 + {4'b0, dm::DataCount}));
@@ -158,9 +154,6 @@ module dm_csrs #(
// a successful response returns zero
assign dmi_resp_o.resp = dm::DTM_SUCCESS;
- assign dmi_resp_valid_o = ~resp_queue_empty;
- assign dmi_req_ready_o = ~resp_queue_full;
- assign resp_queue_push = dmi_req_valid_i & dmi_req_ready_o;
// SBA
assign sbautoincrement_o = sbcs_q.sbautoincrement;
assign sbreadonaddr_o = sbcs_q.sbreadonaddr;
@@ -499,27 +492,23 @@ module dm_csrs #(
assign progbuf_o = progbuf_q;
assign data_o = data_q;
- assign resp_queue_pop = dmi_resp_ready_i & ~resp_queue_empty;
-
assign ndmreset_o = dmcontrol_q.ndmreset;
// response FIFO
- fifo_v2 #(
- .dtype ( logic [31:0] ),
- .DEPTH ( 2 )
+ prim_fifo_sync #(
+ .Width (32),
+ .Pass (1'b0),
+ .Depth (2)
) i_fifo (
.clk_i ( clk_i ),
.rst_ni ( dmi_rst_ni ), // reset only when system is re-set
- .flush_i ( 1'b0 ), // we do not need to flush this queue
- .testmode_i ( testmode_i ),
- .full_o ( resp_queue_full ),
- .empty_o ( resp_queue_empty ),
- .alm_full_o ( ),
- .alm_empty_o ( ),
- .data_i ( resp_queue_data ),
- .push_i ( resp_queue_push ),
- .data_o ( dmi_resp_o.data ),
- .pop_i ( resp_queue_pop )
+ .wdata ( resp_queue_data ),
+ .wvalid ( dmi_req_valid_i ),
+ .wready ( dmi_req_ready_o ),
+ .rdata ( dmi_resp_o.data ),
+ .rvalid ( dmi_resp_valid_o ),
+ .rready ( dmi_resp_ready_i ),
+ .depth ( ) // Doesn't use
);
always_ff @(posedge clk_i or negedge rst_ni) begin
diff --git a/src/dmi_cdc.sv b/src/dmi_cdc.sv
index 98b15a8..a6041c7 100644
--- a/src/dmi_cdc.sv
+++ b/src/dmi_cdc.sv
@@ -42,31 +42,44 @@ module dmi_cdc (
input logic core_dmi_valid_i
);
- cdc_2phase #(.T(dm::dmi_req_t)) i_cdc_req (
- .src_rst_ni ( trst_ni ),
- .src_clk_i ( tck_i ),
- .src_data_i ( jtag_dmi_req_i ),
- .src_valid_i ( jtag_dmi_valid_i ),
- .src_ready_o ( jtag_dmi_ready_o ),
+ // TODO: Make it clean for synthesis.
- .dst_rst_ni ( rst_ni ),
- .dst_clk_i ( clk_i ),
- .dst_data_o ( core_dmi_req_o ),
- .dst_valid_o ( core_dmi_valid_o ),
- .dst_ready_i ( core_dmi_ready_i )
+ prim_fifo_async #(
+ .Width( $bits(dm::dmi_req_t) ),
+ .Depth( 4 )
+ ) i_cdc_req (
+ .clk_wr_i ( tck_i ),
+ .rst_wr_ni ( trst_ni ),
+ .wvalid ( jtag_dmi_valid_i ),
+ .wready ( jtag_dmi_ready_o ), // wrclk
+ .wdata ( jtag_dmi_req_i ),
+ .wdepth ( ),
+
+ .clk_rd_i ( clk_i ),
+ .rst_rd_ni ( rst_ni ),
+ .rvalid ( core_dmi_valid_o ),
+ .rready ( core_dmi_ready_i ),
+ .rdata ( core_dmi_req_o ),
+ .rdepth ( )
);
- cdc_2phase #(.T(dm::dmi_resp_t)) i_cdc_resp (
- .src_rst_ni ( rst_ni ),
- .src_clk_i ( clk_i ),
- .src_data_i ( core_dmi_resp_i ),
- .src_valid_i ( core_dmi_valid_i ),
- .src_ready_o ( core_dmi_ready_o ),
+ prim_fifo_async #(
+ .Width( $bits(dm::dmi_resp_t) ),
+ .Depth( 4 )
+ ) i_cdc_resp (
+ .clk_wr_i ( clk_i ),
+ .rst_wr_ni ( rst_ni ),
+ .wvalid ( core_dmi_valid_i ),
+ .wready ( core_dmi_ready_o ), // wrclk
+ .wdata ( core_dmi_resp_i ),
+ .wdepth ( ),
- .dst_rst_ni ( trst_ni ),
- .dst_clk_i ( tck_i ),
- .dst_data_o ( jtag_dmi_resp_o ),
- .dst_valid_o ( jtag_dmi_valid_o ),
- .dst_ready_i ( jtag_dmi_ready_i )
+ .clk_rd_i ( tck_i ),
+ .rst_rd_ni ( trst_ni ),
+ .rvalid ( jtag_dmi_valid_o ),
+ .rready ( jtag_dmi_ready_i ),
+ .rdata ( jtag_dmi_resp_o ),
+ .rdepth ( )
);
+
endmodule
diff --git a/src/dmi_jtag_tap.sv b/src/dmi_jtag_tap.sv
index cab01ca..6040e64 100644
--- a/src/dmi_jtag_tap.sv
+++ b/src/dmi_jtag_tap.sv
@@ -212,17 +212,20 @@ module dmi_jtag_tap #(
// DFT
logic tck_n, tck_ni;
- cluster_clock_inverter i_tck_inv (
- .clk_i ( tck_i ),
- .clk_o ( tck_ni )
- );
-
- pulp_clock_mux2 i_dft_tck_mux (
- .clk0_i ( tck_ni ),
- .clk1_i ( tck_i ), // bypass the inverted clock for testing
- .clk_sel_i ( testmode_i ),
- .clk_o ( tck_n )
- );
+ //cluster_clock_inverter i_tck_inv (
+ // .clk_i ( tck_i ),
+ // .clk_o ( tck_ni )
+ //);
+ assign tck_ni = ~tck_i;
+
+ assign tck_n = (testmode_i) ? tck_i : tck_ni;
+ // TODO: Implements process specific clock mux
+ //clock_mux2 i_dft_tck_mux (
+ // .clk0_i ( tck_ni ),
+ // .clk1_i ( tck_i ), // bypass the inverted clock for testing
+ // .clk_sel_i ( testmode_i ),
+ // .clk_o ( tck_n )
+ //);
// TDO changes state at negative edge of TCK
always_ff @(posedge tck_n, negedge trst_ni) begin
--
2.22.1