OpenCores
URL https://opencores.org/ocsvn/usb_ft232h_avalon-mm_interface/usb_ft232h_avalon-mm_interface/trunk

Subversion Repositories usb_ft232h_avalon-mm_interface

[/] [usb_ft232h_avalon-mm_interface/] [trunk/] [testbench/] [altera_project/] [test_usb_ft232h/] [pipeline.sv] - Rev 6

Compare with Previous | Blame | View Log

module pipeline_step (
  clk_i,
  reset_i,

  // data source side
  valid_i,
  data_i,
  ready_o,
  
  // data destination side
  ready_i,
  valid_o,
  data_o
);


parameter DATA_WIDTH = 8;


input  wire                   clk_i;
input  wire                   reset_i;

input  wire                   valid_i;
input  wire  [DATA_WIDTH-1:0] data_i;
output wire                   ready_o;

input  wire                   ready_i;
output logic                  valid_o;
output reg   [DATA_WIDTH-1:0] data_o;



reg valid_reg;



assign ready_o = ready_i;
assign valid_o = ready_i ? valid_reg : 1'b0;



always_ff @(posedge clk_i or posedge reset_i)
begin
  if (reset_i)
    begin
      valid_reg <= 1'b0;
      data_o <= '0;
    end
  else
    begin
      if (ready_i)
        begin
          valid_reg <= valid_i;
          data_o <= data_i;
        end
    end
end


endmodule


module pipeline (
  clk_i,
  reset_i,

  // data source side
  valid_i,
  data_i,
  ready_o,
  
  // data destination side
  ready_i,
  valid_o,
  data_o
);


parameter DATA_WIDTH = 8;
parameter LATENCY    = 1;


localparam COUNT = LATENCY + 1;


input  wire                   clk_i;
input  wire                   reset_i;

input  wire                   valid_i;
input  wire  [DATA_WIDTH-1:0] data_i;
output wire                   ready_o;

input  wire                   ready_i;
output logic                  valid_o;
output reg   [DATA_WIDTH-1:0] data_o;



logic                   pl_ready [COUNT];
logic                   pl_valid [COUNT];
logic [DATA_WIDTH-1:0]  pl_data  [COUNT];



assign ready_o = pl_ready[0];
assign pl_valid[0] = valid_i;
assign pl_data[0] = data_i;

assign pl_ready[COUNT-1] = ready_i;
assign valid_o = pl_valid[COUNT-1];
assign data_o = pl_data[COUNT-1];


genvar i;
generate
for ( i = 1; i < COUNT; i = i + 1 )
begin: pipeline_generate
  pipeline_step pl_step(
    .clk_i   (clk_i),
    .reset_i (reset_i),
    
    .valid_i (pl_valid[i-1]),
    .data_i  (pl_data[i-1]),
    .ready_o (pl_ready[i-1]),
    
    .ready_i (pl_ready[i]),
    .valid_o (pl_valid[i]),
    .data_o  (pl_data[i])
  );
  defparam
    pl_step.DATA_WIDTH = DATA_WIDTH;
end
endgenerate 


endmodule

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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