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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 6 melman701
module ft232h_transmitter (
2
  reset_i,
3
  ready_o,
4
  transmit_i,
5
  sending_o,
6
 
7
  // FT232H
8
  usb_clk_i,
9
  usb_txe_n_i,
10
  usb_wr_n_o,
11
 
12
  usb_data_o,
13
 
14
  // FIFO
15
  fifo_rdclk_o,
16
  fifo_rdempty_i,
17
  fifo_rdreq_o,
18
  fifo_rddata_i
19
);
20
 
21
 
22
parameter LATENCY = 1;
23
 
24
 
25
input  logic        reset_i;
26
output logic        ready_o;
27
input  logic        transmit_i;
28
output logic        sending_o;
29
 
30
input  logic        usb_clk_i;
31
input  logic        usb_txe_n_i;
32
output logic        usb_wr_n_o;
33
 
34
output logic [7:0]  usb_data_o;
35
 
36
output logic        fifo_rdclk_o;
37
input  logic        fifo_rdempty_i;
38
output logic        fifo_rdreq_o;
39
input  logic [7:0]  fifo_rddata_i;
40
 
41
 
42
 
43
logic dest_ready;
44
logic fifo_datavalid;
45
reg   fifo_datavalid_reg;
46
logic pipeline_ready;
47
logic usb_datavalid;
48
logic usb_txe_n_reg;
49
 
50
 
51
 
52
 
53
assign fifo_rdclk_o = usb_clk_i;
54
assign dest_ready = transmit_i & ~usb_txe_n_i & ~usb_txe_n_reg;
55
assign ready_o = ~usb_txe_n_i & (~fifo_rdempty_i | fifo_datavalid_reg);
56
assign sending_o = fifo_rdreq_o | ~usb_wr_n_o;
57
assign usb_wr_n_o = ~(usb_datavalid & dest_ready);
58
 
59
assign fifo_datavalid = dest_ready ? fifo_datavalid_reg : 1'b0;
60
 
61
 
62
 
63
pipeline pipe_inst (
64
  .clk_i   (usb_clk_i),
65
  .reset_i (reset_i),
66
  // data source side
67
  .valid_i (fifo_datavalid),
68
  .data_i  (fifo_rddata_i),
69
  .ready_o (pipeline_ready),
70
  // data destination side
71
  .ready_i (dest_ready),
72
  .valid_o (usb_datavalid),
73
  .data_o  (usb_data_o)
74
  );
75
  defparam
76
    pipe_inst.LATENCY = LATENCY;
77
 
78
 
79
 
80
 
81
always_ff @(posedge usb_clk_i)
82
begin
83
  usb_txe_n_reg <= usb_txe_n_i;
84
end
85
 
86
 
87
always_ff @(negedge fifo_rdclk_o or posedge reset_i)
88
begin
89
  if (reset_i)
90
    begin
91
      fifo_rdreq_o <= 1'b0;
92
    end
93
  else
94
    begin
95
      if (transmit_i & ~fifo_rdempty_i & pipeline_ready)
96
        fifo_rdreq_o <= 1'b1;
97
      else
98
        fifo_rdreq_o <= 1'b0;
99
    end
100
end
101
 
102
always_ff @(posedge fifo_rdclk_o or posedge reset_i)
103
begin
104
  if (reset_i)
105
    begin
106
      fifo_datavalid_reg <= 1'b0;
107
    end
108
  else
109
    begin
110
      if (pipeline_ready)
111
        begin
112
          if (fifo_rdreq_o)
113
            fifo_datavalid_reg <= 1'b1;
114
          else
115
            fifo_datavalid_reg <= 1'b0;
116
        end
117
    end
118
end
119
 
120
endmodule

powered by: WebSVN 2.1.0

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