xiiregexbuilder

FPGA-Accelerated Regular Expression Matching Engine
commit 545d26fe1baa8ea075838df67f4e6faad57deb99
parent 1a1bcf8e151fdcf339fd9373f6abddcf1df919f9
Author: Achuthan TM <achuthantm05@gmail.com>
Date:   Wed,  8 Apr 2026 10:00:00 +0530

Week 4: Final NFA modules, Vivado synthesis scripts, timing closure traces (Part 1: Initial definitions)

Diffstat:
Mdump.vcd | 277+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aoutput-eg/nfa_3.v | 45+++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 322 insertions(+), 0 deletions(-)

diff --git a/dump.vcd b/dump.vcd @@ -1148,3 +1148,280 @@ b0 ' 1( b1 / b10 0 +b1 2 +b10 3 +b1 5 +b1 8 +b10 9 +b1 ; +b10 < +b1 > + +#590000 +0! +0$ +b1100010 & +0( +0+ +b1100010 - +b100 0 +b0 3 +b100 6 +b0 9 +b0 < +b100 ? + +#595000 +1! +1( +b100 / +b0 0 +b0 2 +b100 5 +b0 8 +b0 ; +b100 > + +#600000 +0! +0( + +#605000 +1! +1( +b0 / + +#610000 +0! +0( + +#615000 +1! +1( + +#620000 +0! +0( + +#625000 +1! +1( + +#630000 +0! +1% +0( +1, + +#635000 +1! +b100 ' +1( +14 + +#640000 +0! +0% +0( +0, + +#645000 +1! +b0 ' +1( +04 + +#650000 +0! +1$ +0( +1+ + +#655000 +1! +1( +b1 / +b100 0 +b1 2 +b1 5 +b1 8 +b1 ; +b1 > + +#660000 +0! +0$ +b1111000 & +0( +0+ +b1111000 - +b0 0 +b0 6 +b0 ? + +#665000 +1! +1( +b0 / +b0 2 +b0 5 +b0 8 +b0 ; +b0 > + +#670000 +0! +1% +0( +1, + +#675000 +1! +1( + +#680000 +0! +0% +0( +0, + +#685000 +1! +1( + +#690000 +0! +1$ +0( +1+ + +#695000 +1! +1( +b1 / +b1 2 +b1 5 +b1 8 +b1 ; +b1 > + +#700000 +0! +0$ +b1100001 & +0( +0+ +b1100001 - +b10 0 +b10 3 +b10 6 +b10 9 +b10 < +b10 ? + +#705000 +1! +1( +b10 / +b0 0 +b10 2 +b0 3 +b10 5 +b10 8 +b100 9 +b10 ; +b0 < +b10 > + +#710000 +0! +b1111000 & +0( +b1111000 - +b0 6 +b0 ? + +#715000 +1! +1( +b0 / +b0 2 +b0 5 +b100 8 +b0 9 +b0 ; +b0 > + +#720000 +0! +b1100010 & +0( +b1100010 - +b1000 9 + +#725000 +1! +1( +b1000 8 +b0 9 + +#730000 +0! +1% +0( +1, + +#735000 +1! +b1000 ' +1( +17 +b0 8 + +#740000 +0! +0% +0( +0, + +#745000 +1! +b0 ' +1( +07 + +#750000 +0! +1$ +0( +1+ + +#755000 +1! +1( +b1 / +b100 0 +b1 2 +b1 5 +b100 6 +b1 8 +b1 ; +b1 > +b100 ? + +#760000 +0! +0$ +b1100001 & +0( +0+ +b1100001 - +b10 0 +b10 3 +b10 6 +b10 9 +b10 < +b10 ? + +#765000 +1! diff --git a/output-eg/nfa_3.v b/output-eg/nfa_3.v @@ -0,0 +1,45 @@ +`timescale 1ns / 1ps + +// NFA for regex index 3 +module nfa_3 ( + input wire clk, + input wire en, + input wire rst, + input wire start, + input wire end_of_str, + input wire [7:0] char_in, + output reg match +); + + // One-hot state register + reg [3:0] state_reg; + wire [3:0] next_state; + + assign next_state[0] = 1'b0; + assign next_state[1] = (state_reg[0] && (char_in == 8'd97)); + assign next_state[2] = (state_reg[1] && (char_in >= 8'd32) && (char_in <= 8'd126)); + assign next_state[3] = (state_reg[2] && (char_in == 8'd98)); + + always @(posedge clk) begin + if (rst || start) begin + // Reset to start state (one-hot) + state_reg <= 1 << 0; + end else if (en) begin + state_reg <= next_state; + end + end + + // Match logic: asserted on cycle following end_of_str + always @(posedge clk) begin + if (rst || start) begin + match <= 1'b0; + end else if (en) begin + if (end_of_str) begin + match <= state_reg[3]; + end else begin + match <= 1'b0; + end + end + end + +endmodule