Ignore:
Timestamp:
Sep 3, 2009, 2:34:23 PM (15 years ago)
Author:
demin
Message:

put all components in place

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/MultiChannelUSB/usb_fifo.v

    r27 r30  
    1313                output  wire    [7:0]   rx_data
    1414        );
    15        
    16         localparam EPRD_ADDR    =       2'b10;  // 6
    17         localparam EPWR_ADDR    =       2'b11;  // 8
    1815
    1916        // bidirectional data bus
     
    2421        assign  usb_data = usb_wren ? usb_dataout : 8'bz;
    2522
    26         wire                    tx_rdreq, tx_empty;
    27         wire                    rx_wrreq, rx_full;
     23        wire                    rx_full, tx_empty;
     24        reg             [8:0]   byte_counter;
     25        reg             [4:0]   idle_counter;
    2826
    2927        fifo32x8 fifo_tx_unit (
     
    3129                .data(tx_data),
    3230                .rdclk(usb_clk),
    33                 .rdreq(tx_rdreq),
     31                .rdreq(usb_wrreq),
    3432                .wrclk(clk),
    3533                .wrreq(tx_wrreq),
    36                 .q(usb_dataout_bis),
     34                .q(usb_dataout),
    3735                .rdempty(tx_empty),
    3836                .wrfull(tx_full));
     
    4442                .rdreq(rx_rdreq),
    4543                .wrclk(usb_clk),
    46                 .wrreq(rx_wrreq),
     44                .wrreq(usb_rdreq),
    4745                .q(rx_data),
    4846                .rdempty(rx_empty),
    4947                .wrfull(rx_full));
    50 
    51         reg             [31:0]  counter;       
    52        
    53         reg             [2:0]   state;
    54         reg                             tx;
    55         reg             [7:0]   dout;
    56 
    57         always @(posedge usb_clk)
     48               
     49        always @ (posedge usb_clk)
    5850        begin
    59                 case(state)
    60                         0:
    61                         begin
    62                                 tx <= 1'b0;
    63                                 counter <= 32'd0;
    64                                 state <= 3'd1;
    65                         end
    66                         1:
    67                         begin
    68                                 if((~usb_full) & (counter < 32'd512))
    69                                 begin
    70                                         counter <= counter + 32'd1;
    71                                         state <= 3'd2;
    72                                         dout <= 1;
    73                                         tx <= 1'b1;
    74                                 end
    75                                 else
    76                                 begin
    77                                         tx <= 1'b0;
    78                                 end
    79                         end
    80                                
    81                         2:
    82                         begin
    83                                 if((~usb_full) & (counter < 32'd512))
    84                                 begin
    85                                         counter <= counter + 32'd1;
    86                                         state <= 3'd1;
    87                                         dout <= 0;
    88                                         tx <= 1'b1;
    89                                 end
    90                                 else
    91                                 begin
    92                                         tx <= 1'b0;
    93                                 end
    94                         end
    95                                                
    96                         default: state <= 3'd0;
    97                 endcase
     51                if (usb_pktend)
     52                begin
     53                        byte_counter <= 9'd0;
     54                        idle_counter <= 5'd0;
     55                end
     56                else if (usb_wrreq)
     57                begin
     58                        byte_counter <= byte_counter + 9'd1;
     59                        idle_counter <= 5'd0;
     60                end
     61                else if ((|byte_counter) & (tx_empty))
     62                begin
     63                        byte_counter <= byte_counter;
     64                        idle_counter <= idle_counter + 5'd1;
     65                end
    9866        end
    9967
    100         assign  usb_addr = 2'b11; // FIFO8
    101         assign  usb_rdreq = 1'b0; // always TX for now
    102         assign  usb_dataout = dout;
    103         assign  usb_wrreq = tx;
    104         assign  usb_pktend = 1'b0;
    105         assign  usb_rden = 1'b0;
    106         assign  usb_wren = tx;
     68        assign  usb_pktend = (&idle_counter);
     69//      assign  usb_pktend = 1'b0;
     70        assign  usb_rdreq = (~usb_empty) & (~rx_full);
     71        assign  usb_wrreq = (~usb_rdreq) & (~usb_full) & (~tx_empty);
     72        assign  usb_rden = usb_rdreq;
     73        assign  usb_wren = usb_wrreq;
     74        assign  usb_addr = usb_empty ? 2'b11 : 2'b10;
    10775
    10876endmodule
Note: See TracChangeset for help on using the changeset viewer.