xiiregexbuilder

FPGA-Accelerated Regular Expression Matching Engine

src/emitter.h (2324B)


 1#ifndef EMITTER_H
 2#define EMITTER_H
 3
 4#include <vector>
 5#include <string>
 6#include <memory>
 7#include "nfa.h"
 8
 9#include <filesystem>
10#include <system_error>
11
12class Emitter
13{
14public:
15    Emitter() = delete; // Static class, no instances
16
17    /**
18     * @brief Emits all Verilog files to the specified directory.
19     * @param nfas           The vector of NFAs to be emitted.
20     * @param outputDir      Directory where files will be written.
21     * @param testStrings    Optional test strings for the testbench.
22     * @param expectedMatches Optional expected match masks for the testbench.
23     */
24    static void emit(const std::vector<std::unique_ptr<NFA>> &nfas,
25                     const std::string &outputDir,
26                     const std::vector<std::string> &testStrings = {},
27                     const std::vector<std::string> &expectedMatches = {},
28                     bool isPII = false);
29
30private:
31    static void emitNFAModule(const NFA &nfa, const std::filesystem::path &outputDir, bool isPII);
32    static void emitTopModule(const std::vector<std::unique_ptr<NFA>> &nfas, const std::filesystem::path &outputDir);
33    static void emitTestbench(const std::vector<std::unique_ptr<NFA>> &nfas,
34                              const std::filesystem::path &outputDir,
35                              const std::vector<std::string> &testStrings,
36                              const std::vector<std::string> &expectedMatches);
37
38    // UART RX receiver
39    static void emitUARTRX(const std::filesystem::path &outputDir);
40
41    // UART TX transmitter
42    static void emitUARTTX(const std::filesystem::path &outputDir);
43
44    // Circular FIFO buffer between uart_rx and the NFA engine
45    static void emitFIFO(const std::filesystem::path &outputDir);
46
47    // Top FPGA module
48    static void emitTopFPGA(const std::vector<std::unique_ptr<NFA>> &nfas, const std::filesystem::path &outputDir);
49
50    // PII Guard specifics
51    static void emitPIIUART(const std::filesystem::path &outputDir);
52    static void emitPIIUARTTx(const std::filesystem::path &outputDir);
53    static void emitPIITopFPGA(const std::vector<std::unique_ptr<NFA>> &nfas, const std::filesystem::path &outputDir);
54
55    static void emitConstraints(const std::vector<std::unique_ptr<NFA>> &nfas, const std::filesystem::path &outputDir);
56};
57
58#endif // EMITTER_H