| 1 | //----------------------------------------------------------------------------- |
| 2 | // Copyright (C) 2014 iZsh <izsh at fail0verflow.com> |
| 3 | // |
| 4 | // This code is licensed to you under the terms of the GNU GPL, version 2 or, |
| 5 | // at your option, any later version. See the LICENSE.txt file for the text of |
| 6 | // the license. |
| 7 | //----------------------------------------------------------------------------- |
| 8 | // testbench for min_max_tracker |
| 9 | `include "min_max_tracker.v" |
| 10 | |
| 11 | `define FIN "tb_tmp/data.filtered.gold" |
| 12 | `define FOUT_MIN "tb_tmp/data.min" |
| 13 | `define FOUT_MAX "tb_tmp/data.max" |
| 14 | |
| 15 | module min_max_tracker_tb; |
| 16 | |
| 17 | integer fin; |
| 18 | integer fout_min, fout_max; |
| 19 | integer r; |
| 20 | |
| 21 | reg clk; |
| 22 | reg [7:0] adc_d; |
| 23 | wire [7:0] min; |
| 24 | wire [7:0] max; |
| 25 | |
| 26 | initial |
| 27 | begin |
| 28 | clk = 0; |
| 29 | fin = $fopen(`FIN, "r"); |
| 30 | if (!fin) begin |
| 31 | $display("ERROR: can't open the data file"); |
| 32 | $finish; |
| 33 | end |
| 34 | fout_min = $fopen(`FOUT_MIN, "w+"); |
| 35 | fout_max = $fopen(`FOUT_MAX, "w+"); |
| 36 | if (!$feof(fin)) |
| 37 | adc_d = $fgetc(fin); // read the first value |
| 38 | end |
| 39 | |
| 40 | always |
| 41 | # 1 clk = !clk; |
| 42 | |
| 43 | // input |
| 44 | initial |
| 45 | begin |
| 46 | while (!$feof(fin)) begin |
| 47 | @(negedge clk) adc_d <= $fgetc(fin); |
| 48 | end |
| 49 | |
| 50 | if ($feof(fin)) |
| 51 | begin |
| 52 | # 3 $fclose(fin); |
| 53 | $fclose(fout_min); |
| 54 | $fclose(fout_max); |
| 55 | $finish; |
| 56 | end |
| 57 | end |
| 58 | |
| 59 | initial |
| 60 | begin |
| 61 | // $monitor("%d\t min: %x, max: %x", $time, min, max); |
| 62 | end |
| 63 | |
| 64 | // output |
| 65 | always @(negedge clk) |
| 66 | if ($time > 2) begin |
| 67 | r = $fputc(min, fout_min); |
| 68 | r = $fputc(max, fout_max); |
| 69 | end |
| 70 | |
| 71 | // module to test |
| 72 | min_max_tracker tracker(clk, adc_d, 8'd127, min, max); |
| 73 | |
| 74 | endmodule |