Ignore:
Timestamp:
May 8, 2011, 11:15:11 PM (14 years ago)
Author:
demin
Message:

multiple select pins and 24-bit data

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sandbox/MultiChannelUSB/spi_fifo.v

    r107 r141  
    11module spi_fifo
    22        (               
    3                 input           wire                            clock, reset,
     3                input   wire                    clock, reset,
    44
    5                 input           wire                            bus_ssel, bus_wren,
    6                 input           wire    [15:0]  bus_mosi,
     5                input   wire                    bus_ssel, bus_wren,
     6                input   wire    [15:0]  bus_mosi,
    77
    8                 output  wire                            bus_busy,
     8                output  wire                    bus_busy,
    99
    10                 output  wire                            spi_sel,
    11                 output  wire                            spi_sdo,
    12                 output  wire                            spi_clk
     10                output  wire    [1:0]   spi_sel,
     11                output  wire                    spi_sdo,
     12                output  wire                    spi_clk
    1313        );
    1414
    15         wire                            int_rdempty, int_wrfull;
    16         wire    [15:0]  int_q;
     15        wire                    int_rdempty, int_wrfull;
     16        wire    [31:0]  int_q;
    1717
    1818        reg                             int_bus_busy;
    1919        reg                             int_rdreq, int_wrreq;
    20         reg                             int_clken, int_sdo, int_sel;
    21         reg     [15:0]  int_bus_mosi;
    22         reg     [15:0]  int_data;
    23         reg     [2:0]           clk_cntr;
    24         reg     [3:0]           bit_cntr;
    25         reg     [1:0]           state;
     20        reg                             int_clken, int_sdo;
     21        reg             [1:0]   int_sel;
     22        reg             [15:0]  int_bus_mosi;
     23        reg             [31:0]  int_data;
     24        reg             [2:0]   clk_cntr;
     25        reg             [4:0]   bit_cntr;
     26        reg             [1:0]   state;
    2627
    27         scfifo #(
    28                 .add_ram_output_register("OFF"),
     28        dcfifo_mixed_widths #(
    2929                .intended_device_family("Cyclone III"),
    3030                .lpm_numwords(16),
    3131                .lpm_showahead("ON"),
    32                 .lpm_type("scfifo"),
     32                .lpm_type("dcfifo"),
    3333                .lpm_width(16),
    3434                .lpm_widthu(4),
     35                .lpm_width_r(32),
     36                .lpm_widthu_r(3),
     37                .rdsync_delaypipe(4),
     38                .wrsync_delaypipe(4),
    3539                .overflow_checking("ON"),
    3640                .underflow_checking("ON"),
    37                 .use_eab("OFF")) fifo_tx (
     41                .use_eab("ON")) fifo_tx (
     42                .data(int_bus_mosi),
     43                .rdclk(clock),
    3844                .rdreq((~int_rdempty) & (int_rdreq) & (&clk_cntr)),
    39                 .aclr(1'b0),
    40                 .clock(clock),
     45                .wrclk(clock),
    4146                .wrreq(int_wrreq),
    42                 .data(int_bus_mosi),
    43                 .empty(int_rdempty),
    4447                .q(int_q),
    45                 .full(int_wrfull),
    46                 .almost_empty(),
    47                 .almost_full(),
    48                 .sclr(),
    49                 .usedw());
     48                .rdempty(int_rdempty),
     49                .wrfull(int_wrfull));
    5050       
    5151        always @ (posedge clock)
     
    7878                                begin
    7979                                        int_sdo <= 1'b0;
    80                                         int_sel <= 1'b1;
     80                                        int_sel <= 2'b11;
    8181                                        int_clken <= 1'b0;
    8282                                        int_rdreq <= 1'b1;
     
    8989                                        begin
    9090                                                int_rdreq <= 1'b0;
    91                                                 int_data <= int_q;
    92                                                 bit_cntr <= 4'd0;
     91                                                int_data <= {int_q[15:0], int_q[31:16]};
     92                                                bit_cntr <= 5'd0;
    9393                                                state <= 2'd2;
    9494                                        end
     
    9999                                begin // data
    100100                                        int_clken <= 1'b1;
    101                                         int_sel <= 1'b0;
    102                                         int_sdo <= int_data[11];
    103                                         int_data <= {int_data[10:0], 1'b0};
    104                                         bit_cntr <= bit_cntr + 4'd1;
    105                                         if (bit_cntr == 4'd11)
     101                                        int_sel <= int_data[25:24];
     102                                        int_sdo <= int_data[23];
     103                                        int_data[23:0] <= {int_data[22:0], 1'b0};
     104                                        bit_cntr <= bit_cntr + 5'd1;
     105                                        if (bit_cntr == 5'd23)
    106106                                        begin
    107107                                                state <= 2'd3;
Note: See TracChangeset for help on using the changeset viewer.