OpenCores
URL https://opencores.org/ocsvn/yifive/yifive/trunk

Subversion Repositories yifive

[/] [yifive/] [trunk/] [caravel_yifive/] [verilog/] [rtl/] [syntacore/] [scr1/] [src/] [top/] [scr1_dmem_wb.sv] - Diff between revs 20 and 21

Show entire file | Details | Blame | View Log

Rev 20 Rev 21
Line 15... Line 15...
////      - Dinesh Annayya, dinesha@opencores.org                 ////
////      - Dinesh Annayya, dinesha@opencores.org                 ////
////                                                              ////
////                                                              ////
////  Revision :                                                  ////
////  Revision :                                                  ////
////     v0:    June 7, 2021, Dinesh A                            ////
////     v0:    June 7, 2021, Dinesh A                            ////
////             wishbone integration                             ////
////             wishbone integration                             ////
 
////     v1:    June 9, 2021, Dinesh A                            ////
 
////              On power up, wishbone output are unkown as it   ////
 
////              driven from fifo output. To avoid unknown       ////
 
////              propgation, we are driving 'h0 when fifo empty  ////
////                                                              ////
////                                                              ////
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
////                                                              ////
////                                                              ////
//// Copyright (C) 2000 Authors and OPENCORES.ORG                 ////
//// Copyright (C) 2000 Authors and OPENCORES.ORG                 ////
////                                                              ////
////                                                              ////
Line 60... Line 64...
    input   logic                           clk,
    input   logic                           clk,
 
 
    // Core Interface
    // Core Interface
    output  logic                           dmem_req_ack,
    output  logic                           dmem_req_ack,
    input   logic                           dmem_req,
    input   logic                           dmem_req,
    input   type_scr1_mem_cmd_e             dmem_cmd,
    input   logic                           dmem_cmd,
    input   type_scr1_mem_width_e           dmem_width,
    input   logic [1:0]                     dmem_width,
    input   logic   [SCR1_WB_WIDTH-1:0]     dmem_addr,
    input   logic   [SCR1_WB_WIDTH-1:0]     dmem_addr,
    input   logic   [SCR1_WB_WIDTH-1:0]     dmem_wdata,
    input   logic   [SCR1_WB_WIDTH-1:0]     dmem_wdata,
    output  logic   [SCR1_WB_WIDTH-1:0]     dmem_rdata,
    output  logic   [SCR1_WB_WIDTH-1:0]     dmem_rdata,
    output  type_scr1_mem_resp_e            dmem_resp,
    output  logic [1:0]                     dmem_resp,
 
 
    // WB Interface
    // WB Interface
    output  logic                           wbd_stb_o, // strobe/request
    output  logic                           wbd_stb_o, // strobe/request
    output  logic   [SCR1_WB_WIDTH-1:0]     wbd_adr_o, // address
    output  logic   [SCR1_WB_WIDTH-1:0]     wbd_adr_o, // address
    output  logic                           wbd_we_o,  // write
    output  logic                           wbd_we_o,  // write
Line 104... Line 108...
    logic   [SCR1_WB_WIDTH-1:0]     haddr;
    logic   [SCR1_WB_WIDTH-1:0]     haddr;
    logic   [SCR1_WB_WIDTH-1:0]     hwdata;
    logic   [SCR1_WB_WIDTH-1:0]     hwdata;
} type_scr1_req_fifo_s;
} type_scr1_req_fifo_s;
 
 
typedef struct packed {
typedef struct packed {
    logic                           hwrite;
 
    logic   [2:0]                   hwidth;
    logic   [2:0]                   hwidth;
    logic   [1:0]                   haddr;
    logic   [1:0]                   haddr;
} type_scr1_data_fifo_s;
} type_scr1_data_fifo_s;
 
 
typedef struct packed {
typedef struct packed {
Line 120... Line 123...
 
 
//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
// Local functions
// Local functions
//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
function automatic logic   [2:0] scr1_conv_mem2wb_width (
function automatic logic   [2:0] scr1_conv_mem2wb_width (
    input   type_scr1_mem_width_e    dmem_width
    input   logic [1:0]              dmem_width
);
);
    logic   [2:0]   tmp;
    logic   [2:0]   tmp;
begin
begin
    case (dmem_width)
    case (dmem_width)
        SCR1_MEM_WIDTH_BYTE : begin
        SCR1_MEM_WIDTH_BYTE : begin
Line 144... Line 147...
end
end
endfunction
endfunction
 
 
function automatic logic[SCR1_WB_WIDTH-1:0] scr1_conv_mem2wb_wdata (
function automatic logic[SCR1_WB_WIDTH-1:0] scr1_conv_mem2wb_wdata (
    input   logic   [1:0]                   dmem_addr,
    input   logic   [1:0]                   dmem_addr,
    input   type_scr1_mem_width_e           dmem_width,
    input   logic [1:0]                     dmem_width,
    input   logic   [SCR1_WB_WIDTH-1:0]    dmem_wdata
    input   logic   [SCR1_WB_WIDTH-1:0]    dmem_wdata
);
);
    logic   [SCR1_WB_WIDTH-1:0]  tmp;
    logic   [SCR1_WB_WIDTH-1:0]  tmp;
begin
begin
    tmp = 'x;
    tmp = 'x;
Line 257... Line 260...
// Interface to Core
// Interface to Core
//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
assign dmem_req_ack = ~req_fifo_full;
assign dmem_req_ack = ~req_fifo_full;
assign req_fifo_wr  = ~req_fifo_full & dmem_req;
assign req_fifo_wr  = ~req_fifo_full & dmem_req;
 
 
assign dmem_rdata = scr1_conv_wb2mem_rdata(resp_fifo.hwidth, resp_fifo.haddr, resp_fifo.hrdata);
assign dmem_rdata = (resp_fifo_hready) ? scr1_conv_wb2mem_rdata(resp_fifo.hwidth, resp_fifo.haddr, resp_fifo.hrdata) : 'h0;
 
 
assign dmem_resp = (resp_fifo_hready)
assign dmem_resp = (resp_fifo_hready)
                    ? (resp_fifo.hresp == 1'b1)
                    ? (resp_fifo.hresp == 1'b1)
                        ? SCR1_MEM_RESP_RDY_OK
                        ? SCR1_MEM_RESP_RDY_OK
                        : SCR1_MEM_RESP_RDY_ER
                        : SCR1_MEM_RESP_RDY_ER
Line 427... Line 430...
end
end
 
 
always_ff @(posedge clk) begin
always_ff @(posedge clk) begin
    if (wbd_ack_i) begin
    if (wbd_ack_i) begin
        resp_fifo.hresp  <= (wbd_err_i) ? 1'b0 : 1'b1;
        resp_fifo.hresp  <= (wbd_err_i) ? 1'b0 : 1'b1;
        resp_fifo.hwidth <= data_fifo.hwidth;
        resp_fifo.hwidth <= hwidth_out;
        resp_fifo.haddr  <= data_fifo.haddr;
        resp_fifo.haddr  <= haddr_out[1:0];
        resp_fifo.hrdata <= wbd_dat_i;
        resp_fifo.hrdata <= (wbd_we_o) ? 'h0: wbd_dat_i;
    end
    end
end
end
 
 
 
 
assign wbd_stb_o    = ~req_fifo_empty;
assign wbd_stb_o    = ~req_fifo_empty;
assign wbd_adr_o    = haddr_out;
 
assign wbd_we_o     = hwrite_out;
// To avoid unknown progating the design, driven zero when fifo is empty
assign wbd_dat_o    = hwdata_out;
assign wbd_adr_o    = (req_fifo_empty) ? 'h0 : haddr_out;
assign wbd_sel_o    = hbel_out;
assign wbd_we_o     = (req_fifo_empty) ? 'h0 : hwrite_out;
 
assign wbd_dat_o    = (req_fifo_empty) ? 'h0 : hwdata_out;
 
assign wbd_sel_o    = (req_fifo_empty) ? 'h0 : hbel_out;
 
 
`endif // SCR1_DMEM_WB_IN_BP
`endif // SCR1_DMEM_WB_IN_BP
 
 
 
 
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.