| #ifndef LUT_H |
| #define LUT_H |
| |
| #include "logic_vec.h" |
| |
| namespace fasm { |
| |
| // Utility class to create a LUT initialization. |
| class Lut { |
| public: |
| // Initialize an LUT of a given number of inputs. |
| Lut(size_t num_inputs); |
| |
| // SetOutput sets the lut to output value when the inputs match. |
| // |
| // By default the output from the LUT is always false. |
| void SetOutput(const std::vector<vtr::LogicValue> &inputs, vtr::LogicValue value); |
| |
| // Create a wire from input_pin to LUT output. |
| // Also known as a route through LUT. |
| // |
| // input_pin must be less than num_inputs. |
| void CreateWire(size_t input_pin); |
| |
| // Create a LUT with a constant output of value. |
| void SetConstant(vtr::LogicValue value); |
| |
| // Return current LUT initialization. |
| const LogicVec & table(); |
| private: |
| size_t num_inputs_; |
| LogicVec table_; |
| }; |
| |
| // Utility class that creates a FASM feature directive based on the FASM LUT definition. |
| struct LutOutputDefinition { |
| // Definition should be of the format <feature>[<end_bit>:<start_bit]. |
| LutOutputDefinition(std::string definition); |
| |
| // Return a FASM feature directive for a wire from input specified to output. |
| // Also known as a route through LUT. |
| std::string CreateWire(int input) const; |
| |
| // Return a FASM feature directive for a constant LUT. |
| std::string CreateConstant(vtr::LogicValue value) const; |
| |
| // Return a FASM feature directive for a LUT with the specified LUT initialization. |
| std::string CreateInit(const LogicVec & table) const; |
| |
| // Base feature name. |
| std::string fasm_feature; |
| |
| // Number of inputs to this LUT. |
| int num_inputs; |
| |
| // First bit of the LUT INIT parameter. |
| int start_bit; |
| |
| // Last bit of the LUT INIT parameter. |
| int end_bit; |
| }; |
| |
| } // namespace fasm |
| |
| #endif // LUT_H |