100 SignalState evaluateAnd(
const std::vector<SignalState>& inputs)
const;
101 SignalState evaluateOr(
const std::vector<SignalState>& inputs)
const;
103 SignalState evaluateNand(
const std::vector<SignalState>& inputs)
const;
104 SignalState evaluateNor(
const std::vector<SignalState>& inputs)
const;
105 SignalState evaluateXor(
const std::vector<SignalState>& inputs)
const;
106 SignalState evaluateXnor(
const std::vector<SignalState>& inputs)
const;
114 DFlipFlop(
const std::string& name,
bool has_reset =
true,
bool has_set =
false);
150 JKFlipFlop(
const std::string& name,
bool has_reset =
true,
bool has_set =
false);
178 SRLatch(
const std::string& name,
bool is_gated =
false);
202 BinaryCounter(
const std::string& name,
size_t width,
bool is_up_counter =
true);
228 bool count_enable_ =
true;
231 void updateOutputs();
258 const std::vector<SignalState>&
getData()
const {
return data_; }
259 void setData(
const std::vector<SignalState>& data);
270 std::vector<SignalState> data_;
274 void updateOutputs();
297 size_t select_width_;
298 size_t selected_input_ = 0;
300 size_t calculateSelectValue()
const;
322 size_t output_count_;
323 size_t select_width_;
324 size_t selected_output_ = 0;
326 size_t calculateSelectValue()
const;
334 Decoder(
const std::string& name,
size_t input_width,
bool has_enable =
true);
347 size_t output_count_;
350 size_t calculateInputValue()
const;
358 Encoder(
const std::string& name,
size_t input_count,
bool is_priority =
false);
371 size_t output_width_;
374 size_t findActiveInput()
const;
375 size_t findHighestPriorityInput()
const;
401 uint64_t
getA()
const {
return a_; }
402 uint64_t
getB()
const {
return b_; }
415 bool carry_out_ =
false;
417 void calculateInputValues();
418 void updateOutputs();
454 size_t address_width_;
458 std::vector<uint64_t> memory_data_;
460 uint64_t current_address_ = 0;
461 uint64_t current_data_ = 0;
465 void updateCurrentAddress();
466 void updateCurrentData();
467 void updateOutputs();
481 const std::string& name,
bool has_reset =
true,
bool has_set =
false);
484 const std::string& name,
bool has_reset =
true,
bool has_set =
false);
487 const std::string& name,
bool is_gated =
false);
491 const std::string& name,
size_t width,
bool is_up_counter =
true);
498 const std::string& name,
size_t input_count);
501 const std::string& name,
size_t output_count);
504 const std::string& name,
size_t input_width,
bool has_enable =
true);
507 const std::string& name,
size_t input_count,
bool is_priority =
false);
513 const std::string& name,
size_t width);
517 const std::string& name,
size_t address_width,
size_t data_width,
525 const std::string& part_number,
const std::string& name);
528 const std::string& part_number,
const std::string& name);
void evaluateLogic() override
bool isCountEnabled() const
std::string getDescription() const override
uint64_t getCount() const
void setCount(uint64_t value)
uint64_t getMaxCount() const
BinaryCounter(const std::string &name, size_t width, bool is_up_counter=true)
void enableCount(bool enable)
Component(const std::string &name, ComponentCategory category)
Component library for managing component definitions.
void evaluateLogic() override
EdgeType getEdgeType() const
SignalState getQbar() const
std::string getDescription() const override
DFlipFlop(const std::string &name, bool has_reset=true, bool has_set=false)
void setEdgeType(EdgeType type)
size_t getInputWidth() const
Decoder(const std::string &name, size_t input_width, bool has_enable=true)
size_t getOutputCount() const
void evaluateLogic() override
std::string getDescription() const override
size_t getOutputCount() const
size_t getSelectWidth() const
void evaluateLogic() override
Demultiplexer(const std::string &name, size_t output_count)
std::string getDescription() const override
size_t getSelectedOutput() const
Digital component factory.
static std::shared_ptr< ShiftRegister > createShiftRegister(const std::string &name, size_t width, ShiftRegister::ShiftType type)
static void registerStandardComponents(ComponentLibrary &library)
static std::shared_ptr< Demultiplexer > createDemultiplexer(const std::string &name, size_t output_count)
static std::shared_ptr< FullAdder > createFullAdder(const std::string &name)
static std::shared_ptr< DFlipFlop > createDFlipFlop(const std::string &name, bool has_reset=true, bool has_set=false)
static std::shared_ptr< Component > create4000Series(const std::string &part_number, const std::string &name)
static std::shared_ptr< RippleCarryAdder > createRippleCarryAdder(const std::string &name, size_t width)
static std::shared_ptr< BinaryCounter > createBinaryCounter(const std::string &name, size_t width, bool is_up_counter=true)
static std::shared_ptr< SRLatch > createSRLatch(const std::string &name, bool is_gated=false)
static std::shared_ptr< Encoder > createEncoder(const std::string &name, size_t input_count, bool is_priority=false)
static std::shared_ptr< Multiplexer > createMultiplexer(const std::string &name, size_t input_count)
static std::shared_ptr< LogicGate > createLogicGate(const std::string &name, LogicGate::GateType type, size_t input_count=2)
static std::shared_ptr< JKFlipFlop > createJKFlipFlop(const std::string &name, bool has_reset=true, bool has_set=false)
static std::shared_ptr< Memory > createMemory(const std::string &name, size_t address_width, size_t data_width, Memory::MemoryType type)
static std::shared_ptr< Decoder > createDecoder(const std::string &name, size_t input_width, bool has_enable=true)
static std::shared_ptr< Component > create74Series(const std::string &part_number, const std::string &name)
LogicFamily logic_family_
virtual void propagateSignals()
SignalState voltageToSignalState(double voltage) const
double signalStateToVoltage(SignalState state) const
DigitalComponent(const std::string &name, ComponentCategory category)
virtual void evaluateLogic()=0
LogicFamily getLogicFamily() const
void simulate(double time_step) override
void setLogicFamily(LogicFamily family)
std::string getDescription() const override
size_t getInputCount() const
void evaluateLogic() override
Encoder(const std::string &name, size_t input_count, bool is_priority=false)
size_t getOutputWidth() const
FullAdder(const std::string &name)
std::string getDescription() const override
void evaluateLogic() override
std::string getDescription() const override
JKFlipFlop(const std::string &name, bool has_reset=true, bool has_set=false)
SignalState getQbar() const
void evaluateLogic() override
LogicGate(const std::string &name, GateType type, size_t input_count=2)
std::string getDescription() const override
GateType getGateType() const
void evaluateLogic() override
size_t getInputCount() const
uint64_t readData(uint64_t address) const
size_t getAddressWidth() const
Memory(const std::string &name, size_t address_width, size_t data_width, MemoryType type)
size_t getDataWidth() const
void loadFromFile(const std::string &filename)
void evaluateLogic() override
void saveToFile(const std::string &filename) const
void writeData(uint64_t address, uint64_t data)
std::string getDescription() const override
size_t getMemorySize() const
MemoryType getMemoryType() const
size_t getSelectedInput() const
void evaluateLogic() override
size_t getInputCount() const
std::string getDescription() const override
Multiplexer(const std::string &name, size_t input_count)
size_t getSelectWidth() const
void evaluateLogic() override
std::string getDescription() const override
RippleCarryAdder(const std::string &name, size_t width)
void evaluateLogic() override
SignalState getQbar() const
SRLatch(const std::string &name, bool is_gated=false)
std::string getDescription() const override
ShiftType getShiftType() const
std::string getDescription() const override
Direction getDirection() const
const std::vector< SignalState > & getData() const
void setDirection(Direction dir)
void setData(const std::vector< SignalState > &data)
void evaluateLogic() override
ShiftRegister(const std::string &name, size_t width, ShiftType type)
Hierarchical EDA Component System.
SignalState
Signal states in digital circuits.
ComponentCategory
Component categories for organization.
LogicFamily
Logic family types.
Main namespace for ZLayout library.