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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 6 melman701
module ft232h_receiver (
2
  reset_i,
3
  ready_o,
4
  receive_i,
5
  receiving_o,
6
 
7
  // USB
8
  usb_clk_i,
9
  usb_rxf_n_i,
10
  usb_rd_n_o,
11
  usb_oe_n_o,
12
 
13
  usb_data_i,
14
 
15
  // FIFO
16
  fifo_wrfull_i,
17
  fifo_wrclk_o,
18
  fifo_wrreq_o,
19
  fifo_data_o
20
);
21
 
22
 
23
parameter LATENCY = 1;
24
 
25
 
26
input  logic        reset_i;
27
output logic        ready_o;
28
input  logic        receive_i;
29
output logic        receiving_o;
30
 
31
input  logic        usb_clk_i;
32
input  logic        usb_rxf_n_i;
33
output logic        usb_rd_n_o;
34
output logic        usb_oe_n_o;
35
 
36
input  logic [7:0]  usb_data_i;
37
 
38
input  logic        fifo_wrfull_i;
39
output logic        fifo_wrclk_o;
40
output logic        fifo_wrreq_o;
41
output logic [7:0]  fifo_data_o;
42
 
43
 
44
 
45
logic fifo_wrfull_reg;
46
logic usb_datavalid;
47
logic pipeline_ready;
48
 
49
 
50
 
51
assign fifo_wrclk_o = ~usb_clk_i;
52
assign ready_o = pipeline_ready & ~usb_rxf_n_i;
53
assign receiving_o = ~usb_oe_n_o | ~usb_rd_n_o;
54
 
55
assign usb_datavalid = ~usb_rd_n_o & ~usb_rxf_n_i;
56
 
57
 
58
 
59
pipeline pipe_inst (
60
  .clk_i   (usb_clk_i),
61
  .reset_i (reset_i),
62
  // data source side
63
  .valid_i (usb_datavalid),
64
  .data_i  (usb_data_i),
65
  .ready_o (pipeline_ready),
66
  // data destination side
67
  .ready_i (~fifo_wrfull_reg),
68
  .valid_o (fifo_wrreq_o),
69
  .data_o  (fifo_data_o)
70
  );
71
  defparam
72
    pipe_inst.LATENCY = LATENCY;
73
 
74
 
75
 
76
always_ff @(posedge usb_clk_i)
77
begin
78
  fifo_wrfull_reg <= fifo_wrfull_i;
79
end
80
 
81
 
82
always_ff @(posedge usb_clk_i or posedge reset_i)
83
begin
84
  if (reset_i)
85
    begin
86
    end
87
  else
88
    begin
89
      if (receive_i & ready_o & ~fifo_wrfull_i)
90
        begin
91
          usb_oe_n_o <= 1'b0;
92
          if (~usb_oe_n_o)
93
            usb_rd_n_o <= 1'b0;
94
        end
95
      else
96
        begin
97
          usb_oe_n_o <= 1'b1;
98
          usb_rd_n_o <= 1'b1;
99
        end
100
    end
101
end
102
 
103
 
104
endmodule

powered by: WebSVN 2.1.0

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