xiiregexbuilder
FPGA-Accelerated Regular Expression Matching Enginesrc/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