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

first attempt to use normal memory clock

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/MultiChannelUSB/histogram.v

    r47 r51  
    99        // signal declaration
    1010        reg             [3:0]   state_reg, state_next;
     11        reg                             flag_reg, flag_next;
    1112        reg                             wren_reg, wren_next;
    1213        reg             [11:0]  addr_reg, addr_next;
     
    1415
    1516        wire    [23:0]  q_a_wire, q_b_wire;
     17       
     18        wire    [11:0]  addr_wire;
     19        wire    [23:0]  data_wire;
     20       
     21        assign  addr_wire = (flag_reg) ? data : addr_reg;
     22        assign  data_wire = (flag_reg) ? (q_a_wire + 24'd1) : data_reg;
    1623
    1724        altsyncram #(
     
    3946                .width_byteena_a(1),
    4047                .width_byteena_b(1),
    41                 .wrcontrol_wraddress_reg_b("CLOCK0")) hst_ram_unit (
    42                 .wren_a (wren_reg),
    43                 .clock0 (~clk),
    44                 .wren_b (1'b0),
    45                 .address_a (addr_reg),
    46                 .address_b (address),
    47                 .data_a (data_reg),
    48                 .data_b (),
    49                 .q_a (q_a_wire),
    50                 .q_b (q_b_wire),
    51                 .aclr0 (1'b0),
    52                 .aclr1 (1'b0),
    53                 .addressstall_a (1'b0),
    54                 .addressstall_b (1'b0),
    55                 .byteena_a (1'b1),
    56                 .byteena_b (1'b1),
    57                 .clock1 (1'b1),
    58                 .clocken0 (1'b1),
    59                 .clocken1 (1'b1),
    60                 .clocken2 (1'b1),
    61                 .clocken3 (1'b1),
    62                 .eccstatus (),
    63                 .rden_a (1'b1),
    64                 .rden_b (1'b1));
     48                .wrcontrol_wraddress_reg_b("CLOCK0")) hst_ram_unit(
     49                .wren_a(wren_reg),
     50                .clock0(~clk),
     51                .wren_b(1'b0),
     52                .address_a(addr_wire),
     53                .address_b(address),
     54                .data_a(data_wire),
     55                .data_b(),
     56                .q_a(q_a_wire),
     57                .q_b(q_b_wire),
     58                .aclr0(1'b0),
     59                .aclr1(1'b0),
     60                .addressstall_a(1'b0),
     61                .addressstall_b(1'b0),
     62                .byteena_a(1'b1),
     63                .byteena_b(1'b1),
     64                .clock1(1'b1),
     65                .clocken0(1'b1),
     66                .clocken1(1'b1),
     67                .clocken2(1'b1),
     68                .clocken3(1'b1),
     69                .eccstatus(),
     70                .rden_a(1'b1),
     71                .rden_b(1'b1));
    6572
    6673        // body
     
    6976                if (reset)
    7077        begin
     78                        flag_reg <= 1'b0;
     79                        wren_reg <= 1'b1;
     80                        addr_reg <= 12'd0;
     81                        data_reg <= 24'd0;
    7182                        state_reg <= 4'b1;
    7283                end
    7384                else
    7485                begin
    75                         state_reg <= state_next;
     86                        flag_reg <= flag_next;
    7687                        wren_reg <= wren_next;
    7788                        addr_reg <= addr_next;
    7889                        data_reg <= data_next;
     90                        state_reg <= state_next;
    7991                end
    8092        end
     
    8294        always @*
    8395        begin
    84                 state_next = state_reg;
     96                flag_next = flag_reg;
    8597                wren_next = wren_reg;
    8698                addr_next = addr_reg;
    8799                data_next = data_reg;
     100                state_next = state_reg;
    88101                case (state_reg)
    89                         0: ; // nothing to do
    90                         1:
     102                        0:
    91103                        begin
    92                                 // start reset
    93                                 wren_next = 1'b1;
    94                                 addr_next = 0;
    95                                 data_next = 0;
    96                                 state_next = 4'd2;
     104                                // nothing to do
     105                                flag_next = 1'b0;
     106                                wren_next = 1'b0;
     107                                addr_next = 12'd0;
     108                                data_next = 24'd0;
     109                                state_next = 4'd0;
    97110                        end
    98                        
    99                         2:
     111                                               
     112                        1:
    100113                        begin
    101114                                // write zeros
    102115                                if (&addr_reg)
    103116                                begin
    104                                         state_next = 4'd3;
     117                                        flag_next = 1'b1;
     118                                        wren_next = 1'b0;
     119                                        state_next = 4'd2;
    105120                                end
    106121                                else
     
    108123                                        addr_next = addr_reg + 12'd1;
    109124                                end
    110                         end
    111        
    112                         3:
     125                        end     
     126
     127                        2:
    113128                        begin
    114                                 // read
    115                                 wren_next = 1'b0;
    116                                 if (&data_reg)
     129                                if (data_ready)
    117130                                begin
    118                                         state_next = 4'd0;
    119                                 end
    120                                 else if (data_ready)
    121                                 begin
    122                                         // set addr
    123                                         addr_next = data;
    124                                         state_next = 4'd4;
     131                                        if (&q_a_wire)
     132                                        begin
     133                                                flag_next = 1'b0;
     134                                                state_next = 4'd0;
     135                                        end
     136                                        else
     137                                        begin
     138                                                wren_next = 1'b1;
     139                                                state_next = 4'd3;
     140                                        end
    125141                                end
    126142                        end
    127143
    128                         4:
     144                        3:
    129145                        begin
    130                                 // increment and write
    131                                 wren_next = 1'b1;
    132                                 data_next = q_a_wire + 24'd1;
    133                                 state_next = 4'd3;
     146                                wren_next = 1'b0;
     147                                state_next = 4'd2;
    134148                        end
    135149
    136150                        default:
    137151                        begin
     152                                flag_next = 1'b0;
     153                                wren_next = 1'b0;
     154                                addr_next = 12'd0;
     155                                data_next = 24'd0;
    138156                                state_next = 4'd0;
    139157                        end
Note: See TracChangeset for help on using the changeset viewer.