fix samples ntt bugs & set PLL & optimize matmul
This commit is contained in:
@@ -423,6 +423,13 @@ module snix_axil_cdma_mux #(
|
||||
logic [7:0] ext_rd_word_addr_r;
|
||||
logic [3:0] ext_rd_ep_id_r;
|
||||
logic [3:0] ext_rd_ep_bank_r;
|
||||
logic ext_rd_queue_valid;
|
||||
logic ext_rd_queue_ar_sent;
|
||||
logic [ADDR_WIDTH-1:0] ext_rd_queue_addr;
|
||||
logic [31:0] ext_rd_queue_bytes;
|
||||
logic [7:0] ext_rd_queue_word_addr;
|
||||
logic [3:0] ext_rd_queue_ep_id;
|
||||
logic [3:0] ext_rd_queue_ep_bank;
|
||||
|
||||
logic [ADDR_WIDTH-1:0] ext_wr_addr_r;
|
||||
logic [31:0] ext_wr_bytes_left;
|
||||
@@ -434,7 +441,10 @@ module snix_axil_cdma_mux #(
|
||||
wire ext_wr_active = (ext_wr_state != EXT_WR_IDLE);
|
||||
wire ext_rd_accept = ext_rd_req_valid && ext_rd_req_ready;
|
||||
wire ext_wr_accept = ext_wr_req_valid && ext_wr_req_ready;
|
||||
wire ext_any_busy_or_req = ext_rd_active || ext_wr_active || ext_rd_req_valid || ext_wr_req_valid;
|
||||
wire ext_rd_prefetch_ar = (ext_rd_state == EXT_RD_READ) &&
|
||||
ext_rd_queue_valid && !ext_rd_queue_ar_sent;
|
||||
wire ext_any_busy_or_req = ext_rd_active || ext_rd_queue_valid || ext_wr_active ||
|
||||
ext_rd_req_valid || ext_wr_req_valid;
|
||||
wire use_ep_engine = ((state == RUN) && (engine_mode != MODE_MEM2MEM));
|
||||
|
||||
// Dynamic routing to the engine based on current active channel
|
||||
@@ -478,8 +488,12 @@ module snix_axil_cdma_mux #(
|
||||
assign mm2mm_bready = ext_wr_active ? (ext_wr_state == EXT_WR_BRESP) : (use_ep_engine ? ep_bready : core_bready);
|
||||
|
||||
assign mm2mm_arid = ext_rd_active ? '0 : (use_ep_engine ? ep_arid : core_arid);
|
||||
assign mm2mm_araddr = ext_rd_active ? ext_rd_addr_r : (use_ep_engine ? ep_araddr : core_araddr);
|
||||
assign mm2mm_arlen = ext_rd_active ? (((ext_rd_bytes_left[31:2] == 30'd0) ? 8'd1 : ext_rd_bytes_left[9:2]) - 8'd1) : (use_ep_engine ? ep_arlen : core_arlen);
|
||||
assign mm2mm_araddr = ext_rd_prefetch_ar ? ext_rd_queue_addr :
|
||||
(ext_rd_active ? ext_rd_addr_r : (use_ep_engine ? ep_araddr : core_araddr));
|
||||
assign mm2mm_arlen = ext_rd_prefetch_ar ?
|
||||
(((ext_rd_queue_bytes[31:2] == 30'd0) ? 8'd1 : ext_rd_queue_bytes[9:2]) - 8'd1) :
|
||||
(ext_rd_active ? (((ext_rd_bytes_left[31:2] == 30'd0) ? 8'd1 : ext_rd_bytes_left[9:2]) - 8'd1) :
|
||||
(use_ep_engine ? ep_arlen : core_arlen));
|
||||
assign mm2mm_arsize = ext_rd_active ? 3'd2 : (use_ep_engine ? ep_arsize : core_arsize);
|
||||
assign mm2mm_arburst = ext_rd_active ? 2'b01 : (use_ep_engine ? ep_arburst : core_arburst);
|
||||
assign mm2mm_arlock = ext_rd_active ? 1'b0 : (use_ep_engine ? ep_arlock : core_arlock);
|
||||
@@ -487,7 +501,8 @@ module snix_axil_cdma_mux #(
|
||||
assign mm2mm_arprot = ext_rd_active ? 3'b0 : (use_ep_engine ? ep_arprot : core_arprot);
|
||||
assign mm2mm_arqos = ext_rd_active ? 4'b0 : (use_ep_engine ? ep_arqos : core_arqos);
|
||||
assign mm2mm_aruser = ext_rd_active ? '0 : (use_ep_engine ? ep_aruser : core_aruser);
|
||||
assign mm2mm_arvalid = ext_rd_active ? (ext_rd_state == EXT_RD_AR) : (use_ep_engine ? ep_arvalid : core_arvalid);
|
||||
assign mm2mm_arvalid = ext_rd_active ? ((ext_rd_state == EXT_RD_AR) || ext_rd_prefetch_ar) :
|
||||
(use_ep_engine ? ep_arvalid : core_arvalid);
|
||||
assign mm2mm_rready = ext_rd_active ? ((ext_rd_state == EXT_RD_READ) && ep_wr_ready) : (use_ep_engine ? ep_rready : core_rready);
|
||||
|
||||
always_ff @(posedge clk) begin
|
||||
@@ -597,7 +612,10 @@ module snix_axil_cdma_mux #(
|
||||
// ==========================================
|
||||
// Generic external endpoint requester
|
||||
// ==========================================
|
||||
assign ext_rd_req_ready = (state == IDLE) && (ep_state == EP_IDLE) && !ext_rd_active;
|
||||
assign ext_rd_req_ready = (state == IDLE) && (ep_state == EP_IDLE) && !ext_wr_active &&
|
||||
((ext_rd_state == EXT_RD_IDLE) ||
|
||||
((ext_rd_state == EXT_RD_READ) && !ext_rd_queue_valid &&
|
||||
!ext_rd_done_fire));
|
||||
assign ext_wr_req_ready = (state == IDLE) && (ep_state == EP_IDLE) && !ext_wr_active;
|
||||
assign ext_rd_req_done = ext_rd_done_fire;
|
||||
assign ext_wr_req_done = ext_wr_done_fire;
|
||||
@@ -610,7 +628,17 @@ module snix_axil_cdma_mux #(
|
||||
ext_rd_word_addr_r <= '0;
|
||||
ext_rd_ep_id_r <= '0;
|
||||
ext_rd_ep_bank_r <= '0;
|
||||
ext_rd_queue_valid <= 1'b0;
|
||||
ext_rd_queue_ar_sent <= 1'b0;
|
||||
ext_rd_queue_addr <= '0;
|
||||
ext_rd_queue_bytes <= '0;
|
||||
ext_rd_queue_word_addr <= '0;
|
||||
ext_rd_queue_ep_id <= '0;
|
||||
ext_rd_queue_ep_bank <= '0;
|
||||
end else begin
|
||||
if (ext_rd_prefetch_ar && mm2mm_arvalid && mm2mm_arready)
|
||||
ext_rd_queue_ar_sent <= 1'b1;
|
||||
|
||||
case (ext_rd_state)
|
||||
EXT_RD_IDLE: begin
|
||||
if (ext_rd_accept) begin
|
||||
@@ -629,11 +657,37 @@ module snix_axil_cdma_mux #(
|
||||
end
|
||||
|
||||
EXT_RD_READ: begin
|
||||
if (ext_rd_accept) begin
|
||||
ext_rd_queue_valid <= 1'b1;
|
||||
ext_rd_queue_ar_sent <= 1'b0;
|
||||
ext_rd_queue_addr <= ext_rd_req_src;
|
||||
ext_rd_queue_bytes <= ext_rd_req_bytes;
|
||||
ext_rd_queue_word_addr <= ext_rd_req_ep_word_off;
|
||||
ext_rd_queue_ep_id <= ext_rd_req_ep_id;
|
||||
ext_rd_queue_ep_bank <= ext_rd_req_ep_bank;
|
||||
end
|
||||
|
||||
if (mm2mm_rvalid && mm2mm_rready) begin
|
||||
ext_rd_word_addr_r <= ext_rd_word_addr_r + 8'd1;
|
||||
ext_rd_bytes_left <= (ext_rd_bytes_left > 32'd4) ? (ext_rd_bytes_left - 32'd4) : 32'd0;
|
||||
if (mm2mm_rlast)
|
||||
ext_rd_state <= EXT_RD_IDLE;
|
||||
if (mm2mm_rlast) begin
|
||||
if (ext_rd_queue_valid) begin
|
||||
ext_rd_addr_r <= ext_rd_queue_addr;
|
||||
ext_rd_bytes_left <= ext_rd_queue_bytes;
|
||||
ext_rd_word_addr_r <= ext_rd_queue_word_addr;
|
||||
ext_rd_ep_id_r <= ext_rd_queue_ep_id;
|
||||
ext_rd_ep_bank_r <= ext_rd_queue_ep_bank;
|
||||
ext_rd_queue_valid <= 1'b0;
|
||||
ext_rd_queue_ar_sent <= 1'b0;
|
||||
if (ext_rd_queue_ar_sent ||
|
||||
(ext_rd_prefetch_ar && mm2mm_arvalid && mm2mm_arready))
|
||||
ext_rd_state <= EXT_RD_READ;
|
||||
else
|
||||
ext_rd_state <= EXT_RD_AR;
|
||||
end else begin
|
||||
ext_rd_state <= EXT_RD_IDLE;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user