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/] [hw/] [pipeline.sv] - Blame information for rev 6

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 6 melman701
module pipeline_step (
2
  clk_i,
3
  reset_i,
4
 
5
  // data source side
6
  valid_i,
7
  data_i,
8
  ready_o,
9
 
10
  // data destination side
11
  ready_i,
12
  valid_o,
13
  data_o
14
);
15
 
16
 
17
parameter DATA_WIDTH = 8;
18
 
19
 
20
input  wire                   clk_i;
21
input  wire                   reset_i;
22
 
23
input  wire                   valid_i;
24
input  wire  [DATA_WIDTH-1:0] data_i;
25
output wire                   ready_o;
26
 
27
input  wire                   ready_i;
28
output logic                  valid_o;
29
output reg   [DATA_WIDTH-1:0] data_o;
30
 
31
 
32
 
33
reg valid_reg;
34
 
35
 
36
 
37
assign ready_o = ready_i;
38
assign valid_o = ready_i ? valid_reg : 1'b0;
39
 
40
 
41
 
42
always_ff @(posedge clk_i or posedge reset_i)
43
begin
44
  if (reset_i)
45
    begin
46
      valid_reg <= 1'b0;
47
      data_o <= '0;
48
    end
49
  else
50
    begin
51
      if (ready_i)
52
        begin
53
          valid_reg <= valid_i;
54
          data_o <= data_i;
55
        end
56
    end
57
end
58
 
59
 
60
endmodule
61
 
62
 
63
module pipeline (
64
  clk_i,
65
  reset_i,
66
 
67
  // data source side
68
  valid_i,
69
  data_i,
70
  ready_o,
71
 
72
  // data destination side
73
  ready_i,
74
  valid_o,
75
  data_o
76
);
77
 
78
 
79
parameter DATA_WIDTH = 8;
80
parameter LATENCY    = 1;
81
 
82
 
83
localparam COUNT = LATENCY + 1;
84
 
85
 
86
input  wire                   clk_i;
87
input  wire                   reset_i;
88
 
89
input  wire                   valid_i;
90
input  wire  [DATA_WIDTH-1:0] data_i;
91
output wire                   ready_o;
92
 
93
input  wire                   ready_i;
94
output logic                  valid_o;
95
output reg   [DATA_WIDTH-1:0] data_o;
96
 
97
 
98
 
99
logic                   pl_ready [COUNT];
100
logic                   pl_valid [COUNT];
101
logic [DATA_WIDTH-1:0]  pl_data  [COUNT];
102
 
103
 
104
 
105
assign ready_o = pl_ready[0];
106
assign pl_valid[0] = valid_i;
107
assign pl_data[0] = data_i;
108
 
109
assign pl_ready[COUNT-1] = ready_i;
110
assign valid_o = pl_valid[COUNT-1];
111
assign data_o = pl_data[COUNT-1];
112
 
113
 
114
genvar i;
115
generate
116
for ( i = 1; i < COUNT; i = i + 1 )
117
begin: pipeline_generate
118
  pipeline_step pl_step(
119
    .clk_i   (clk_i),
120
    .reset_i (reset_i),
121
 
122
    .valid_i (pl_valid[i-1]),
123
    .data_i  (pl_data[i-1]),
124
    .ready_o (pl_ready[i-1]),
125
 
126
    .ready_i (pl_ready[i]),
127
    .valid_o (pl_valid[i]),
128
    .data_o  (pl_data[i])
129
  );
130
  defparam
131
    pl_step.DATA_WIDTH = DATA_WIDTH;
132
end
133
endgenerate
134
 
135
 
136
endmodule
137
 

powered by: WebSVN 2.1.0

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