Changeset 30 for trunk/MultiChannelUSB/usb_fifo.v
- Timestamp:
- Sep 3, 2009, 2:34:23 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/MultiChannelUSB/usb_fifo.v
r27 r30 13 13 output wire [7:0] rx_data 14 14 ); 15 16 localparam EPRD_ADDR = 2'b10; // 617 localparam EPWR_ADDR = 2'b11; // 818 15 19 16 // bidirectional data bus … … 24 21 assign usb_data = usb_wren ? usb_dataout : 8'bz; 25 22 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; 28 26 29 27 fifo32x8 fifo_tx_unit ( … … 31 29 .data(tx_data), 32 30 .rdclk(usb_clk), 33 .rdreq( tx_rdreq),31 .rdreq(usb_wrreq), 34 32 .wrclk(clk), 35 33 .wrreq(tx_wrreq), 36 .q(usb_dataout _bis),34 .q(usb_dataout), 37 35 .rdempty(tx_empty), 38 36 .wrfull(tx_full)); … … 44 42 .rdreq(rx_rdreq), 45 43 .wrclk(usb_clk), 46 .wrreq( rx_wrreq),44 .wrreq(usb_rdreq), 47 45 .q(rx_data), 48 46 .rdempty(rx_empty), 49 47 .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) 58 50 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 98 66 end 99 67 100 assign usb_ addr = 2'b11; // FIFO8101 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; 107 75 108 76 endmodule
Note:
See TracChangeset
for help on using the changeset viewer.