Explorar el Código

Fix reset and minor efficiency improvement + gitignore

Matt Coles hace 8 años
padre
commit
112d058866
Se han modificado 7 ficheros con 11 adiciones y 840 borrados
  1. 3 0
      .gitignore
  2. 0 2
      build
  3. 6 3
      fifo_tb.v
  4. 0 372
      out/sim
  5. 0 457
      out/waves.vcd
  6. 2 5
      simple_fifo.v
  7. 0 1
      test

+ 3 - 0
.gitignore

@@ -0,0 +1,3 @@
1
+out/
2
+build
3
+test

+ 0 - 2
build

@@ -1,2 +0,0 @@
1
-mkdir -p out
2
-iverilog -o out/sim simple_fifo.v fifo_tb.v

+ 6 - 3
fifo_tb.v

@@ -1,3 +1,4 @@
1
+`timescale 100ps/1ps
1 2
 module fifo_tb;
2 3
 
3 4
 reg reset_n;
@@ -21,16 +22,18 @@ simple_fifo dut (
21 22
 
22 23
 initial begin
23 24
   clk = 1'b0;
24
-  reset_n = 1'b1;
25
-  repeat(4) #10 clk = ~clk;
26 25
   reset_n = 1'b0;
26
+  repeat(4) #10 clk = ~clk;
27
+  reset_n = 1'b1;
27 28
   forever #10 clk = ~clk; // generate a clock
28 29
 end
29 30
 
30 31
 reg [15:0] tmp;
31 32
 initial begin
32 33
   data_in = 16'h0; // initial value
33
-  @(negedge reset_n); // wait for reset
34
+  fifo_push = 1'b0;
35
+  fifo_pop = 1'b0;
36
+  @(posedge reset_n); // wait for reset
34 37
   data_in = 16'hffff;
35 38
   repeat (8) begin
36 39
     @(posedge clk);

+ 0 - 372
out/sim

@@ -1,372 +0,0 @@
1
-#! /usr/local/Cellar/icarus-verilog/10.1.1/bin/vvp
2
-:ivl_version "10.1 (stable)" "(v10_1_1)";
3
-:ivl_delay_selection "TYPICAL";
4
-:vpi_time_precision + 0;
5
-:vpi_module "system";
6
-:vpi_module "vhdl_sys";
7
-:vpi_module "v2005_math";
8
-:vpi_module "va_math";
9
-S_0x7fa2f94081a0 .scope module, "fifo_tb" "fifo_tb" 2 1;
10
- .timescale 0 0;
11
-v0x7fa2f942c150_0 .var "clk", 0 0;
12
-v0x7fa2f942c210_0 .var "data_in", 15 0;
13
-v0x7fa2f942c2a0_0 .net "data_out", 15 0, v0x7fa2f942bb50_0;  1 drivers
14
-v0x7fa2f942c350_0 .net "empty", 0 0, v0x7fa2f942bbe0_0;  1 drivers
15
-v0x7fa2f942c400_0 .var "fifo_pop", 0 0;
16
-v0x7fa2f942c4d0_0 .var "fifo_push", 0 0;
17
-v0x7fa2f942c560_0 .net "full", 0 0, v0x7fa2f942bcb0_0;  1 drivers
18
-v0x7fa2f942c610_0 .var "reset_n", 0 0;
19
-v0x7fa2f942c6c0_0 .var "tmp", 15 0;
20
-E_0x7fa2f9415f70 .event negedge, v0x7fa2f9417170_0;
21
-E_0x7fa2f9415e20 .event negedge, v0x7fa2f942bf80_0;
22
-S_0x7fa2f941c480 .scope module, "dut" "simple_fifo" 2 9, 3 4 0, S_0x7fa2f94081a0;
23
- .timescale 0 0;
24
-    .port_info 0 /INPUT 1 "clk"
25
-    .port_info 1 /INPUT 1 "reset_n"
26
-    .port_info 2 /INPUT 1 "push"
27
-    .port_info 3 /INPUT 1 "pop"
28
-    .port_info 4 /INPUT 16 "data_in"
29
-    .port_info 5 /OUTPUT 16 "data_out"
30
-    .port_info 6 /OUTPUT 1 "full"
31
-    .port_info 7 /OUTPUT 1 "empty"
32
-P_0x7fa2f9403670 .param/l "DEPTH" 0 3 5, +C4<00000000000000000000000000001000>;
33
-P_0x7fa2f94036b0 .param/l "WIDTH" 0 3 6, +C4<00000000000000000000000000010000>;
34
-v0x7fa2f9417170_0 .net "clk", 0 0, v0x7fa2f942c150_0;  1 drivers
35
-v0x7fa2f942ba20 .array "data", 0 7, 15 0;
36
-v0x7fa2f942bac0_0 .net "data_in", 15 0, v0x7fa2f942c210_0;  1 drivers
37
-v0x7fa2f942bb50_0 .var "data_out", 15 0;
38
-v0x7fa2f942bbe0_0 .var "empty", 0 0;
39
-v0x7fa2f942bcb0_0 .var "full", 0 0;
40
-v0x7fa2f942bd40_0 .net "pop", 0 0, v0x7fa2f942c400_0;  1 drivers
41
-v0x7fa2f942bdd0_0 .net "push", 0 0, v0x7fa2f942c4d0_0;  1 drivers
42
-v0x7fa2f942be70_0 .var "rd_ptr", 2 0;
43
-v0x7fa2f942bf80_0 .net "reset_n", 0 0, v0x7fa2f942c610_0;  1 drivers
44
-v0x7fa2f942c020_0 .var "wr_ptr", 2 0;
45
-E_0x7fa2f9416e90 .event posedge, v0x7fa2f9417170_0;
46
-    .scope S_0x7fa2f941c480;
47
-T_0 ;
48
-    %wait E_0x7fa2f9416e90;
49
-    %load/vec4 v0x7fa2f942bf80_0;
50
-    %flag_set/vec4 8;
51
-    %jmp/0xz  T_0.0, 8;
52
-    %pushi/vec4 0, 0, 3;
53
-    %assign/vec4 v0x7fa2f942be70_0, 0;
54
-    %pushi/vec4 0, 0, 3;
55
-    %assign/vec4 v0x7fa2f942c020_0, 0;
56
-    %pushi/vec4 0, 0, 1;
57
-    %assign/vec4 v0x7fa2f942bcb0_0, 0;
58
-    %pushi/vec4 1, 0, 1;
59
-    %assign/vec4 v0x7fa2f942bbe0_0, 0;
60
-    %jmp T_0.1;
61
-T_0.0 ;
62
-    %load/vec4 v0x7fa2f942bdd0_0;
63
-    %load/vec4 v0x7fa2f942bcb0_0;
64
-    %inv;
65
-    %and;
66
-    %flag_set/vec4 8;
67
-    %jmp/0xz  T_0.2, 8;
68
-    %load/vec4 v0x7fa2f942bac0_0;
69
-    %load/vec4 v0x7fa2f942c020_0;
70
-    %pad/u 5;
71
-    %ix/vec4 3;
72
-    %ix/load 4, 0, 0; Constant delay
73
-    %assign/vec4/a/d v0x7fa2f942ba20, 0, 4;
74
-    %load/vec4 v0x7fa2f942c020_0;
75
-    %addi 1, 0, 3;
76
-    %store/vec4 v0x7fa2f942c020_0, 0, 3;
77
-    %load/vec4 v0x7fa2f942c020_0;
78
-    %load/vec4 v0x7fa2f942be70_0;
79
-    %cmp/e;
80
-    %jmp/0xz  T_0.4, 4;
81
-    %pushi/vec4 1, 0, 1;
82
-    %assign/vec4 v0x7fa2f942bcb0_0, 0;
83
-    %pushi/vec4 0, 0, 1;
84
-    %assign/vec4 v0x7fa2f942bbe0_0, 0;
85
-    %jmp T_0.5;
86
-T_0.4 ;
87
-    %pushi/vec4 0, 0, 1;
88
-    %assign/vec4 v0x7fa2f942bcb0_0, 0;
89
-    %pushi/vec4 0, 0, 1;
90
-    %assign/vec4 v0x7fa2f942bbe0_0, 0;
91
-T_0.5 ;
92
-T_0.2 ;
93
-    %load/vec4 v0x7fa2f942bd40_0;
94
-    %load/vec4 v0x7fa2f942bbe0_0;
95
-    %inv;
96
-    %and;
97
-    %flag_set/vec4 8;
98
-    %jmp/0xz  T_0.6, 8;
99
-    %load/vec4 v0x7fa2f942be70_0;
100
-    %pad/u 5;
101
-    %ix/vec4 4;
102
-    %load/vec4a v0x7fa2f942ba20, 4;
103
-    %assign/vec4 v0x7fa2f942bb50_0, 0;
104
-    %load/vec4 v0x7fa2f942be70_0;
105
-    %addi 1, 0, 3;
106
-    %store/vec4 v0x7fa2f942be70_0, 0, 3;
107
-    %load/vec4 v0x7fa2f942c020_0;
108
-    %load/vec4 v0x7fa2f942be70_0;
109
-    %cmp/e;
110
-    %jmp/0xz  T_0.8, 4;
111
-    %pushi/vec4 0, 0, 1;
112
-    %assign/vec4 v0x7fa2f942bcb0_0, 0;
113
-    %pushi/vec4 1, 0, 1;
114
-    %assign/vec4 v0x7fa2f942bbe0_0, 0;
115
-    %jmp T_0.9;
116
-T_0.8 ;
117
-    %pushi/vec4 0, 0, 1;
118
-    %assign/vec4 v0x7fa2f942bcb0_0, 0;
119
-    %pushi/vec4 0, 0, 1;
120
-    %assign/vec4 v0x7fa2f942bbe0_0, 0;
121
-T_0.9 ;
122
-T_0.6 ;
123
-T_0.1 ;
124
-    %jmp T_0;
125
-    .thread T_0;
126
-    .scope S_0x7fa2f94081a0;
127
-T_1 ;
128
-    %pushi/vec4 0, 0, 1;
129
-    %store/vec4 v0x7fa2f942c150_0, 0, 1;
130
-    %pushi/vec4 1, 0, 1;
131
-    %store/vec4 v0x7fa2f942c610_0, 0, 1;
132
-    %pushi/vec4 4, 0, 32;
133
-T_1.0 %dup/vec4;
134
-    %pushi/vec4 0, 0, 32;
135
-    %cmp/s;
136
-    %jmp/1xz T_1.1, 5;
137
-    %jmp/1 T_1.1, 4;
138
-    %pushi/vec4 1, 0, 32;
139
-    %sub;
140
-    %delay 10, 0;
141
-    %load/vec4 v0x7fa2f942c150_0;
142
-    %inv;
143
-    %store/vec4 v0x7fa2f942c150_0, 0, 1;
144
-    %jmp T_1.0;
145
-T_1.1 ;
146
-    %pop/vec4 1;
147
-    %pushi/vec4 0, 0, 1;
148
-    %store/vec4 v0x7fa2f942c610_0, 0, 1;
149
-T_1.2 ;
150
-    %delay 10, 0;
151
-    %load/vec4 v0x7fa2f942c150_0;
152
-    %inv;
153
-    %store/vec4 v0x7fa2f942c150_0, 0, 1;
154
-    %jmp T_1.2;
155
-    %end;
156
-    .thread T_1;
157
-    .scope S_0x7fa2f94081a0;
158
-T_2 ;
159
-    %pushi/vec4 0, 0, 16;
160
-    %store/vec4 v0x7fa2f942c210_0, 0, 16;
161
-    %wait E_0x7fa2f9415e20;
162
-    %pushi/vec4 65535, 0, 16;
163
-    %store/vec4 v0x7fa2f942c210_0, 0, 16;
164
-    %pushi/vec4 8, 0, 32;
165
-T_2.0 %dup/vec4;
166
-    %pushi/vec4 0, 0, 32;
167
-    %cmp/s;
168
-    %jmp/1xz T_2.1, 5;
169
-    %jmp/1 T_2.1, 4;
170
-    %pushi/vec4 1, 0, 32;
171
-    %sub;
172
-    %wait E_0x7fa2f9416e90;
173
-    %pushi/vec4 1, 0, 1;
174
-    %store/vec4 v0x7fa2f942c4d0_0, 0, 1;
175
-    %wait E_0x7fa2f9415f70;
176
-    %pushi/vec4 0, 0, 1;
177
-    %store/vec4 v0x7fa2f942c4d0_0, 0, 1;
178
-    %load/vec4 v0x7fa2f942c210_0;
179
-    %inv;
180
-    %store/vec4 v0x7fa2f942c210_0, 0, 16;
181
-    %jmp T_2.0;
182
-T_2.1 ;
183
-    %pop/vec4 1;
184
-    %load/vec4 v0x7fa2f942c560_0;
185
-    %pad/u 32;
186
-    %pushi/vec4 1, 0, 32;
187
-    %cmp/e;
188
-    %flag_get/vec4 4;
189
-    %inv;
190
-    %load/vec4 v0x7fa2f942c350_0;
191
-    %pad/u 32;
192
-    %pushi/vec4 0, 0, 32;
193
-    %cmp/e;
194
-    %flag_get/vec4 4;
195
-    %inv;
196
-    %and;
197
-    %flag_set/vec4 8;
198
-    %jmp/0xz  T_2.2, 8;
199
-    %vpi_call 2 43 "$display", "Test failed!" {0 0 0};
200
-T_2.2 ;
201
-    %pushi/vec4 65535, 0, 16;
202
-    %store/vec4 v0x7fa2f942c6c0_0, 0, 16;
203
-    %pushi/vec4 8, 0, 32;
204
-T_2.4 %dup/vec4;
205
-    %pushi/vec4 0, 0, 32;
206
-    %cmp/s;
207
-    %jmp/1xz T_2.5, 5;
208
-    %jmp/1 T_2.5, 4;
209
-    %pushi/vec4 1, 0, 32;
210
-    %sub;
211
-    %wait E_0x7fa2f9416e90;
212
-    %pushi/vec4 1, 0, 1;
213
-    %store/vec4 v0x7fa2f942c400_0, 0, 1;
214
-    %wait E_0x7fa2f9415f70;
215
-    %pushi/vec4 0, 0, 1;
216
-    %store/vec4 v0x7fa2f942c400_0, 0, 1;
217
-    %load/vec4 v0x7fa2f942c2a0_0;
218
-    %load/vec4 v0x7fa2f942c6c0_0;
219
-    %cmp/ne;
220
-    %jmp/0xz  T_2.6, 6;
221
-    %vpi_call 2 52 "$display", "Test failed!" {0 0 0};
222
-T_2.6 ;
223
-    %load/vec4 v0x7fa2f942c6c0_0;
224
-    %inv;
225
-    %store/vec4 v0x7fa2f942c6c0_0, 0, 16;
226
-    %jmp T_2.4;
227
-T_2.5 ;
228
-    %pop/vec4 1;
229
-    %load/vec4 v0x7fa2f942c560_0;
230
-    %pad/u 32;
231
-    %pushi/vec4 0, 0, 32;
232
-    %cmp/e;
233
-    %flag_get/vec4 4;
234
-    %inv;
235
-    %load/vec4 v0x7fa2f942c350_0;
236
-    %pad/u 32;
237
-    %pushi/vec4 1, 0, 32;
238
-    %cmp/e;
239
-    %flag_get/vec4 4;
240
-    %inv;
241
-    %and;
242
-    %flag_set/vec4 8;
243
-    %jmp/0xz  T_2.8, 8;
244
-    %vpi_call 2 57 "$display", "Test failed!" {0 0 0};
245
-T_2.8 ;
246
-    %pushi/vec4 5, 0, 32;
247
-T_2.10 %dup/vec4;
248
-    %pushi/vec4 0, 0, 32;
249
-    %cmp/s;
250
-    %jmp/1xz T_2.11, 5;
251
-    %jmp/1 T_2.11, 4;
252
-    %pushi/vec4 1, 0, 32;
253
-    %sub;
254
-    %wait E_0x7fa2f9416e90;
255
-    %jmp T_2.10;
256
-T_2.11 ;
257
-    %pop/vec4 1;
258
-    %pushi/vec4 4660, 0, 16;
259
-    %store/vec4 v0x7fa2f942c210_0, 0, 16;
260
-    %pushi/vec4 8, 0, 32;
261
-T_2.12 %dup/vec4;
262
-    %pushi/vec4 0, 0, 32;
263
-    %cmp/s;
264
-    %jmp/1xz T_2.13, 5;
265
-    %jmp/1 T_2.13, 4;
266
-    %pushi/vec4 1, 0, 32;
267
-    %sub;
268
-    %wait E_0x7fa2f9416e90;
269
-    %pushi/vec4 1, 0, 1;
270
-    %store/vec4 v0x7fa2f942c4d0_0, 0, 1;
271
-    %wait E_0x7fa2f9415f70;
272
-    %pushi/vec4 0, 0, 1;
273
-    %store/vec4 v0x7fa2f942c4d0_0, 0, 1;
274
-    %load/vec4 v0x7fa2f942c210_0;
275
-    %inv;
276
-    %store/vec4 v0x7fa2f942c210_0, 0, 16;
277
-    %jmp T_2.12;
278
-T_2.13 ;
279
-    %pop/vec4 1;
280
-    %load/vec4 v0x7fa2f942c560_0;
281
-    %pad/u 32;
282
-    %pushi/vec4 1, 0, 32;
283
-    %cmp/e;
284
-    %flag_get/vec4 4;
285
-    %inv;
286
-    %load/vec4 v0x7fa2f942c350_0;
287
-    %pad/u 32;
288
-    %pushi/vec4 0, 0, 32;
289
-    %cmp/e;
290
-    %flag_get/vec4 4;
291
-    %inv;
292
-    %and;
293
-    %flag_set/vec4 8;
294
-    %jmp/0xz  T_2.14, 8;
295
-    %vpi_call 2 69 "$display", "Test failed!" {0 0 0};
296
-T_2.14 ;
297
-    %pushi/vec4 4660, 0, 16;
298
-    %store/vec4 v0x7fa2f942c6c0_0, 0, 16;
299
-    %pushi/vec4 8, 0, 32;
300
-T_2.16 %dup/vec4;
301
-    %pushi/vec4 0, 0, 32;
302
-    %cmp/s;
303
-    %jmp/1xz T_2.17, 5;
304
-    %jmp/1 T_2.17, 4;
305
-    %pushi/vec4 1, 0, 32;
306
-    %sub;
307
-    %wait E_0x7fa2f9416e90;
308
-    %pushi/vec4 1, 0, 1;
309
-    %store/vec4 v0x7fa2f942c400_0, 0, 1;
310
-    %wait E_0x7fa2f9415f70;
311
-    %pushi/vec4 0, 0, 1;
312
-    %store/vec4 v0x7fa2f942c400_0, 0, 1;
313
-    %load/vec4 v0x7fa2f942c2a0_0;
314
-    %load/vec4 v0x7fa2f942c6c0_0;
315
-    %cmp/ne;
316
-    %jmp/0xz  T_2.18, 6;
317
-    %vpi_call 2 78 "$display", "Test failed!" {0 0 0};
318
-T_2.18 ;
319
-    %load/vec4 v0x7fa2f942c6c0_0;
320
-    %inv;
321
-    %store/vec4 v0x7fa2f942c6c0_0, 0, 16;
322
-    %jmp T_2.16;
323
-T_2.17 ;
324
-    %pop/vec4 1;
325
-    %load/vec4 v0x7fa2f942c560_0;
326
-    %pad/u 32;
327
-    %pushi/vec4 0, 0, 32;
328
-    %cmp/e;
329
-    %flag_get/vec4 4;
330
-    %inv;
331
-    %load/vec4 v0x7fa2f942c350_0;
332
-    %pad/u 32;
333
-    %pushi/vec4 1, 0, 32;
334
-    %cmp/e;
335
-    %flag_get/vec4 4;
336
-    %inv;
337
-    %and;
338
-    %flag_set/vec4 8;
339
-    %jmp/0xz  T_2.20, 8;
340
-    %vpi_call 2 83 "$display", "Test failed!" {0 0 0};
341
-T_2.20 ;
342
-    %vpi_call 2 85 "$finish" {0 0 0};
343
-    %end;
344
-    .thread T_2;
345
-    .scope S_0x7fa2f94081a0;
346
-T_3 ;
347
-    %vpi_func 2 89 "$test$plusargs" 32, "waves=1" {0 0 0};
348
-    %cmpi/ne 0, 0, 32;
349
-    %jmp/0xz  T_3.0, 4;
350
-    %vpi_call 2 90 "$dumpfile", "out/waves.vcd" {0 0 0};
351
-    %vpi_call 2 91 "$dumpvars", 32'sb00000000000000000000000000000000, S_0x7fa2f94081a0 {0 0 0};
352
-    %vpi_func 2 92 "$test$plusargs" 32, "dump_fifo=1" {0 0 0};
353
-    %cmpi/ne 0, 0, 32;
354
-    %jmp/0xz  T_3.2, 4;
355
-    %vpi_call 2 93 "$dumpvars", 32'sb00000000000000000000000000000000, &A<v0x7fa2f942ba20, 0> {0 0 0};
356
-    %vpi_call 2 94 "$dumpvars", 32'sb00000000000000000000000000000000, &A<v0x7fa2f942ba20, 1> {0 0 0};
357
-    %vpi_call 2 95 "$dumpvars", 32'sb00000000000000000000000000000000, &A<v0x7fa2f942ba20, 2> {0 0 0};
358
-    %vpi_call 2 96 "$dumpvars", 32'sb00000000000000000000000000000000, &A<v0x7fa2f942ba20, 3> {0 0 0};
359
-    %vpi_call 2 97 "$dumpvars", 32'sb00000000000000000000000000000000, &A<v0x7fa2f942ba20, 4> {0 0 0};
360
-    %vpi_call 2 98 "$dumpvars", 32'sb00000000000000000000000000000000, &A<v0x7fa2f942ba20, 5> {0 0 0};
361
-    %vpi_call 2 99 "$dumpvars", 32'sb00000000000000000000000000000000, &A<v0x7fa2f942ba20, 6> {0 0 0};
362
-    %vpi_call 2 100 "$dumpvars", 32'sb00000000000000000000000000000000, &A<v0x7fa2f942ba20, 7> {0 0 0};
363
-T_3.2 ;
364
-T_3.0 ;
365
-    %end;
366
-    .thread T_3;
367
-# The file index is used to find the file name in the following table.
368
-:file_names 4;
369
-    "N/A";
370
-    "<interactive>";
371
-    "fifo_tb.v";
372
-    "simple_fifo.v";

+ 0 - 457
out/waves.vcd

@@ -1,457 +0,0 @@
1
-$date
2
-	Mon May 22 18:16:34 2017
3
-$end
4
-$version
5
-	Icarus Verilog
6
-$end
7
-$timescale
8
-	1s
9
-$end
10
-$scope module fifo_tb $end
11
-$var wire 1 ! full $end
12
-$var wire 1 " empty $end
13
-$var wire 16 # data_out [15:0] $end
14
-$var reg 1 $ clk $end
15
-$var reg 16 % data_in [15:0] $end
16
-$var reg 1 & fifo_pop $end
17
-$var reg 1 ' fifo_push $end
18
-$var reg 1 ( reset_n $end
19
-$var reg 16 ) tmp [15:0] $end
20
-$scope module dut $end
21
-$var wire 1 $ clk $end
22
-$var wire 16 * data_in [15:0] $end
23
-$var wire 1 & pop $end
24
-$var wire 1 ' push $end
25
-$var wire 1 ( reset_n $end
26
-$var reg 16 + data_out [15:0] $end
27
-$var reg 1 " empty $end
28
-$var reg 1 ! full $end
29
-$var reg 3 , rd_ptr [2:0] $end
30
-$var reg 3 - wr_ptr [2:0] $end
31
-$upscope $end
32
-$upscope $end
33
-$scope module fifo_tb $end
34
-$scope module dut $end
35
-$var reg 16 . \data[0] [15:0] $end
36
-$upscope $end
37
-$upscope $end
38
-$scope module fifo_tb $end
39
-$scope module dut $end
40
-$var reg 16 / \data[1] [15:0] $end
41
-$upscope $end
42
-$upscope $end
43
-$scope module fifo_tb $end
44
-$scope module dut $end
45
-$var reg 16 0 \data[2] [15:0] $end
46
-$upscope $end
47
-$upscope $end
48
-$scope module fifo_tb $end
49
-$scope module dut $end
50
-$var reg 16 1 \data[3] [15:0] $end
51
-$upscope $end
52
-$upscope $end
53
-$scope module fifo_tb $end
54
-$scope module dut $end
55
-$var reg 16 2 \data[4] [15:0] $end
56
-$upscope $end
57
-$upscope $end
58
-$scope module fifo_tb $end
59
-$scope module dut $end
60
-$var reg 16 3 \data[5] [15:0] $end
61
-$upscope $end
62
-$upscope $end
63
-$scope module fifo_tb $end
64
-$scope module dut $end
65
-$var reg 16 4 \data[6] [15:0] $end
66
-$upscope $end
67
-$upscope $end
68
-$scope module fifo_tb $end
69
-$scope module dut $end
70
-$var reg 16 5 \data[7] [15:0] $end
71
-$upscope $end
72
-$upscope $end
73
-$enddefinitions $end
74
-#0
75
-$dumpvars
76
-bx 5
77
-bx 4
78
-bx 3
79
-bx 2
80
-bx 1
81
-bx 0
82
-bx /
83
-bx .
84
-bx -
85
-bx ,
86
-bx +
87
-b0 *
88
-bx )
89
-1(
90
-x'
91
-x&
92
-b0 %
93
-0$
94
-bx #
95
-x"
96
-x!
97
-$end
98
-#10
99
-1"
100
-0!
101
-b0 -
102
-b0 ,
103
-1$
104
-#20
105
-0$
106
-#30
107
-1$
108
-#40
109
-b1111111111111111 %
110
-b1111111111111111 *
111
-0(
112
-0$
113
-#50
114
-0"
115
-b1111111111111111 .
116
-b1 -
117
-1'
118
-1$
119
-#60
120
-b0 %
121
-b0 *
122
-0'
123
-0$
124
-#70
125
-b0 /
126
-b10 -
127
-1'
128
-1$
129
-#80
130
-b1111111111111111 %
131
-b1111111111111111 *
132
-0'
133
-0$
134
-#90
135
-b1111111111111111 0
136
-b11 -
137
-1'
138
-1$
139
-#100
140
-b0 %
141
-b0 *
142
-0'
143
-0$
144
-#110
145
-b0 1
146
-b100 -
147
-1'
148
-1$
149
-#120
150
-b1111111111111111 %
151
-b1111111111111111 *
152
-0'
153
-0$
154
-#130
155
-b1111111111111111 2
156
-b101 -
157
-1'
158
-1$
159
-#140
160
-b0 %
161
-b0 *
162
-0'
163
-0$
164
-#150
165
-b0 3
166
-b110 -
167
-1'
168
-1$
169
-#160
170
-b1111111111111111 %
171
-b1111111111111111 *
172
-0'
173
-0$
174
-#170
175
-b1111111111111111 4
176
-b111 -
177
-1'
178
-1$
179
-#180
180
-b0 %
181
-b0 *
182
-0'
183
-0$
184
-#190
185
-1!
186
-b0 5
187
-b0 -
188
-1'
189
-1$
190
-#200
191
-b1111111111111111 )
192
-b1111111111111111 %
193
-b1111111111111111 *
194
-0'
195
-0$
196
-#210
197
-0!
198
-b1111111111111111 #
199
-b1111111111111111 +
200
-b1 ,
201
-1&
202
-1$
203
-#220
204
-b0 )
205
-0&
206
-0$
207
-#230
208
-b0 #
209
-b0 +
210
-b10 ,
211
-1&
212
-1$
213
-#240
214
-b1111111111111111 )
215
-0&
216
-0$
217
-#250
218
-b1111111111111111 #
219
-b1111111111111111 +
220
-b11 ,
221
-1&
222
-1$
223
-#260
224
-b0 )
225
-0&
226
-0$
227
-#270
228
-b0 #
229
-b0 +
230
-b100 ,
231
-1&
232
-1$
233
-#280
234
-b1111111111111111 )
235
-0&
236
-0$
237
-#290
238
-b1111111111111111 #
239
-b1111111111111111 +
240
-b101 ,
241
-1&
242
-1$
243
-#300
244
-b0 )
245
-0&
246
-0$
247
-#310
248
-b0 #
249
-b0 +
250
-b110 ,
251
-1&
252
-1$
253
-#320
254
-b1111111111111111 )
255
-0&
256
-0$
257
-#330
258
-b1111111111111111 #
259
-b1111111111111111 +
260
-b111 ,
261
-1&
262
-1$
263
-#340
264
-b0 )
265
-0&
266
-0$
267
-#350
268
-1"
269
-b0 #
270
-b0 +
271
-b0 ,
272
-1&
273
-1$
274
-#360
275
-b1111111111111111 )
276
-0&
277
-0$
278
-#370
279
-1$
280
-#380
281
-0$
282
-#390
283
-1$
284
-#400
285
-0$
286
-#410
287
-1$
288
-#420
289
-0$
290
-#430
291
-1$
292
-#440
293
-0$
294
-#450
295
-b1001000110100 %
296
-b1001000110100 *
297
-1$
298
-#460
299
-0$
300
-#470
301
-1'
302
-1$
303
-#480
304
-b1110110111001011 %
305
-b1110110111001011 *
306
-0'
307
-0$
308
-#490
309
-0"
310
-b1110110111001011 .
311
-b1 -
312
-1'
313
-1$
314
-#500
315
-b1001000110100 %
316
-b1001000110100 *
317
-0'
318
-0$
319
-#510
320
-b1001000110100 /
321
-b10 -
322
-1'
323
-1$
324
-#520
325
-b1110110111001011 %
326
-b1110110111001011 *
327
-0'
328
-0$
329
-#530
330
-b1110110111001011 0
331
-b11 -
332
-1'
333
-1$
334
-#540
335
-b1001000110100 %
336
-b1001000110100 *
337
-0'
338
-0$
339
-#550
340
-b1001000110100 1
341
-b100 -
342
-1'
343
-1$
344
-#560
345
-b1110110111001011 %
346
-b1110110111001011 *
347
-0'
348
-0$
349
-#570
350
-b1110110111001011 2
351
-b101 -
352
-1'
353
-1$
354
-#580
355
-b1001000110100 %
356
-b1001000110100 *
357
-0'
358
-0$
359
-#590
360
-b1001000110100 3
361
-b110 -
362
-1'
363
-1$
364
-#600
365
-b1110110111001011 %
366
-b1110110111001011 *
367
-0'
368
-0$
369
-#610
370
-b1110110111001011 4
371
-b111 -
372
-1'
373
-1$
374
-#620
375
-b1001000110100 )
376
-b1001000110100 %
377
-b1001000110100 *
378
-0'
379
-0$
380
-#630
381
-b1110110111001011 #
382
-b1110110111001011 +
383
-b1 ,
384
-1&
385
-1$
386
-#640
387
-b1110110111001011 )
388
-0&
389
-0$
390
-#650
391
-b1001000110100 #
392
-b1001000110100 +
393
-b10 ,
394
-1&
395
-1$
396
-#660
397
-b1001000110100 )
398
-0&
399
-0$
400
-#670
401
-b1110110111001011 #
402
-b1110110111001011 +
403
-b11 ,
404
-1&
405
-1$
406
-#680
407
-b1110110111001011 )
408
-0&
409
-0$
410
-#690
411
-b1001000110100 #
412
-b1001000110100 +
413
-b100 ,
414
-1&
415
-1$
416
-#700
417
-b1001000110100 )
418
-0&
419
-0$
420
-#710
421
-b1110110111001011 #
422
-b1110110111001011 +
423
-b101 ,
424
-1&
425
-1$
426
-#720
427
-b1110110111001011 )
428
-0&
429
-0$
430
-#730
431
-b1001000110100 #
432
-b1001000110100 +
433
-b110 ,
434
-1&
435
-1$
436
-#740
437
-b1001000110100 )
438
-0&
439
-0$
440
-#750
441
-1"
442
-b1110110111001011 #
443
-b1110110111001011 +
444
-b111 ,
445
-1&
446
-1$
447
-#760
448
-b1110110111001011 )
449
-0&
450
-0$
451
-#770
452
-1&
453
-1$
454
-#780
455
-b1001000110100 )
456
-0&
457
-0$

+ 2 - 5
simple_fifo.v

@@ -1,3 +1,4 @@
1
+`timescale 100ps/1ps
1 2
 /*
2 3
 * DEPTH must be a power of 2
3 4
 */
@@ -22,7 +23,7 @@ reg [$clog2(DEPTH)-1:0] wr_ptr;
22 23
 reg [WIDTH-1:0] data [DEPTH-1:0];
23 24
 
24 25
 always @(posedge clk) begin
25
-  if (reset_n) begin
26
+  if (~reset_n) begin
26 27
     rd_ptr <= 0;
27 28
     wr_ptr <= 0;
28 29
     full <= 0;
@@ -34,10 +35,8 @@ always @(posedge clk) begin
34 35
       wr_ptr = wr_ptr + 1;
35 36
       if (wr_ptr == rd_ptr) begin
36 37
         full <= 1'b1;
37
-        empty <= 1'b0;
38 38
       end
39 39
       else begin
40
-        full <= 1'b0;
41 40
         empty <= 1'b0;
42 41
       end
43 42
     end
@@ -45,12 +44,10 @@ always @(posedge clk) begin
45 44
       data_out <= data[rd_ptr];
46 45
       rd_ptr = rd_ptr + 1;
47 46
       if (wr_ptr == rd_ptr) begin
48
-        full <= 1'b0;
49 47
         empty <= 1'b1;
50 48
       end
51 49
       else begin
52 50
         full <= 1'b0;
53
-        empty <= 1'b0;
54 51
       end
55 52
     end
56 53
   end

+ 0 - 1
test

@@ -1 +0,0 @@
1
-./out/sim +waves=1 +dump_fifo=1