xiiregexbuilder

FPGA-Accelerated Regular Expression Matching Engine

processor/tb_regex_cpu.v (2496B)


  1`timescale 1ns / 1ps
  2
  3module tb_regex_cpu;
  4
  5  reg         clk;
  6  reg         rst;
  7  reg         start;
  8  reg         end_of_str;
  9  reg  [ 7:0] char_in;
 10  reg         char_valid;
 11
 12  reg         prog_en;
 13  reg  [ 7:0] prog_addr;
 14  reg  [31:0] prog_data;
 15
 16  wire        ready;
 17  wire [15:0] match_bus;
 18
 19  regex_cpu #(
 20      .NUM_REGEX(16)
 21  ) uut (
 22      .clk(clk),
 23      .rst(rst),
 24      .start(start),
 25      .end_of_str(end_of_str),
 26      .char_in(char_in),
 27      .char_valid(char_valid),
 28      .prog_en(prog_en),
 29      .prog_addr(prog_addr),
 30      .prog_data(prog_data),
 31      .ready(ready),
 32      .match_bus(match_bus)
 33  );
 34
 35  always #5 clk = ~clk;
 36
 37  task send_char;
 38    input [7:0] c;
 39    begin
 40      wait (ready);
 41      @(posedge clk);
 42      char_in = c;
 43      char_valid = 1;
 44      @(posedge clk);
 45      char_valid = 0;
 46      @(posedge clk);
 47      wait (ready);
 48    end
 49  endtask
 50
 51  task finish_string;
 52    begin
 53      wait (ready);
 54      @(posedge clk);
 55      end_of_str = 1;
 56      @(posedge clk);
 57      end_of_str = 0;
 58      @(posedge clk);
 59      wait (ready);
 60    end
 61  endtask
 62
 63  task test_string;
 64    input [127:0] s;
 65    input integer len;
 66    integer i;
 67    reg [7:0] c;
 68    begin
 69      @(posedge clk);
 70      start = 1;
 71      @(posedge clk);
 72      start = 0;
 73      @(posedge clk);
 74      wait (ready);
 75
 76      for (i = 0; i < len; i = i + 1) begin
 77        c = s[(len-1-i)*8+:8];
 78        send_char(c);
 79      end
 80      finish_string();
 81      $display("Test Done. MatchBus: %b", match_bus);
 82      #20;
 83    end
 84  endtask
 85
 86  initial begin
 87    $dumpfile("processor/build/dump_processor.vcd");
 88    $dumpvars(0, tb_regex_cpu);
 89
 90    clk = 0;
 91    rst = 1;
 92    start = 0;
 93    end_of_str = 0;
 94    char_in = 0;
 95    char_valid = 0;
 96    prog_en = 0;
 97    prog_addr = 0;
 98    prog_data = 0;
 99    #20 rst = 0;
100
101    $display("--- Starting Robust Simulation ---");
102
103    $display("1. Testing 'abbc' (Regex 0)...");
104    test_string("abbc", 4);
105
106    $display("2. Testing 'abb' (Regex 1)...");
107    test_string("abb", 3);
108
109    $display("3. Testing 'ac' (Regex 2)...");
110    test_string("ac", 2);
111
112    $display("4. Testing 'ccc' (Regex 4)...");
113    test_string("ccc", 3);
114
115    $display("5. Testing 'abc' (Regex 7)...");
116    test_string("abc", 3);
117
118    $display("6. Testing 'babc' (Regex 9)...");
119    test_string("babc", 4);
120
121    $display("7. Testing 'acac' (Regex 10)...");
122    test_string("acac", 4);
123
124    $display("8. Testing 'cccb' (Regex 11)...");
125    test_string("cccb", 4);
126
127    #50 $finish;
128  end
129
130endmodule