Changeset 51 for trunk


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

first attempt to use normal memory clock

Location:
trunk/MultiChannelUSB
Files:
2 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
  • trunk/MultiChannelUSB/oscilloscope.v

    r45 r51  
    1111        // signal declaration
    1212        reg             [3:0]   state_reg, state_next;
    13 
     13        reg                             flag_reg, flag_next;
    1414        reg                             wren_reg, wren_next;
    1515        reg             [9:0]   addr_reg, addr_next;
     
    2222        wire    [15:0]  q_wire;
    2323
    24         ram1024x16 ram1024x16_unit (
    25                 .clock(~clk),
    26                 .data(data_reg),
    27                 .rdaddress(address),
    28                 .wraddress(addr_reg),
    29                 .wren(wren_reg),
    30                 .q(q_wire));
     24        wire    [15:0]  data_wire;
     25       
     26        assign  data_wire = (flag_reg) ? raw_data : data_reg;
     27
     28        altsyncram #(
     29                .address_reg_b("CLOCK0"),
     30                .clock_enable_input_a("BYPASS"),
     31                .clock_enable_input_b("BYPASS"),
     32                .clock_enable_output_a("BYPASS"),
     33                .clock_enable_output_b("BYPASS"),
     34                .intended_device_family("Cyclone III"),
     35                .lpm_type("altsyncram"),
     36                .numwords_a(1024),
     37                .numwords_b(1024),
     38                .operation_mode("DUAL_PORT"),
     39                .outdata_aclr_b("NONE"),
     40                .outdata_reg_b("UNREGISTERED"),
     41                .power_up_uninitialized("FALSE"),
     42                .read_during_write_mode_mixed_ports("OLD_DATA"),
     43                .widthad_a(10),
     44                .widthad_b(10),
     45                .width_a(16),
     46                .width_b(16),
     47                .width_byteena_a(1)) osc_ram_unit(
     48                .wren_a(wren_reg),
     49                .clock0(~clk),
     50                .address_a(addr_reg),
     51                .address_b(address),
     52                .data_a(data_wire),
     53                .q_b(q_wire),
     54                .aclr0(1'b0),
     55                .aclr1(1'b0),
     56                .addressstall_a(1'b0),
     57                .addressstall_b(1'b0),
     58                .byteena_a(1'b1),
     59                .byteena_b(1'b1),
     60                .clock1(1'b1),
     61                .clocken0(1'b1),
     62                .clocken1(1'b1),
     63                .clocken2(1'b1),
     64                .clocken3(1'b1),
     65                .data_b({16{1'b1}}),
     66                .eccstatus(),
     67                .q_a(),
     68                .rden_a(1'b1),
     69                .rden_b(1'b1),
     70                .wren_b(1'b0));
    3171
    3272        // body
     
    3676        begin
    3777                        state_reg <= 4'b1;
     78                        flag_reg <= 1'b0;
     79                        wren_reg <= 1'b1;
     80                        addr_reg <= 10'd0;
     81                        data_reg <= 16'd0;
     82                        trig_reg <= 1'b0;
     83                        trig_addr_reg <= 10'd0;
     84                        counter_reg <= 10'd0;
    3885                end
    3986                else
    4087                begin
    4188                        state_reg <= state_next;
     89                        flag_reg <= flag_next;
    4290                        wren_reg <= wren_next;
    4391                        addr_reg <= addr_next;
     
    52100        begin
    53101                state_next = state_reg;
     102                flag_next = flag_reg;
    54103                wren_next = wren_reg;
    55104                addr_next = addr_reg;
     
    60109
    61110                case (state_reg)
    62                         0: ; // nothing to do 
    63                         1:
     111                        0:
    64112                        begin
    65                                 // start reset
    66                                 wren_next = 1'b1;
    67                                 addr_next = 0;
    68                                 data_next = 0;
    69                                 trig_next = 0;
    70                                 trig_addr_next = 0;
    71                                 counter_next = 0;
    72                                 state_next = 4'd2;
     113                                // nothing to do
     114                                state_next = 4'b0;
     115                                flag_next = 1'b0;
     116                                wren_next = 1'b0;
     117                                addr_next = 10'd0;
     118                                data_next = 16'd0;
     119                                trig_next = 1'b0;
     120                                trig_addr_next = 10'd0;
     121                                counter_next = 10'd0;
    73122                        end
    74123                       
    75                         2:
     124                        1:
    76125                        begin
    77126                                // write zeros
    78127                                if (&addr_reg)
    79128                                begin
     129                                        flag_next = 1'b1;
    80130                                        wren_next = 1'b0;
    81                                         state_next = 4'd3;
     131                                        state_next = 4'd2;
    82132                                end
    83133                                else
     
    87137                        end
    88138       
     139                        2:
     140                        begin
     141                                if (data_ready)
     142                                begin
     143                                        wren_next = 1'b1;
     144                                        state_next = 4'd3;
     145                                end
     146                        end
     147
    89148                        3:
    90149                        begin
     150                                // stop write
     151                                wren_next = 1'b0;
     152                                addr_next = addr_reg + 10'd1;
     153
    91154                                if (&counter_reg)
    92155                                begin
     156                                        flag_next = 1'b0;
    93157                                        state_next = 4'd0;
    94158                                end
    95                                 else if (data_ready)
     159                                else
    96160                                begin
    97                                         // start write
    98                                         wren_next = 1'b1;
    99                                         data_next = raw_data;
     161                                        state_next = 4'd2;
     162
    100163                                        if ((~trig_reg)
    101164                                                & (counter_reg == 10'd512)
     
    106169                                                trig_addr_next = addr_reg;
    107170                                        end
    108                                         state_next = 4'd4;
     171                                       
     172                                        if (trig_reg | (counter_reg < 10'd512))
     173                                        begin
     174                                                counter_next = counter_reg + 10'd1;
     175                                        end
    109176                                end
    110                         end
    111 
    112                         4:
    113                         begin
    114                                 // stop write
    115                                 wren_next = 1'b0;
    116                                 addr_next = addr_reg + 10'd1;
    117                                 if (trig_reg | (counter_reg < 10'd512))
    118                                 begin
    119                                         counter_next = counter_reg + 10'd1;
    120                                 end
    121                                 state_next = 4'd3;
    122177                        end
    123178
    124179                        default:
    125180                        begin
    126                                 state_next = 4'd0;
     181                                state_next = 4'b0;
     182                                flag_next = 1'b0;
     183                                wren_next = 1'b0;
     184                                addr_next = 10'd0;
     185                                data_next = 16'd0;
     186                                trig_next = 1'b0;
     187                                trig_addr_next = 10'd0;
     188                                counter_next = 10'd0;
    127189                        end
    128190                endcase
Note: See TracChangeset for help on using the changeset viewer.