OpenCores
URL https://opencores.org/ocsvn/eco32/eco32/trunk

Subversion Repositories eco32

[/] [eco32/] [trunk/] [fpga/] [experiments/] [memspeed-2/] [src/] [memspeed.v] - Blame information for rev 325

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 325 hellwig
//
2
// memspeed.v -- toplevel for memory speedometer
3
//
4
 
5
 
6
`timescale 1ns/10ps
7
`default_nettype none
8
 
9
 
10
module memspeed(clk_in,
11
                rst_inout_n,
12
                sdram_clk,
13
                sdram_fb,
14
                sdram_cke,
15
                sdram_cs_n,
16
                sdram_ras_n,
17
                sdram_cas_n,
18
                sdram_we_n,
19
                sdram_ba,
20
                sdram_a,
21
                sdram_udqm,
22
                sdram_ldqm,
23
                sdram_dq,
24
                ssl
25
               );
26
    // clock and reset
27
    input clk_in;
28
    inout rst_inout_n;
29
    // SDRAM
30
    output sdram_clk;
31
    input sdram_fb;
32
    output sdram_cke;
33
    output sdram_cs_n;
34
    output sdram_ras_n;
35
    output sdram_cas_n;
36
    output sdram_we_n;
37
    output [1:0] sdram_ba;
38
    output [12:0] sdram_a;
39
    output sdram_udqm;
40
    output sdram_ldqm;
41
    inout [15:0] sdram_dq;
42
    // 7 segment LED output
43
    output [6:0] ssl;
44
 
45
  // clk_rst
46
  wire clk_ok;
47
  wire clk;
48
  wire rst;
49
  // ram
50
  reg stb;
51
  wire we;
52
  wire [25:0] inst_addr;
53
  wire [63:0] inst_dout;
54
  wire inst_ack;
55
  wire inst_timeout;
56
  wire [25:0] data_addr;
57
  wire [63:0] data_din;
58
  wire [63:0] data_dout;
59
  wire data_ack;
60
  wire data_timeout;
61
  // control
62
  reg [27:0] count;
63
  reg next_count;
64
  reg [1:0] state;
65
  reg [1:0] next_state;
66
 
67
  clk_rst clk_rst_1(
68
    .clk_in(clk_in),
69
    .rst_inout_n(rst_inout_n),
70
    .sdram_clk(sdram_clk),
71
    .sdram_fb(sdram_fb),
72
    .clk_ok(clk_ok),
73
    .clk(clk),
74
    .rst(rst)
75
  );
76
 
77
  ramctrl ramctrl_1(
78
    .clk_ok(clk_ok),
79
    .clk(clk),
80
    .inst_stb(stb & (~count[0] & ~we)),
81
    .inst_addr(inst_addr[25:0]),
82
    .inst_dout(inst_dout[63:0]),
83
    .inst_ack(inst_ack),
84
    .inst_timeout(inst_timeout),
85
    .data_stb(stb & (count[0] | we)),
86
    .data_we(we),
87
    .data_addr(data_addr[25:0]),
88
    .data_din(data_din[63:0]),
89
    .data_dout(data_dout[63:0]),
90
    .data_ack(data_ack),
91
    .data_timeout(data_timeout),
92
    .sdram_cke(sdram_cke),
93
    .sdram_cs_n(sdram_cs_n),
94
    .sdram_ras_n(sdram_ras_n),
95
    .sdram_cas_n(sdram_cas_n),
96
    .sdram_we_n(sdram_we_n),
97
    .sdram_ba(sdram_ba),
98
    .sdram_a(sdram_a),
99
    .sdram_udqm(sdram_udqm),
100
    .sdram_ldqm(sdram_ldqm),
101
    .sdram_dq(sdram_dq)
102
  );
103
 
104
  assign we = count[1] & count[0];
105
  assign inst_addr[25:0] = { count[27], count[27],
106
                             count[27], count[27],
107
                             count[21:0] ^ 23'h1234 };
108
  assign data_addr[25:0] = { count[27], count[27],
109
                             count[27], count[27],
110
                             count[21:0] ^ 23'h2345 };
111
  assign data_din[63:0] = { count[15:0], count[15:0],
112
                            count[15:0], count[15:0] };
113
 
114
  always @(posedge clk) begin
115
    if (rst) begin
116
      count <= 0;
117
    end else begin
118
      if (next_count) begin
119
        count <= count + 1;
120
      end
121
    end
122
  end
123
 
124
  always @(posedge clk) begin
125
    if (rst) begin
126
      state <= 0;
127
    end else begin
128
      state <= next_state;
129
    end
130
  end
131
 
132
  always @(*) begin
133
    case (state)
134
      2'd0:
135
        begin
136
          stb = 0;
137
          next_count = 0;
138
          next_state = 1;
139
        end
140
      2'd1:
141
        begin
142
          stb = 1;
143
          next_count = 0;
144
          if (inst_ack | inst_timeout |
145
              data_ack | data_timeout) begin
146
            next_state = 2;
147
          end else begin
148
            next_state = 1;
149
          end
150
        end
151
      2'd2:
152
        begin
153
          stb = 0;
154
          next_count = 1;
155
          if (count[27]) begin
156
            next_state = 3;
157
          end else begin
158
            next_state = 1;
159
          end
160
        end
161
      2'd3:
162
        begin
163
          stb = 0;
164
          next_count = 0;
165
          next_state = 3;
166
        end
167
    endcase
168
  end
169
 
170
  assign ssl[0] = 0;
171
  assign ssl[1] = | state[1:0];
172
  assign ssl[2] = & state[1:0];
173
  assign ssl[3] = 0;
174
  assign ssl[4] = inst_timeout;
175
  assign ssl[5] = data_timeout;
176
  assign ssl[6] = ^ (inst_dout[63:0] | data_dout[63:0]);
177
 
178
endmodule

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.