Changeset 31 for trunk


Ignore:
Timestamp:
Sep 4, 2009, 10:16:52 PM (15 years ago)
Author:
demin
Message:

attemp to improve USB interface

Location:
trunk/MultiChannelUSB
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/MultiChannelUSB/Paella.v

    r30 r31  
    7070
    7171        reg             [31:0]  counter;       
     72        reg                             led_reg;       
    7273//      assign  LED                     =       counter[24];
    73         assign  LED                     =       usb_fifo_rx_empty;
     74//      assign  LED                     =       ~usb_fifo_rx_empty;
     75        assign  LED                     =       led_reg;
     76//      assign  LED                     =       usb_fifo_led;
    7477
    7578        wire                    usb_wrreq, usb_rdreq, usb_rden, usb_pktend;
     
    103106                .tx_full(usb_fifo_tx_full),
    104107                .rx_empty(usb_fifo_rx_empty),
    105 //              .led(usb_fifo_led),
    106                 .rx_data(usb_fifo_rx_data)
     108                .rx_data(usb_fifo_rx_data),
     109                .led(usb_fifo_led)
    107110        );
    108111       
     
    216219                        2:
    217220                        begin
     221                                usb_fifo_rx_rdreq <= ~usb_fifo_rx_empty;
    218222                                if (~usb_fifo_rx_empty)
    219223                                begin
    220                                         usb_fifo_rx_rdreq <= 1'b1;
    221224                                        case (usb_fifo_rx_data)
    222225                                                8'h30:
     
    227230                                                8'h31:
    228231                                                begin
     232                                                        led_reg <= 1'b1;
    229233                                                        hst_addr <= 12'd0;
    230234                                                        hst_byte_num <= 2'd0;   
     
    238242                                                8'h33:
    239243                                                begin
     244                                                        led_reg <= 1'b0;
    240245                                                        osc_addr <= osc_start_addr;
    241246                                                        osc_counter <= 10'd0;
     
    243248                                                        state1 <= 3'd4;
    244249                                                end
     250
    245251                                        endcase
    246252                                end
    247                                 else
    248                                 begin
    249                                         usb_fifo_rx_rdreq <= 1'b0;
    250                                 end                             
    251253                        end
    252254
     
    254256                        begin
    255257                                // hst transfer
     258                                usb_fifo_rx_rdreq <= 1'b0;
     259                                usb_fifo_tx_wrreq <= ~usb_fifo_tx_full;
    256260                                if (~usb_fifo_tx_full)
    257261                                begin
    258                                         usb_fifo_tx_wrreq <= 1'b1;
    259 
    260262                                        case (hst_byte_num)
    261263                                                2'd0: usb_fifo_tx_data <= hst_q[7:0];
     
    267269                                        if (&hst_byte_num)
    268270                                        begin
    269                                                 hst_byte_num <= 2'd0;                           
    270271                                                if (&hst_addr)
    271272                                                begin
     
    277278                                                end
    278279                                        end
    279                                         else
    280                                         begin
    281                                                 hst_byte_num <= hst_byte_num + 2'd1;                           
    282                                         end                             
    283                                 end
    284                                 else
    285                                 begin
    286                                         usb_fifo_tx_wrreq <= 1'b0;
     280
     281                                        hst_byte_num <= hst_byte_num + 2'd1;                           
    287282                                end
    288283                        end
     
    291286                        begin
    292287                                // osc transfer
     288                                usb_fifo_rx_rdreq <= 1'b0;
     289                                usb_fifo_tx_wrreq <= ~usb_fifo_tx_full;
    293290                                if(~usb_fifo_tx_full)
    294291                                begin
    295                                         usb_fifo_tx_wrreq <= 1'b1;
    296 
    297292                                        case (osc_byte_num)
    298293                                                1'd0: usb_fifo_tx_data <= osc_q[7:0];
     
    302297                                        if (osc_byte_num)
    303298                                        begin
    304                                                 osc_byte_num <= 1'd0;                           
    305299                                                if (&osc_counter)
    306300                                                begin
     
    313307                                                end
    314308                                        end
    315                                         else
    316                                         begin
    317                                                 osc_byte_num <= 1'd1;                           
    318                                         end                                                                             
    319                                 end
    320                                 else
    321                                 begin
    322                                         usb_fifo_tx_wrreq <= 1'b0;
     309
     310                                        osc_byte_num <= ~osc_byte_num;                         
    323311                                end
    324312                        end
     
    331319                endcase
    332320        end
     321
    333322/*
    334323        always @(posedge CLK_50MHz)
  • trunk/MultiChannelUSB/usb_fifo.v

    r30 r31  
    1111                input   wire    [7:0]   tx_data,
    1212                output  wire                    tx_full, rx_empty,
    13                 output  wire    [7:0]   rx_data
     13                output  wire    [7:0]   rx_data,
     14                output  wire                    led
    1415        );
    1516
    1617        // bidirectional data bus
    17         wire                    usb_wren;
    18         wire    [7:0]   usb_datain = usb_data;
    19         wire    [7:0]   usb_dataout;
     18        reg                             int_addr, int_wren, int_rden, int_wrreq, int_rdreq;
     19        wire    [7:0]   int_datain = usb_data;
     20        wire    [7:0]   int_dataout;
    2021
    21         assign  usb_data = usb_wren ? usb_dataout : 8'bz;
     22        assign  usb_data = int_wren ? int_dataout : 8'bz;
    2223
    2324        wire                    rx_full, tx_empty;
     25        wire                    rx_ready, tx_ready;
    2426        reg             [8:0]   byte_counter;
    2527        reg             [4:0]   idle_counter;
     28
     29        assign  led = ~usb_empty;
    2630
    2731        fifo32x8 fifo_tx_unit (
     
    2933                .data(tx_data),
    3034                .rdclk(usb_clk),
    31                 .rdreq(usb_wrreq),
     35                .rdreq(int_wrreq),
    3236                .wrclk(clk),
    3337                .wrreq(tx_wrreq),
    34                 .q(usb_dataout),
     38                .q(int_dataout),
    3539                .rdempty(tx_empty),
    3640                .wrfull(tx_full));
     
    3842        fifo32x8 fifo_rx_unit (
    3943                .aclr(aclr),
    40                 .data(usb_datain),
     44                .data(int_datain),
    4145                .rdclk(clk),
    4246                .rdreq(rx_rdreq),
    4347                .wrclk(usb_clk),
    44                 .wrreq(usb_rdreq),
     48                .wrreq(int_rdreq),
    4549                .q(rx_data),
    4650                .rdempty(rx_empty),
    4751                .wrfull(rx_full));
     52
     53        assign  rx_ready = (~usb_empty) & (~rx_full);
     54        assign  tx_ready = (~usb_full) & (~tx_empty);
    4855               
    4956        always @ (posedge usb_clk)
    5057        begin
     58                casez ({rx_ready, tx_ready, int_addr, int_rden})
     59                        4'b00??: // idle
     60                        begin
     61                                int_addr <= 1'b0;
     62                                int_rden <= 1'b0;
     63                                int_wren <= 1'b0;
     64                                int_rdreq <= 1'b0;
     65                                int_wrreq <= 1'b0;
     66                        end
     67                        4'b1?1?: // set read addr
     68                        begin
     69                                int_addr <= 1'b0;
     70                                int_rden <= 1'b0;
     71                                int_wren <= 1'b0;
     72                                int_rdreq <= 1'b0;
     73                                int_wrreq <= 1'b0;
     74                        end
     75                        4'b1?00: // enable reads
     76                        begin
     77                                int_addr <= 1'b0;
     78                                int_rden <= 1'b1;
     79                                int_wren <= 1'b0;
     80                                int_rdreq <= 1'b0;
     81                                int_wrreq <= 1'b0;
     82                        end
     83                        4'b1?01: // read
     84                        begin
     85                                int_addr <= 1'b0;
     86                                int_rden <= 1'b1;
     87                                int_wren <= 1'b0;
     88                                int_rdreq <= 1'b1;
     89                                int_wrreq <= 1'b0;
     90                        end
     91                        4'b0101: // disable reads
     92                        begin
     93                                int_addr <= 1'b0;
     94                                int_rden <= 1'b0;
     95                                int_wren <= 1'b0;
     96                                int_rdreq <= 1'b0;
     97                                int_wrreq <= 1'b0;
     98                        end
     99                        4'b0100: // set write addr
     100                        begin
     101                                int_addr <= 1'b1;
     102                                int_rden <= 1'b0;
     103                                int_wren <= 1'b1;
     104                                int_rdreq <= 1'b0;
     105                                int_wrreq <= 1'b0;
     106                        end
     107                        4'b011?: // write
     108                        begin
     109                                int_addr <= 1'b1;
     110                                int_rden <= 1'b0;
     111                                int_wren <= 1'b1;
     112                                int_rdreq <= 1'b0;
     113                                int_wrreq <= 1'b1;
     114                        end
     115                endcase
     116/*
    51117                if (usb_pktend)
    52118                begin
     
    64130                        idle_counter <= idle_counter + 5'd1;
    65131                end
     132*/
    66133        end
    67134
    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;
     135        assign  usb_addr = {1'b1, int_addr};
     136        assign  usb_rden = int_rden;
     137        assign  usb_rdreq = int_rdreq;
     138        assign  usb_wrreq = int_wrreq;
     139//      assign  usb_pktend = (&idle_counter);
     140        assign  usb_pktend = 1'b0;
    75141
    76142endmodule
Note: See TracChangeset for help on using the changeset viewer.