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

Subversion Repositories turbo8051

[/] [turbo8051/] [trunk/] [rtl/] [lib/] [wb_wr_mem2mem.v] - Diff between revs 24 and 50

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 24 Rev 50
Line 56... Line 56...
              mem_addr            ,
              mem_addr            ,
              mem_empty           ,
              mem_empty           ,
              mem_aempty          ,
              mem_aempty          ,
              mem_rd              ,
              mem_rd              ,
              mem_dout            ,
              mem_dout            ,
 
              mem_eop             ,
 
 
 
              cfg_desc_baddr      ,
 
              desc_req            ,
 
              desc_ack            ,
 
              desc_disccard       ,
 
              desc_data           ,
 
 
 
 
    // Slave Interface Signal
    // Slave Interface Signal
              wbo_din             ,
              wbo_din             ,
              wbo_taddr           ,
              wbo_taddr           ,
              wbo_addr            ,
              wbo_addr            ,
Line 77... Line 85...
parameter BE_WD   = 2;  // Byte Enable
parameter BE_WD   = 2;  // Byte Enable
parameter ADR_WD  = 28; // Address Width
parameter ADR_WD  = 28; // Address Width
parameter TAR_WD  = 4;  // Target Width
parameter TAR_WD  = 4;  // Target Width
 
 
// State Machine
// State Machine
parameter   IDLE = 0;
parameter   IDLE       = 2'h0;
parameter   XFR  = 1;
parameter   XFR        = 2'h1;
 
parameter   DESC_WAIT  = 2'h2;
 
parameter   DESC_XFR   = 2'h3;
 
 
input               clk      ;  // CLK_I The clock input [CLK_I] coordinates all activities 
input               clk      ;  // CLK_I The clock input [CLK_I] coordinates all activities 
                                // for the internal logic within the WISHBONE interconnect. 
                                // for the internal logic within the WISHBONE interconnect. 
                                // All WISHBONE output signals are registered at the 
                                // All WISHBONE output signals are registered at the 
                                // rising edge of [CLK_I]. 
                                // rising edge of [CLK_I]. 
Line 99... Line 109...
input [15:0]        mem_addr;   // memory address 
input [15:0]        mem_addr;   // memory address 
input               mem_empty;  // memory empty 
input               mem_empty;  // memory empty 
input               mem_aempty; // memory empty 
input               mem_aempty; // memory empty 
output              mem_rd;     // memory read
output              mem_rd;     // memory read
input  [7:0]        mem_dout;   // memory read data
input  [7:0]        mem_dout;   // memory read data
 
input               mem_eop;    // Last Transfer indication
 
 
 
//----------------------------------------
 
// Discriptor defination
 
//----------------------------------------
 
input              desc_req;    // descriptor request
 
output             desc_ack;    // descriptor ack
 
input              desc_disccard;// descriptor discard
 
input [15:6]       cfg_desc_baddr;  // descriptor memory base address
 
input [31:0]       desc_data;   // descriptor data
 
 
//------------------------------------------
//------------------------------------------
// External Memory WB Interface
// External Memory WB Interface
//------------------------------------------
//------------------------------------------
output [TAR_WD-1:0] wbo_taddr ;
output [TAR_WD-1:0] wbo_taddr ;
Line 175... Line 195...
reg                  wbo_stb   ;
reg                  wbo_stb   ;
reg                  wbo_we    ;
reg                  wbo_we    ;
reg [BE_WD-1:0]      wbo_be    ;
reg [BE_WD-1:0]      wbo_be    ;
reg                  wbo_cyc   ;
reg                  wbo_cyc   ;
reg [D_WD-1:0]       wbo_din   ;
reg [D_WD-1:0]       wbo_din   ;
reg                  state     ;
reg [1:0]            state     ;
 
 
reg                  mem_rd ;
reg                  mem_rd ;
 
reg [3:0]            desc_ptr  ; // descriptor pointer, in 32 bit mode
 
reg                  mem_eop_l ; // delayed eop signal
 
reg                  desc_ack  ; // delayed eop signal
 
 
always @(negedge rst_n or posedge clk) begin
always @(negedge rst_n or posedge clk) begin
   if(rst_n == 0) begin
   if(rst_n == 0) begin
      wbo_taddr <= 0;
      wbo_taddr <= 0;
      wbo_addr  <= 0;
      wbo_addr  <= 0;
Line 190... Line 212...
      wbo_we    <= 0;
      wbo_we    <= 0;
      wbo_be    <= 0;
      wbo_be    <= 0;
      wbo_cyc   <= 0;
      wbo_cyc   <= 0;
      wbo_din   <= 0;
      wbo_din   <= 0;
      mem_rd    <= 0;
      mem_rd    <= 0;
 
      desc_ptr  <= 0;
 
      mem_eop_l <= 0;
 
      desc_ack  <= 0;
      state     <= IDLE;
      state     <= IDLE;
   end
   end
   else begin
   else begin
      case(state)
      case(state)
       IDLE: begin
       IDLE: begin
 
          desc_ack <= 0;
          if(!mem_empty) begin
          if(!mem_empty) begin
             wbo_taddr <= mem_taddr;
             wbo_taddr <= mem_taddr;
             wbo_addr  <= mem_addr[14:2];
             wbo_addr  <= mem_addr[14:2];
             wbo_stb   <= 1'b1;
             wbo_stb   <= 1'b1;
             wbo_we    <= 1'b1;
             wbo_we    <= 1'b1;
             wbo_be    <= 1 << mem_addr[1:0];
             wbo_be    <= 1 << mem_addr[1:0];
             wbo_cyc   <= 1;
             wbo_cyc   <= 1;
             wbo_din   <= {mem_dout,mem_dout,mem_dout,mem_dout};
             wbo_din   <= {mem_dout,mem_dout,mem_dout,mem_dout};
 
             mem_eop_l <= mem_eop;
             mem_rd    <= 1;
             mem_rd    <= 1;
             state     <= XFR;
             state     <= XFR;
          end
          end
       end
       end
       XFR: begin
       XFR: begin
          if(wbo_ack) begin
          if(wbo_ack) begin
 
             mem_eop_l <= mem_eop;
             wbo_addr  <= mem_addr[14:2];
             wbo_addr  <= mem_addr[14:2];
             wbo_be    <= 1 << mem_addr[1:0];
             wbo_be    <= 1 << mem_addr[1:0];
             wbo_din   <= {mem_dout,mem_dout,mem_dout,mem_dout};
             wbo_din   <= {mem_dout,mem_dout,mem_dout,mem_dout};
             if(mem_aempty || mem_empty) begin
             if(mem_eop_l) begin
 
                state <= DESC_WAIT;
 
             end
 
             else if(mem_aempty || mem_empty) begin
                wbo_stb   <= 1'b0;
                wbo_stb   <= 1'b0;
                wbo_cyc   <= 0;
                wbo_cyc   <= 0;
                state     <= IDLE;
                state     <= IDLE;
             end else begin
             end else begin
               mem_rd <= 1;
               mem_rd <= 1;
             end
             end
          end else begin
          end else begin
             mem_rd <= 0;
             mem_rd <= 0;
          end
          end
       end
       end
 
       DESC_WAIT: begin
 
          if(desc_req) begin
 
             desc_ack    <= 1;
 
             if(desc_disccard) begin // if the Desc is discarded
 
                state     <= IDLE;
 
             end
 
             else begin
 
                wbo_addr  <= {cfg_desc_baddr[15:6],desc_ptr[3:0]}; // Each Transfer is 32bit
 
                wbo_be    <= 4'hF;
 
                wbo_din   <= desc_data;
 
                wbo_we    <= 1'b1;
 
                wbo_stb   <= 1'b1;
 
                wbo_cyc   <= 1;
 
                state     <= DESC_XFR;
 
                desc_ptr  <= desc_ptr+1;
 
             end
 
          end
 
       end
 
       DESC_XFR: begin
 
           desc_ack <= 0;
 
          if(wbo_ack) begin
 
              wbo_stb   <= 1'b0;
 
              wbo_cyc   <= 1'b0;
 
              state     <= IDLE;
 
          end
 
       end
 
 
      endcase
      endcase
   end
   end
end
end
 
 
 
 

powered by: WebSVN 2.1.0

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